Comment puis-je conserver le bit setuid dans les archives tar avec Archive de Perl :: Tar?

StackOverflow https://stackoverflow.com/questions/580653

  •  06-09-2019
  •  | 
  •  

Question

J'utilise Perl Archive :: Tar module. Il conserve les autorisations de fichier, mais ne conserve pas le bit sticky. À l'autre extrémité où j'extrait l'archive, tous les bits collants sont partis. Je pense que le système d'exploitation UNIX / LINUX stocke ces bits collants ailleurs. Comment puis-je faire mes archives conserver sticky aussi?

En utilisant le commutateur -p pour le goudron préserve mais comment puis-je le faire en utilisant Archive :: tar ? J'utilise le module Perl sur les deux côtés.

Était-ce utile?

La solution

Selon la source fine, Archive :: Tar :: bandes de limer les bits de poids forts du mode. Vous pouvez essayer la formule magique suivante au début de votre script (avant tout aurait fait référence Archive :: Tar) et voir si cela sape les fondements:

use Archive::Tar::Constant ();
BEGIN {
    local $SIG{__WARN__} = sub{};
    *Archive::Tar::Constant::STRIP_MODE = sub(){ sub {shift} };
}
...
use Archive::Tar;
...

Brève explication: STRIP_MODE est une constante qui contient un sous-programme qui peut être transmis le mode brut et retourne le mode qui doit être stocké. Il est normalement réglé sur

sub { shift() & 0777 }

Parce qu'il est une constante, importée d'Archive :: Tar :: Constant dans Archive :: Tar :: File et utilisé là, quoi que ce soit réglé sur sera inline dans Archive :: Tar :: File comme il est compilé . Donc, pour changer, la constante doit être changé avant qu'il ne soit inline, qui est, avant Archive :: Tar :: fichier est toujours chargé.

N.B.. Du fait de changer une constante inlinable est sujette à l'erreur (changer après il est trop tard pour avoir un effet), il génère normalement un avertissement sévère qui ne peut pas être désactivé par les moyens habituels.

Autres conseils

Je ne sais pas, mais la commande tar officielle, vous devez passer -p pour que cela se produise

Vous pouvez jeter un oeil à la Archive :: Documentation Tar pour les détails. D'un bref coup d'œil, il semble que

$Archive::Tar::CHMOD = 1;

devrait faire ce que vous voulez, même si la documentation prétend que le paramètre ci-dessus est la valeur par défaut. Il se peut que Archive :: Tar dénude les bits de mode d'ordre supérieur comme le bit sticky.

est l'archive à la fois créé et extrait avec Archive :: Tar, ou utilisez-vous le programme de goudron standard à une extrémité ou l'autre?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top