Até agora, o que posso concluir é que o fakeroot é usado para dar propriedade a um arquivo que precisa ser root quando é descompactado / tar'ed. Minha pergunta é: por que você não pode simplesmente fazer isso com o chown?
Porque você não pode simplesmente fazer isso com chown, pelo menos não como um usuário não root. (E se você estiver executando como root, não precisará fakeroot.) Esse é o objetivo fakeroot: permitir que os programas que esperam ser executados como root sejam executados como um usuário normal, enquanto fingem que as operações que exigem root são bem-sucedidas.
Isso é usado normalmente ao criar um pacote, para que o processo de instalação do pacote que está sendo instalado possa continuar sem erros (mesmo que seja executado chown root:root, ou install -o rootetc.). fakerootlembra-se da propriedade falsa que pretendia fornecer arquivos; portanto, as operações subsequentes que examinam a propriedade veem isso em vez do real; isso permite tarexecuções subsequentes, por exemplo, para armazenar arquivos pertencentes à raiz.
Como o fakeroot interrompe escalações indesejadas de privilégios no Linux? Se o fakeroot pode induzir o tar a criar um arquivo que pertence à raiz, por que não fazer algo semelhante ao SUID?
fakerootnão se engana tarao fazer nada, preserva as alterações que a compilação deseja fazer sem permitir que essas alterações tenham efeito no sistema que hospeda a compilação. Você não precisa fakerootproduzir um tarball contendo um arquivo pertencente a root e suid; se você possui um binário evilbinary, executando tar cf evil.tar --mode=4755 --owner=root --group=root evilbinary, como usuário comum, criará um tarball contendo evilbinary, de propriedade de root e suid. No entanto, você não poderá extrair esse tarball e preservar essas permissões, a menos que faça isso como root: não há escalação de privilégios aqui. fakerooté um privilégio de-escalation tool: permite executar uma compilação como um usuário comum, preservando os efeitos que a compilação teria se tivesse sido executada como raiz, permitindo que esses efeitos fossem reproduzidos posteriormente. Aplicar os efeitos "de verdade" sempre requer privilégios de root; fakerootnão fornece nenhum método para adquiri-los.
Para entender o uso de fakerootmais detalhes, considere que uma construção de distribuição típica envolve as seguintes operações (entre muitas outras):
- instalar arquivos pertencentes à raiz
- ...
- arquive esses arquivos, ainda de propriedade de raiz, para que, quando extraídos, sejam de propriedade de raiz
A primeira parte obviamente falha se você não é root. No entanto, quando executado fakerootcomo um usuário normal, o processo se torna
- instalar arquivos pertencentes ao root - isso falha, mas
fakerootfinge que é bem-sucedido e lembra a propriedade alterada
- ...
- arquivar esses arquivos, ainda de propriedade do root - quando
tar(ou qualquer outro arquivador que estiver sendo usado) perguntar ao sistema qual é a propriedade do arquivo, fakerootaltera a resposta para corresponder à propriedade registrada anteriormente
Assim, você pode executar uma compilação de pacotes sem ser root, enquanto obtém os mesmos resultados que obteria 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, portanto, um processo de instalação não autorizado não pode danificar seu sistema (além de tocar em seus arquivos).
No Debian, as ferramentas de construção foram aprimoradas para não exigir mais isso, e você pode construir pacotes semfakeroot . Isso é suportado dpkgdiretamente pela Rules-Requires-Rootdiretiva (consulte rootless-builds.txt).
Para entender a finalidade fakeroote os aspectos de segurança da execução como raiz ou não, pode ajudar a considerar a finalidade do empacotamento. Ao instalar um software da fonte, para uso em todo o sistema, proceda da seguinte maneira:
- construir o software (que pode ser feito sem privilégios)
- instale o software (que precisa ser feito como root ou, pelo menos, como um usuário autorizado a gravar nos locais apropriados do sistema)
Quando você empacota um software, está atrasando a segunda parte; mas para fazer isso com sucesso, você ainda precisa “instalar” o software no pacote e não no sistema. Portanto, quando você empacota o software, o processo se torna:
- construir o software (sem privilégios especiais)
- fingir instalar o software (novamente sem privilégios especiais)
- capturar a instalação do software como um pacote (idem)
- disponibilizar o pacote (idem)
Agora, um usuário conclui o processo instalando o pacote, que precisa ser feito como root (ou novamente, um usuário com os privilégios apropriados para gravar nos locais apropriados). É aqui que o processo privilegiado atrasado é realizado e é a única parte do processo que precisa de privilégios especiais.
fakeroot ajuda nas etapas 2 e 3 acima, permitindo executar processos de instalação de software e capturar seu comportamento, sem executar como root.