¿Qué conserva realmente el indicador tar's -p (preservar permisos)?

22

¿Qué -ppreserva realmente la bandera al crear y extraer un tarball? ¿Son los rwxpermisos que conserva?

Cuando creé un htdocs/tarball propiedad de root, extraerlo a mi máquina local cambió la propiedad de root a mi usuario.

nicoX
fuente
55
Tal vez deberías intentar extraer el archivo como root. No es posible establecer permisos para otro usuario como usuario normal, por lo que creo tarque no podrá hacerlo también. Por favor dime si esto funcionó.
Louis Matthijssen
"máquina local"? Por favor, aclare qué sistema operativo tiene esta máquina;)
Rinzwind
También díganos qué sistemas de archivos está utilizando. Tanto los de origen como los de destino.
terdon
Fuente: Red Hat Enterprise Linux Server release 6.5 (Santiago) Destino: Ubuntu 13.10 Ambos usanGPT
nicoX
Nota al margen: tarconserva los permisos. -py --same-owner/ --no-same-owner(como en las respuestas) son banderas de extracción. No tienen ningún efecto durante el archivo
Fr0zenFyr

Respuestas:

19

La propiedad y los permisos son dos cosas diferentes. La -pbandera conserva los permisos . En los sistemas * nix, los usuarios normales no pueden cambiar la propiedad del archivo a un usuario que no sea ellos mismos.

Como se explica aquí :

Solo los procesos con una ID de usuario efectiva igual a la ID de usuario del archivo o con los privilegios apropiados pueden cambiar la propiedad de un archivo. Si _POSIX_CHOWN_RESTRICTED está vigente para la ruta:

  • Cambiar la ID de usuario está restringido a procesos con los privilegios apropiados.

  • Se permite cambiar la ID de grupo a un proceso con una ID de usuario efectiva igual a la ID de usuario del archivo, pero sin los privilegios apropiados, si y solo si el propietario es igual a la ID de usuario del archivo o (uid_t) -1 y el grupo es igual ya sea al ID de grupo efectivo del proceso de llamada o a uno de sus ID de grupo suplementarios.

La razón detrás de esto ha sido bien explicada por @Gilles en esta respuesta de Unix y Linux:

La razón de esta restricción es que regalar un archivo a otro usuario puede permitir que sucedan cosas malas en situaciones poco comunes pero importantes. Por ejemplo:

  • Si un sistema tiene cuotas de disco habilitadas, Alice podría crear un archivo de escritura mundial en un directorio accesible solo para ella (para que nadie más pueda acceder a ese directorio de escritura mundial), y luego ejecutar chown para que ese archivo sea propiedad de otro usuario Bill . El archivo entonces contaría bajo la cuota de disco de Bill, aunque solo Alice puede usar el archivo.
  • Si Alice le regala un archivo a Bill, no hay rastro de que Bill no haya creado ese archivo. Esto puede ser un problema si el archivo contiene datos ilegales o comprometedores.
  • Algunos programas requieren que su archivo de entrada pertenezca a un usuario en particular para autenticar una solicitud (por ejemplo, el archivo contiene algunas instrucciones que el programa realizará en nombre de ese usuario). Por lo general, este no es un diseño seguro, porque incluso si Bill creó un archivo que contiene instrucciones sintácticamente correctas, es posible que no haya tenido la intención de ejecutarlas en este momento en particular. Sin embargo, permitir que Alice cree un archivo con contenido arbitrario y lo tome como entrada de Bill solo puede empeorar las cosas.

Entonces, incluso si usa la --same-ownerbandera de tar , aún necesitará extraer los archivos rootpara preservar la propiedad. Esa bandera está activada por defecto para root, así que lo que quieres es:

sudo tar xpf foo.tgz
terdon
fuente
9

Hay 2 opciones más para el alquitrán que son interesantes:

--same-owner
       try extracting files with the same ownership as exists in the ar‐
       chive (default for superuser)

--no-same-owner
       extract files as yourself (**default for ordinary users**)

El segundo es el predeterminado, por lo que puede agregarlo --same-ownerpara salvar a su usuario. Probablemente tendrá que hacer esto con sudo.

Además de eso: esto solo funcionará en sistemas que admitan POSIX. Y los sistemas operativos que no sean Ubuntu pueden no tener estas 2 opciones (no son estándar).

Rinzwind
fuente
3
El --same-ownerno va a funcionar para los usuarios que no sean root, no tendrá el derecho de establecer la propiedad a nadie más que a sí mismos. Eso está definido por POSIX .
terdon
4

Para conservar el propietario, ejecute como root o use el indicador --same-owner junto con el indicador -p al extraer.

NGRhodes
fuente
3
En cualquier caso, debe ejecutarse como root. Los usuarios no root no pueden cambiar la propiedad del archivo a otros usuarios.
terdon