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

19

O que o -p flag preserva ao criar e extrair um tarball? São as permissões rwx que preserva?

Quando criei um tarball htdocs/ de propriedade do root, extraí-lo para minha máquina local alterei a propriedade da raiz para o meu usuário.

    
por nicoX 09.05.2014 / 13:20

3 respostas

17

Propriedade e permissões são duas coisas diferentes. O -p flag preserva permissões . Nos sistemas * nix, os usuários comuns não podem alterar a propriedade do arquivo para um usuário que não seja ele mesmo.

Como explicado aqui :

  

Somente processos com um ID de usuário efetivo igual ao ID do usuário do arquivo 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.

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

  •   

O raciocínio por trás disso foi explicado de forma satisfatória por @Gilles em este Unix & amp; Resposta do Linux:

  

O motivo dessa restrição é que doar um arquivo para outro   usuário pode permitir que coisas ruins aconteçam em algo incomum, mas ainda assim importante   situações. Por exemplo:

     
  • Se um sistema tiver cotas de disco habilitadas, Alice poderia criar um arquivo gravável do mundo em um diretório acessível somente por ela (portanto, não   outra pessoa poderia acessar esse diretório gravável pelo mundo) e, em seguida, executar   chown para fazer esse arquivo pertencente a outro usuário Bill. O arquivo seria   em seguida, conte sob a cota de disco de Bill, embora apenas Alice possa usar o   arquivo.
  •   
  • Se Alice distribuir um arquivo para Bill, não há nenhum rastro de que Bill não tenha criado esse arquivo. Isso pode ser um problema se o arquivo contiver   dados ilegais ou de outra forma comprometedores.
  •   
  • Alguns programas exigem que seu arquivo de entrada pertença a um usuário específico para autenticar uma solicitação (por exemplo,   arquivo contém algumas instruções que o programa executará em   em nome desse usuário). Isso geralmente não é um projeto seguro, porque   mesmo se Bill criou um arquivo contendo sintaticamente correto   instruções, ele pode não ter pretendido executá-las neste   Tempo particular. No entanto, permitindo que Alice crie um arquivo com   conteúdo arbitrário e tê-lo tomado como entrada de Bill só pode fazer   coisas piores.
  •   

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

sudo tar xpf foo.tgz
    
por terdon 09.05.2014 / 13:58
7

Existem mais 2 opções para tar 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, então você pode adicionar --same-owner para salvar seu usuário. Você provavelmente terá que fazer isso com sudo .

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

    
por Rinzwind 09.05.2014 / 13:41
3

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

    
por NGRhodes 09.05.2014 / 13:40