modificar la propiedad del archivo para archivos dentro del archivo tar

10

Estoy trabajando como usuario, y me gustaría crear un archivo tar, que cuando se descomprime (por root) extraerá sus archivos con propiedad de root (de lo contrario, root debería cambiar la propiedad manualmente para cada archivo, después de que los archivos se hayan extraído a su destino).

He encontrado lo fakerootque parece hacer exactamente eso. Pero no puedo encontrar la sintaxis que necesito usar para crear mi archivo.

¿Cómo puedo crear un archivo tar.xz, de modo que los archivos tengan propiedad de root cuando sean desempaquetados por root?

do something with fakeroot ...
tar cfpJ foo.tar.xz foo/
usuario1968963
fuente

Respuestas:

12

¿Cómo puedo crear un archivo tar.xz, de modo que los archivos tengan propiedad de root cuando sean desempaquetados por root?

Eso depende de la raíz que desempaque:

tar --no-same-owner -xf ...

Si quieres hacer que todos sean root para empezar, puedes usar

tar --owner=root --group=root -cf ...
encerrada dorada
fuente
eso no funciona para mí: me tar --owner=root --group=root cfpJ files.tar.xz files/da un error tar: You must specify one of the -Acdtrux 'o --test-label' options Try tar --help' otar --usage' for more information.
user1968963
Necesita un -antes de su cadena de opciones cortas: tar --owner=root --group=root -cfpJ ...es decir -cfpJ, no cfpJ.
Ricitos
tar --owner=root --group=root -cfpJ files.tar.xz files/me da otro error: tar: files.tar.xz: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errorsy además, crea un archivo llamado pJ.
user1968963
3
Bueno. Siempre pongo el fal final (porque tiene más sentido, intuitivamente) y bajo y he aquí, obtengo el mismo fallo con -cfpJPERO -cpJffunciona.
Ricitos
@ user1968963: f siempre debe estar justo antes del nombre del archivo, ya que significa "el siguiente parámetro es el nombre del archivo". Si no lo coloca justo antes del nombre del archivo, tar pensará que el nombre del archivo es "", y luego intenta abrir un archivo "", que no puede mostrar (por supuesto).
Olivier Dulac
8

Fakeroot

La utilidad fakeroot , o la nueva utilidad fakeroot-ng (mismo propósito, técnica de implementación diferente) ejecuta un programa y finge al programa que se está ejecutando como root y que el sistema llama como chownexitoso. Solo el programa cree que estas llamadas tuvieron éxito, nada se refleja realmente en el sistema de archivos (no puede serlo ya que fakerootno tiene privilegios adicionales). Sin embargo, si el programa cambia la propiedad de un archivo y luego toma alguna acción basada en la propiedad de ese archivo, esto puede cambiar el comportamiento del programa.

Una forma típica de obtener un trabajo útil de fakeroot ejecutando un entorno fakeroot donde ocurre lo siguiente:

  1. Cree algunos archivos, muévalos, cambie su propiedad y modos, etc.
  2. Crea un archivo de estos archivos.

Ejemplo:

fakeroot sh -c '
    chown root:root usr/bin/foo
    tar cf foo.tar usr
'

Debe utilizar una sola invocación de fakeroot, ya que no hay memoria entre invocaciones.

Espacios de nombres de Linux

Solo para completar, mencionaré que si tiene un kernel de Linux ≥3.8, los espacios de nombres son otra forma de crear un entorno de simulación de raíz. El soporte de userland todavía no está allí, así que no entraré en más detalles.

Monta el archivo

Una forma diferente de resolver su problema es montar el archivo como un directorio. Puede usar archivemount , que es capaz de modificar varios formatos de archivo a través de libarchive , incluido tar comprimido.

mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt
Gilles 'SO- deja de ser malvado'
fuente
Buen truco archivemount, pero aún requiere elevación de privilegios, e incluso si el usuario está en un grupo de confianza al que se le permite montar y desmontar, el proceso falla chown, por lo fakerootque es necesario utilizar algún tipo de herramientas de terceros como espacios de nombres , también.
Anton Samsonov