modifica a propriedade do arquivo para arquivos dentro do arquivo tar

9

Estou trabalhando como usuário e gostaria de criar um arquivo tar, que quando descompactado (por raiz) extrai seus arquivos com propriedade root (caso contrário, o root teria que alterar a propriedade manualmente para cada arquivo, após os arquivos foram extraídos para o seu destino).

Encontrei fakeroot , o que parece fazer exatamente isso. Mas não consigo encontrar a sintaxe que preciso usar para criar meu arquivo.

Como posso criar um arquivo tar.xz, para que os arquivos tenham a propriedade root quando descompactados pelo root?

do something with fakeroot ...
tar cfpJ foo.tar.xz foo/
    
por user1968963 18.04.2014 / 19:25

2 respostas

9

How can I create a tar.xz archive, so that the files have root ownership when unpacked by root?

Isso é com a raiz que descompacta:

tar --no-same-owner -xf ...

Se você quiser fazer com que todos criem raízes, você pode usar

tar --owner=root --group=root -cf ...
    
por 18.04.2014 / 20:19
8

Fakeroot

O utilitário fakeroot ou o utilitário mais recente fakeroot-ng (mesma finalidade, técnica de implementação diferente) executa um programa e finge que o programa está sendo executado como root e que o sistema chama como chown com êxito. Somente o programa acredita que essas chamadas foram bem-sucedidas. Na verdade, nada está refletido no sistema de arquivos (não é possível, pois fakeroot não tem privilégios extras). No entanto, se o programa alterar a propriedade de um arquivo e, em seguida, executar alguma ação com base na propriedade desse arquivo, isso poderá alterar o comportamento do programa.

Uma maneira típica de obter trabalho útil a partir do fakeroot, executando um ambiente de fakeroot, onde acontece o seguinte:

  1. Crie alguns arquivos, mova-os, altere sua propriedade e modos, etc.
  2. Crie um arquivo desses arquivos.

Exemplo:

fakeroot sh -c '
    chown root:root usr/bin/foo
    tar cf foo.tar usr
'

Você precisa usar uma única invocação de fakeroot , já que não há memória entre invocações.

Espaços de nomes do Linux

Apenas para completar, eu mencionarei que se você tiver um kernel Linux ≥3.8, os namespaces são outra maneira de crie um ambiente de raiz fingida. O suporte para a userland ainda não está completo, então não vou entrar em mais detalhes.

Monte o arquivo

Uma maneira diferente de resolver seu problema é montar o arquivo como um diretório. Você pode usar archivemount , que é capaz de modificar vários formatos de arquivo via libarchive , incluindo tar comprimido.

mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt
    
por 19.04.2014 / 02:28