¿Forzar al propietario y al grupo por el contenido de un archivo tar?

21

Me gustaría crear un archivo tar con contenido que pertenezca a un propietario: par de grupos que no existen en el sistema desde el que se está creando el archivo.

Aquí está la dirección que he intentado:

tar ca --owner='otherowner' --group='othergroup' mydata.tgz mydata

Y cuando ejecuto este comando, aparece el siguiente error:

tar: otherowner: Invalid owner
tar: Error is not recoverable: exiting now

¿Hay alguna forma de obligar a tar a aceptar el propietario: grupo, aunque ninguno de ellos exista en el sistema desde el que se crea el archivo?

David
fuente
1
Tenga en cuenta que --owner no es una opción compatible con tar. Este es un GNUism no portátil. Con star, p. Ej., Utiliza el buscador integrado y especifica -chown username / userid -chgrp groupname / groupid.
schily

Respuestas:

19

Linux no utiliza internamente propietarios y nombres de grupos, sino números: UID y GID. Los nombres de usuarios y grupos se asignan a partir de los contenidos de / etc / passwd y / etc / group para conveniencia del usuario. Como no tiene la entrada 'otherowner' en ninguno de esos archivos, Linux en realidad no sabe qué UID y GID deben asignarse a un archivo. Intentemos pasar un número en su lugar:

$ tar cf archive.tar test.c --owner=0 --group=0
$ tar -tvf archive.tar 
-rw-rw-r-- root/root        45 2013-01-10 15:06 test.c
$ tar cf archive.tar test.c --owner=543543 --group=543543
$ tar -tvf archive.tar 
-rw-rw-r-- 543543/543543    45 2013-01-10 15:06 test.c

Parece funcionar.

Nykakin
fuente
¡Interesante! Por lo tanto, el comando tar debe sondear el sistema para que los números de usuario y grupo coincidan con los nombres que estaba tratando de usar. ¡Gracias!
David
1
Una nota para otros que se encuentran con esto: tar genera automáticamente los nombres de usuario / grupo cuando se usan las -tvfbanderas. Para ver los números actuales de los archivos en un archivo, utilice un comando como este:$ tar --numeric-owner -tvf archive.tar
David
En realidad, con mi versión tar, puedo ingresar cualquier nombre de usuario que desee y tenerlo almacenado en el archivo tar (pero con mi identificación de usuario numérica por defecto). Al enumerar, obtiene los nombres de usuario de forma predeterminada, pero los identificadores de usuario usan la --numeric-ownerbandera. Lo que es más interesante es que puedes configurar ambos usando --owner=name:1234o --group=groupname:4711. Fuente: función parse_owner_group del código fuente tar
Bluehorn
Probablemente valga la pena señalar que el encabezado tar ustar (estándar en BSD y Linux) codifica tanto los valores numéricos UID / GID como los nombres de usuario y grupo. Al desempacar, los nombres se usan primero, si están presentes en el encabezado y coinciden con los usuarios y grupos definidos en el sistema. El UID numérico y el GID solo se utilizarán como respaldo.
kbolino
1

Agregue los params --no-same-owner --no-same-permissionscon tar. Echa un vistazo a los documentos .

Bruno Wego
fuente
2
Esas opciones solo se usan al extraer archivos de un archivo tar, no al crear uno.
Anthony G - justicia para Monica
Tienes razón @AnthonyGeoghegan!
Bruno Wego
-2

Aquí hay un fragmento de código para reemplazar el usuario / grupo con identificadores sobre la marcha:

tar ca --owner="$(id -u ***otherowner***)" --group="$(id -g ***othergroup***)" mydata.tgz mydata
poussma
fuente
55
No. Si id sabe cómo resolver el nombre, tar también lo sabe. La pregunta es sobre un nombre de usuario desconocido para el sistema.
Daniel S