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, pois fakeroot
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:
- Crie alguns arquivos, mova-os, altere sua propriedade e modos, etc.
- Crie um arquivo morto 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
, 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.
mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt
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.