¿Cómo puedo conservar el bit setuid en archivos tar con Perl Archive :: Tar?

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

  •  06-09-2019
  •  | 
  •  

Pregunta

Estoy usando Perl Archive :: Tar módulo. Conserva los permisos de archivo, pero no conserva el bit pegajoso. En el otro extremo, donde extraigo el archivo, todos los bits pegajosas se han ido. Creo que el sistema operativo UNIX / LINUX almacena estos sticky bit en otro lugar. ¿Cómo puedo hacer mi archivo preservar sticky bit también?

El uso del modificador -p al alquitrán de la conserva, pero ¿cómo lo hago usando Archivo :: tar ? Estoy utilizando el módulo de Perl en ambos lados.

¿Fue útil?

Solución

De acuerdo con la fina Fuente, Archive :: Tar :: tiras limar los bits altos de la modalidad. Puede probar el siguiente conjuro mágico en el comienzo de la secuencia de comandos (antes de nada podría haber referenciado Archive :: Tar) y ver si eso se subvierte:

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

Breve explicación: STRIP_MODE es una constante que contiene una subrutina que se puede pasar del modo sin procesar y devuelve el modo que debe almacenarse. Normalmente se establece en

sub { shift() & 0777 }

Debido a que es una constante, importado de Archivo :: :: Tar constante en Archive :: Tar :: Archivo y utilizado allí, lo que se ajusta a la voluntad de ser inline en Archive :: Tar :: Archivo como se compila . Así que para cambiarlo, la constante debe ser cambiado antes de que se colocarán en línea, es decir, antes Archive :: Tar :: Archivo jamás se carga.

N.B. Debido a que el cambio de una constante inlinable es propenso a errores (cambiándola cuando ya es demasiado tarde para tener algún efecto), que normalmente genera una advertencia severa que no puede ser desactivado por medios habituales.

Otros consejos

No es seguro, pero en el comando oficial de alquitrán, que necesita para aprobar p para que esto suceda

Es posible que desee echar un vistazo a la Archive :: Tar documentación para los detalles. A partir de un breve vistazo, parece que

$Archive::Tar::CHMOD = 1;

debería hacer lo que quiera, aunque la documentación afirma que el ajuste anterior es el valor predeterminado. Puede ser que Archive :: Tar despoja de los bits de modo de orden superior como el poco pegajosa.

es el archivo creado y se extrae con Archive :: Tar, o está usando el programa tar estándar en un extremo o el otro?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top