Estou trabalhando como usuário e gostaria de criar um arquivo tar, que quando descompactado (por raiz) extrai seus arquivos com propriedade de root (caso contrário, o root precisaria alterar a propriedade manualmente para cada arquivo, após a extração dos arquivos ao seu destino).
Eu descobri o fakeroot
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 propriedade de root quando descompactados pela raiz?
do something with fakeroot ...
tar cfpJ foo.tar.xz foo/
files
permissions
tar
user1968963
fonte
fonte
tar --owner=root --group=root cfpJ files.tar.xz files/
dá errotar: You must specify one of the
-Acdtrux 'ou--test-label' options Try
tar --help' outar --usage' for more information.
-
sequência de opções curta antes de:tar --owner=root --group=root -cfpJ ...
Ou seja-cfpJ
, nãocfpJ
.tar --owner=root --group=root -cfpJ files.tar.xz files/
me dá outro erro:tar: files.tar.xz: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors
além disso, ele cria um arquivo chamadopJ
.f
final (porque faz mais sentido, intuitivamente) e baixo e eis que recebo o mesmo fracasso com-cfpJ
MAS-cpJf
trabalhos.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 ao programa que está sendo executado como root e que o sistema chama como
chown
bem-sucedido. Somente o programa acredita que essas chamadas foram bem-sucedidas, nada é refletido no sistema de arquivos (não pode ser, poisfakeroot
não possui 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 um trabalho útil do fakeroot executando um ambiente de fakeroot, onde acontece o seguinte:
Exemplo:
Você precisa usar uma única invocação de
fakeroot
, pois não há memória entre invocações.Namespaces do Linux
Apenas para completar, vou mencionar que, se você tiver um kernel Linux ≥3,8, os espaços para nome são outra maneira de criar um ambiente de fingimento raiz. O suporte à terra do usuário ainda não chegou, portanto não entrarei em mais detalhes.
Montar o arquivo
Uma maneira diferente de resolver seu problema é montar o arquivo morto como um diretório. Você pode usar o archivemount , que é capaz de modificar vários formatos de arquivo via libarchive , incluindo tar compactado.
fonte
archivemount
, mas ainda requer elevação de privilégios, e mesmo se o usuário estiver em um grupo confiável que tem permissão para montar e desmontar, o processo falhachown
, portanto, algum tipo de ferramenta de terceiros, comofakeroot
espaços de nome, precisa ser usado , também.