O tar preserva as permissões se os IDs do usuário mudarem?

20

Eu preciso fazer backup de alguns dados com a opção "p" no comando tar. O problema é que o local em que vou restaurar esses dados terá todos os mesmos usuários, mas esses usuários podem ter IDs diferentes. Isso faz alguma diferença para o tar ou restaurará as permissões corretamente pelo nome de usuário?

Marius
fonte

Respostas:

9

tarregistra permissões com base no UID e no GID, não na sequência associada a eles. Portanto, se o UID em um servidor era 3300 e estava vinculado a 'bob', no novo servidor, o arquivo será de propriedade do usuário que possui o UID 3300.

Tudo virtual (quero dizer tudo, mas você nunca pode ter 100% de certeza) no UNIX usa os valores UID: GID, porque é o que é realmente armazenado no nível do sistema de arquivos. O nome é apenas uma pesquisa simples no arquivo passwd, as verificações subjacentes são feitas usando os valores numéricos.

EightBitTony
fonte
Ah, isso não é bom ... Acho que na maioria das situações é adequado. Infelizmente, não para mim ... Obrigado, EightBitTony.
Marius
3
Você provavelmente quer dizer GID (identificador de grupo), não GUID (identificador global exclusivo).
um CVn
6
O tar GNU também salva os dados do nome do usuário / grupo, porque eu posso ver se eu listar um arquivo em uma máquina que não possui esses usuários. Deve haver uma maneira de fazê-lo usar isso durante a extração.
Rob H
3
Esta resposta está simplesmente incorreta. tar faz nomes proprietário do registro.
Steffen Heil
55

Resumindo respostas anteriores e adicionando algumas informações importantes:

  • Quando criar arquivos, tarsempre vai preservar usuário e grupo ID arquivos, a menos que dito de outra maneira, com --owner=NAME, --group=NAME. Mas ainda haverá sempre um usuário e um grupo associado a cada arquivo.

  • O tar GNU, e talvez outras versões tar, também armazenam os nomes de usuário e grupo , a menos que --numeric-ownersejam usados. O bsdtar também armazena nomes de usuários e grupos por padrão, mas o suporte à --numeric-owneropção ao criar não apareceu até o bsdtar 3.0 (observe que o bsdtar suportava a opção ao extrair por muito mais tempo).

  • Ao extrair como um usuário comum , todos os arquivos sempre pertencem ao usuário. E não pode ser diferente, pois a extração de um arquivo está criando um novo arquivo no sistema de arquivos, e um usuário comum não pode criar um arquivo e dar a propriedade a outra pessoa.

  • Ao extrair como root , tarpor padrão, restaura a propriedade dos arquivos extraídos, a menos que --no-same-owner seja usado, o que dará a propriedade de fazer o root.

  • Em GNU tar, bsdtar, e talvez outras versões tar, a propriedade restaurada é feito por usuário (e grupo) nome , se essa informação está no arquivo e não é um usuário correspondente no sistema de destino. Caso contrário, ele restaura por ID. Se a --numeric-owneropção for fornecida, os nomes de usuários e grupos serão ignorados.

  • Permissões e carimbos de data e hora também são salvos no arquivo morto e restaurados por padrão, a menos que opções --no-same-permissionse / ou --touchsejam usadas. Quando extraído pelo usuário, o usuário umaské subtraído das permissões, a menos que --same-permissionsseja usado.

  • --preserve-permissionse --same-permissionssão aliases e têm a mesma funcionalidade que-p

Espero que isso ajude a esclarecer o problema! :)

MestreLion
fonte
3
Excelente resposta; Responde a esta pergunta, bem como a qualquer outra pergunta que possa surgir sobre o assunto.
precisa saber é o seguinte
Deve-se notar que apenas versões recentes do GNU tarpermitem especificar nomes arbitrários --ownerou --group, no passado, tarfizeram uma pesquisa gratuita na máquina atual /etc/passwde se recusaram a executar se não houvesse correspondência.
Matteo Italia
O que acontece se você criar um arquivo com o nome especificado com, --ownermas também adicionado no --numeric-ownersinalizador? Como o alcatrão lida com esses requisitos concorrentes?
CMCDragonkai
@CMCDragonkai: --ownere --numeric-ownernão são mutuamente exclusivos, e servem a propósitos muito distintos: --owner=USERNAMEsubstituirá os arquivos e dirs owner (s) ao arquivar os arquivos, enquanto --numeric-ownersimplesmente não armazenará o nome de usuário, apenas seu ID numérico.
MestreLion 23/08/16
4

Use a opção --same-owner para o GNU tar. Consulte http://www.gnu.org/software/tar/manual/html_section/Attributes.html

Colin 't Hart
fonte
Isso está documentado como padrão para superusuários e parece responder à pergunta do OP de maneira diferente da resposta aceita. (O link diz que quando o tar do GNU restaura o uso de --same-owner, ele procura primeiro os nomes em / etc / passwd.) A única questão pendente é se a versão do OP do tar implementa --same-owner.
Mike Sherrill 'Recall Cat'
O OP está usando alguma distribuição Linux tão melhor que a chance de usar o GNU tar, acho. E indo pela documentação que é possível, enquanto a resposta aceita indica que não é ...
Colin 't Hart
@ Catcall - desculpe, eu aceitei a resposta sem sequer ter a chance de testá-lo. Às vezes eu confio cegamente nas pessoas. Ainda assim, a pessoa que respondeu estava certa, já que eu não estava restaurando com "--same-owner" e então você adicionou à resposta. Pena que não posso aceitar os dois. Estou usando o debian squeeze, que realmente suporta "--same-owner". Obrigado pela dica.
Marius
@ Marius: Tenho certeza de que você pode alterar a resposta aceita sempre que quiser. (Apenas aponto que não forneci respostas a esta pergunta, apenas comentários. Não tenho nenhum representante em jogo.)
Mike Sherrill 'Cat Recall'
4

Se você estiver tentando transferir arquivos entre dois sistemas, o rsync definirá as permissões por nome de usuário em vez de uid, observando os nomes de usuário nas duas extremidades. Somente se o usuário não existir em um dos sistemas, ele será copiado com o uid, a menos que você diga o contrário.

Conceder
fonte
Isso não responde diretamente à pergunta do OP, mas quem faz a pergunta do OP também deve aprender isso.
Mike Sherrill 'Cat Recall' (