Forçar o proprietário e o grupo pelo conteúdo de um arquivo tar?

21

Eu gostaria de criar um arquivo tar com conteúdo pertencente a um par proprietário: grupo que não existe no sistema a partir do qual o arquivo está sendo criado.

Aqui está a direção que tentei:

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

E ao executar este comando, recebo o seguinte erro:

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

Existe uma maneira de forçar o tar a aceitar o grupo owner:, mesmo que nenhum deles exista no sistema a partir do qual o arquivo está sendo criado?

David
fonte
11
Note que --owner não é uma opção suportada pelo tar. Este é um GNUism não portátil. Com o star, você usa, por exemplo, a localização embutida e especifica -chown username / userid -chgrp groupname / groupid.
schily 27/08/15

Respostas:

19

O Linux não usa nomes e proprietários de grupos internamente, mas números - UIDs e GIDs. Os nomes de usuários e grupos são mapeados a partir do conteúdo dos arquivos / etc / passwd e / etc / group para conveniência do usuário. Como você não tem uma entrada de 'outro proprietário' em nenhum desses arquivos, o Linux não sabe realmente qual UID e GID deve ser atribuído a um arquivo. Vamos tentar passar um número:

$ 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
fonte
Interessante! Portanto, o comando tar deve pesquisar o sistema para que os números de usuário e grupo correspondam aos nomes que eu estava tentando usar. Obrigado!
David
11
Uma observação para outras pessoas que se deparam com isso: o tar gera automaticamente nomes de usuário / grupo ao usar os -tvfsinalizadores. Para visualizar os atuais números de arquivos em um arquivo usar um comando como este:$ tar --numeric-owner -tvf archive.tar
David
Na verdade, com a minha versão tar, posso digitar qualquer nome de usuário que eu queira e armazená-lo no arquivo tar (mas com o meu ID de usuário numérico por padrão). Ao listar, você obtém os nomes de usuário por padrão, mas o usuário identifica usando a --numeric-ownersinalização. O mais interessante é que você pode definir ambos usando --owner=name:1234ou --group=groupname:4711. Fonte: função parse_owner_group do código fonte tar
Bluehorn 02/02
Provavelmente, vale a pena notar que o cabeçalho tar ustar (padrão no BSD e Linux) codifica tanto os valores numéricos de UID / GID quanto os nomes de usuário e grupo. Ao descompactar, os nomes são usados ​​primeiro, se estiverem presentes no cabeçalho e corresponderem a usuários e grupos definidos no sistema. O UID numérico e o GID serão usados ​​apenas como fallback.
kbolino
1

Adicione os parâmetros --no-same-owner --no-same-permissionscom tar. Dê uma olhada nos documentos .

Bruno Wego
fonte
2
Essas opções são usadas apenas ao extrair arquivos de um arquivo tar - não criando um.
Anthony G - justiça para Monica
Você está certo @AnthonyGeoghegan!
Bruno Wego
-2

Aqui está um pedaço de código para substituir o usuário / grupo por IDs rapidamente:

tar ca --owner="$(id -u ***otherowner***)" --group="$(id -g ***othergroup***)" mydata.tgz mydata
poussma
fonte
5
Não. Se o id sabe como resolver o nome, o tar também. A questão é sobre um nome de usuário desconhecido para o sistema.
Daniel S