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:
- Crie alguns arquivos, mova-os, altere sua propriedade e modos, etc.
- 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