O que o sinalizador -p (preservar permissões) do tar realmente preserva?

22

O que a -pbandeira realmente preserva ao criar e extrair um tarball? São as rwxpermissões que preserva?

Quando criei um htdocs/tarball de propriedade da raiz, a extração para a minha máquina local alterou a propriedade da raiz para o meu usuário.

nicoX
fonte
5
Talvez você deva tentar extrair o arquivo como raiz. Não é possível definir permissões para outro usuário como um usuário normal, então acho tarque não será capaz de fazê-lo também. Por favor me diga se isso funcionou.
Louis Matthijssen
"máquina local"? Por favor, esclareça qual SO esta máquina possui;)
Rinzwind
Diga-nos também quais sistemas de arquivos você está usando. Tanto os de origem quanto os de destino.
Terdon
Fonte: Red Hat Enterprise Linux Server release 6.5 (Santiago) Target: Ubuntu 13.10 Ambos usamGPT
nicoX
Nota lateral: tarpreserva as permissões. -pe --same-owner/ --no-same-owner(como nas respostas) são sinalizadores de extração. Eles não têm efeito durante o arquivamento
Fr0zenFyr

Respostas:

19

Propriedade e permissões são duas coisas diferentes. O -psinalizador preserva permissões . Nos sistemas * nix, os usuários regulares não podem alterar a propriedade do arquivo para um usuário que não é ele próprio.

Como explicado aqui :

Somente processos com um ID do usuário efetivo igual ao ID do usuário ou com privilégios apropriados podem alterar a propriedade de um arquivo. Se _POSIX_CHOWN_RESTRICTED estiver em vigor para o caminho:

  • A alteração do ID do usuário é restrita a processos com privilégios apropriados.

  • É permitido alterar o ID do grupo para um processo com um ID do usuário efetivo igual ao ID do usuário do arquivo, mas sem privilégios apropriados, se e somente se o proprietário for igual ao ID do usuário do arquivo ou (uid_t) -1 e o grupo for igual ao ID do grupo efetivo do processo de chamada ou a um de seus IDs de grupo suplementares.

A lógica por trás disso foi bem explicada pelo @Gilles nesta resposta para Unix e Linux:

O motivo dessa restrição é que a distribuição de um arquivo a outro usuário pode permitir que coisas ruins aconteçam em situações incomuns, mas ainda importantes. Por exemplo:

  • Se um sistema tiver cotas de disco ativadas, Alice poderá criar um arquivo gravável em mundo em um diretório acessível somente por ela (para que ninguém mais possa acessar esse diretório gravável em mundo) e, em seguida, executar chown para tornar esse arquivo pertencente a outro usuário Bill . O arquivo será contado na cota de disco de Bill, embora apenas Alice possa usá-lo.
  • Se Alice distribuir um arquivo para Bill, não há vestígios de que Bill não criou esse arquivo. Isso pode ser um problema se o arquivo contiver dados ilegais ou comprometedores.
  • Alguns programas exigem que seu arquivo de entrada pertença a um usuário específico para autenticar uma solicitação (por exemplo, o arquivo contém algumas instruções que o programa executará em nome desse usuário). Geralmente, esse não é um design seguro, porque, mesmo que Bill tenha criado um arquivo contendo instruções sintaticamente corretas, ele pode não ter a intenção de executá-las nesse momento específico. No entanto, permitir que Alice crie um arquivo com conteúdo arbitrário e recebê-lo como entrada de Bill só pode piorar as coisas.

Portanto, mesmo se você usar o --same-ownersinalizador tar , você ainda precisará extrair os arquivos rootpara preservar a propriedade. Esse sinalizador está ativado por padrão para root, então o que você deseja é:

sudo tar xpf foo.tgz
Terdon
fonte
9

Existem mais 2 opções para o alcatrão que são interessantes:

--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**)

O segundo é o padrão, para que você possa adicionar --same-ownerpara salvar seu usuário. Você provavelmente terá que fazer isso com sudo.

Além disso: isso funcionará apenas em sistemas que suportam POSIX. E sistemas operacionais diferentes do Ubuntu podem não ter essas 2 opções (elas não são padrão).

Rinzwind
fonte
3
Eles --same-ownernão funcionarão para usuários não raiz, eles não terão o direito de definir a propriedade para ninguém além de si mesmos. Isso é definido pelo POSIX .
Terdon
4

Para preservar o proprietário, execute como root ou use o sinalizador --same-owner ao lado do sinalizador -p ao extrair.

NGRhodes
fonte
3
Ele precisa ser executado como root em qualquer caso. Usuários não raiz não podem alterar a propriedade do arquivo para outros usuários.
terdon