Come faccio a mantenere il bit setuid in archivi tar con Perl Archive :: Tar?
Domanda
sto usando Perl Archive :: Tar modulo. Conserva i permessi dei file, ma non conserva il sticky bit. All'altra estremità dove ho estrarre l'archivio, tutti i bit appiccicose sono andati. Credo che il sistema operativo UNIX / LINUX memorizza questi bit appiccicose da qualche altra parte. Come posso fare il mio archivio preservare bit sticky anche?
Utilizzando l'opzione -p per tar conserva, ma come faccio a farlo utilizzando Archive :: tar ? Sto usando il modulo di Perl su entrambi i lati.
Soluzione
Secondo la fonte raffinata, Archivio :: :: Tar strisce di file al largo delle alte bit dalla modalità. È possibile provare il seguente incantesimo magico all'inizio dello script (prima di tutto potrebbe aver fatto riferimento Archive :: Tar) e vedere se questo sovverte:
use Archive::Tar::Constant ();
BEGIN {
local $SIG{__WARN__} = sub{};
*Archive::Tar::Constant::STRIP_MODE = sub(){ sub {shift} };
}
...
use Archive::Tar;
...
Breve spiegazione: STRIP_MODE è una costante che contiene una subroutine che può essere passato alla modalità raw e restituisce la modalità che devono essere conservati. Normalmente è impostato su
sub { shift() & 0777 }
Poiché si tratta di una costante, importato da Archive :: :: Tar Constant in archivio :: :: Tar File e là utilizzato, qualunque esso è impostato sarà inline in archivio :: :: Tar file come si è compilato . Quindi, per cambiare, la costante deve essere modificato prima di essere inline, cioè prima Archive :: :: Tar File mai viene caricato.
NB. Perché cambiare una costante inlinable è incline ad errori (cambiarla dopo che è troppo tardi per avere alcun effetto), genera normalmente un severo avvertimento che non può essere disabilitato con mezzi usuali.
Altri suggerimenti
Non è sicuro, ma sul comando tar ufficiale, è necessario passare -p per rendere questo accada
Si potrebbe voler dare un'occhiata al Archive :: Tar documentazione per i dettagli. Da una breve occhiata, sembra che
$Archive::Tar::CHMOD = 1;
dovrebbe fare quello che vuoi, anche se la documentazione afferma che l'impostazione di cui sopra è il default. Può essere che Archive :: Tar spoglia i bit di modalità di ordine superiore, come lo sticky bit.
è l'archivio sia stato creato e si estrae con Archive :: Tar, o stai usando il programma tar di serie ad un'estremità o l'altro?