So far, what I can gather is that fakeroot is used to give ownership to a file that needs to be root when it is unzip/tar'ed. My question, is why can't you just do that with chown?
Porque você não pode fazer isso com chown
, pelo menos não como usuário não raiz. (E se você está rodando como root, você não precisa de fakeroot
.) Esse é o objetivo de fakeroot
: permitir que programas que esperam ser executados como root sejam executados como um usuário normal, enquanto fingem que o operações que exigem raiz têm sucesso.
Isso é usado normalmente ao criar um pacote, para que o processo de instalação do pacote sendo instalado possa continuar sem erros (mesmo se for executado chown root:root
ou install -o root
, etc.). fakeroot
lembra-se da propriedade falsa que pretendia dar aos arquivos, de modo que as operações subsequentes que analisam a propriedade veem isso em vez do real; isso permite que as correções tar
subseqüentes, por exemplo, armazenem arquivos de propriedade de root.
How does fakeroot stop unwanted privilege escalations on Linux? If fakeroot can trick tar into making a file that was owned by root, why not do something similar with SUID?
fakeroot
não engana tar
ao fazer nada, preserva as alterações que a compilação deseja realizar sem permitir que essas alterações entrem em vigor no sistema que hospeda a compilação. Você não precisa de fakeroot
para produzir um tarball contendo um arquivo de propriedade de root e suid; se você tiver um binário evilbinary
, executando tar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
, como um usuário comum, criará um tarball contendo evilbinary
, de propriedade root e suid. No entanto, você não poderá extrair esse tarball e preservar essas permissões, a menos que você faça isso como root: não há escalonamento de privilégios aqui. fakeroot
é uma ferramenta de privilégio de -escala: permite executar uma compilação como um usuário comum, preservando os efeitos que a compilação teria se fosse executada como raiz, permitindo esses efeitos para ser repetido mais tarde. Aplicar os efeitos “de verdade” sempre requer privilégios de root; fakeroot
não fornece nenhum método para adquiri-los.
Para entender o uso de fakeroot
em mais detalhes, considere que uma distribuição de distribuição típica envolve as seguintes operações (entre muitas outras):
- instalar arquivos, de propriedade do root
- ...
- arquiva esses arquivos, que ainda são de propriedade do root, para que, quando forem extraídos, eles sejam de propriedade do root
A primeira parte obviamente falha se você não for root. No entanto, quando executado sob fakeroot
, como usuário normal, o processo se torna
- instalar arquivos de propriedade do root - isso falha, mas
fakeroot
finge que é bem-sucedido, e lembra a propriedade alterada - ...
- arquiva esses arquivos, que ainda são de propriedade do root - quando
tar
(ou qualquer arquivador está sendo usado) pergunta ao sistema qual é a propriedade do arquivo,fakeroot
altera a resposta para corresponder à propriedade registrada anteriormente
Assim, você pode executar uma compilação de pacote sem ser root e obter os mesmos resultados obtidos se estivesse realmente executando como root. Usar fakeroot
é mais seguro: o sistema ainda não pode fazer nada que seu usuário não possa fazer, por isso, um processo de instalação desonesto não pode danificar seu sistema (além de tocar em seus arquivos).
No Debian, as ferramentas de compilação foram melhoradas para não exigir mais isso, e você pode compila pacotes sem fakeroot
. Isso é suportado por dpkg
diretamente com a diretiva Rules-Requires-Root
(consulte rootless-builds.txt
).
Para entender o objetivo de fakeroot
e os aspectos de segurança da execução como raiz ou não, isso pode ajudar a considerar o propósito do empacotamento. Quando você instala um software a partir do código-fonte, para uso em todo o sistema, você procede da seguinte forma:
- construa o software (o que pode ser feito sem privilégios)
- instala o software (que precisa ser feito como raiz ou, pelo menos, como um usuário pode gravar nos locais apropriados do sistema)
Quando você compacta um software, você está atrasando a segunda parte; mas para fazer isso com sucesso, você ainda precisa “instalar” o software, no pacote e não no sistema. Então, quando você empacota software, o processo se torna:
- construa o software (sem privilégios especiais)
- pretende instalar o software (novamente sem privilégios especiais)
- capture a instalação do software como um pacote (idem)
- disponibiliza o pacote (idem)
Agora, um usuário conclui o processo instalando o pacote, que precisa ser feito como raiz (ou novamente, um usuário com os privilégios apropriados para gravar nos locais apropriados). É aqui que o processo com privilégios atrasados é realizado e é a única parte do processo que precisa de privilégios especiais.
fakeroot
ajuda nas etapas 2 e 3 acima, permitindo que executemos processos de instalação de software e capturemos seu comportamento, sem executar como root.