Depois de ler algumas respostas bem legais desta pergunta , ainda estou confuso sobre por que você gostaria de fingir que é root sem obter nenhum dos benefícios de realmente ser root.
Até agora, o que posso perceber é que fakeroot é usado para dar propriedade a um arquivo que precisa ser root quando é descompactado/tar'ed. Minha pergunta é por que você não pode fazer isso com chown?
Uma discussão do Google Groups aqui aponta que você precisa do fakeroot para compilar um kernel Debian (se você quiser fazer isso de um usuário sem privilégios). Meu comentário é que, a razão pela qual você precisa ser root para compilar é provavelmente porque as permissões de leitura não foram definidas para outros usuários. Se sim, não é uma violação de segurança que o fakeroot permita a compilação (o que significa que o gcc agora pode ler um arquivo que era para o root)?
Esta resposta aqui descreve que as chamadas reais do sistema são feitas com uid/gid real do usuário , então, novamente, onde o fakeroot ajuda?
Como o fakeroot interrompe os escalonamentos de privilégios indesejados no Linux? Se o fakeroot pode enganar o tar para criar um arquivo que pertence ao root, por que não fazer algo semelhante com o SUID?
Pelo que eu recolhi, fakeroot é útil apenas quando você deseja alterar o proprietário de qualquer arquivo de pacote que você criou para root. Mas você pode fazer isso com chown, então onde estou faltando no meu entendimento de como esse componente deve ser usado?
Porque você não pode fazer isso com
chown
, pelo menos não como um usuário não root. (E se você estiver executando como root, você não precisafakeroot
de .) Esse é o ponto principal defakeroot
: permitir que programas que esperam ser executados como root sejam executados como um usuário normal, enquanto finge que as operações que requerem root são bem-sucedidas.Isso é usado normalmente ao compilar um pacote, para que o processo de instalação do pacote que está sendo instalado possa prosseguir sem erros (mesmo que execute
chown root:root
, ouinstall -o root
, etc.).fakeroot
lembra a propriedade falsa que fingiu dar aos arquivos, então as operações subsequentes que analisam a propriedade veem isso em vez da real; isso permite que execuções subsequentestar
, por exemplo, armazenem arquivos como pertencentes ao root.fakeroot
não enganatar
para fazer nada, ele preserva as alterações que a compilação deseja fazer sem permitir que essas alterações entrem em vigor no sistema que hospeda a compilação. Você não precisafakeroot
produzir um tarball contendo um arquivo de propriedade de root e suid; se você tiver um binárioevilbinary
, executandotar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
, como um usuário comum, criará um tarball contendoevilbinary
, pertencente ao root e suid. No entanto, você não poderá extrair esse tarball e preservar essas permissões a menos que o faça como root: não há escalação de privilégios aqui.fakeroot
é um privilégio de-ferramenta de escalação: permite que você execute uma compilação como um usuário comum, preservando os efeitos que a compilação teria se tivesse sido executada como root, permitindo que esses efeitos fossem reproduzidos posteriormente. Aplicar os efeitos “de verdade” sempre requer privilégios de root;fakeroot
não fornece nenhum método de adquiri-los.Para entender o uso de
fakeroot
mais detalhadamente, considere que uma compilação de distribuição típica envolve as seguintes operações (entre muitas outras):A primeira parte obviamente falha se você não for root. No entanto, ao executar sob
fakeroot
, como um usuário normal, o processo se tornafakeroot
finge que foi bem-sucedido e lembra a propriedade alteradatar
(ou qualquer arquivador que estiver sendo usado) pergunta ao sistema qual é a propriedade do arquivo,fakeroot
altera a resposta para corresponder à propriedade registrada anteriormenteAssim, você pode executar uma compilação de pacote 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, então 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 compilação foram aprimoradas para não exigir mais isso, e você pode compilar pacotes sem
fakeroot
. Isso é suportadodpkg
diretamente com aRules-Requires-Root
diretiva (consulte Recursosrootless-builds.txt
).Para entender o propósito do
fakeroot
, e os aspectos de segurança da execução como root ou não, pode ser útil considerar o propósito do empacotamento. Ao instalar um software da fonte, para uso em todo o sistema, você procede da seguinte forma:Ao empacotar 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:
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-nos executar processos de instalação de software e capturar seu comportamento, sem executar como root.NÃO. O root falso permite que você execute ferramentas de manipulação de permissão e relatórios, ele relatará de forma consistente. No entanto, ele não concederá essas permissões. Vai parecer que você os tem (falsos). Não vai mudar nada fora do ambiente.
É útil, se você quiser criar uma estrutura de diretórios, que contenha propriedade e permissões, que não possam ser definidas pelo seu usuário, então você irá tar, zip ou outro pacote.
Ele realmente não eleva as permissões, é falso. Ele não permite que você faça nada (excluir, escrever, ler) que você não poderia fazer de outra forma. Você poderia produzir o pacote (em teoria) sem ele. Você pode obter um relatório falso (
ls
) sem ele.Não é uma falha de segurança, pois não permite acesso, ou qualquer coisa que você não possa fazer sem ela. Ele é executado sem privilégios. Tudo o que ela faz é interceptar chamadas para
chown
,chmod
, etc. Isso as torna uma não operação, exceto pelo fato de registrar o que teria acontecido. Ele também intercepta chamadas parastat
etc. para que reporte permissões e propriedade, de seu próprio banco de dados interno, como se os outros comandos tivessem sido executados. Isso é útil, porque se você compactar o diretório, ele terá as permissões falsas. Se você descompactar, como root, as permissões se tornarão reais.Quaisquer arquivos que não sejam legíveis/graváveis antes permanecerão não legíveis/graváveis. Quaisquer arquivos especiais (por exemplo, dispositivos) criados não terão poderes especiais. Qualquer set-uid (para outro usuário), os arquivos não serão set-uid. Qualquer outro escalonamento de privilégios não funcionará.
É um tipo de máquina virtual: Uma máquina virtual, em geral, pode simular qualquer ambiente/SO, mas não pode fazer nada ao host, que qualquer outro aplicativo não poderia fazer. Dentro da máquina virtual, você pode parecer fazer qualquer coisa. Você pode reinventar o sistema de segurança para ser igual ou diferente, porém tudo isso existirá no host, como recursos de propriedade do usuário/grupo do processo que executa o ambiente virtual.
Já existem duas respostas boas e muito detalhadas aqui, mas vou apenas apontar que o parágrafo introdutório da página de manual 1 original na verdade explica de forma bastante clara e concisa:
fakeroot
Fakeroot permite que um usuário não root crie arquivos contendo arquivos de propriedade root, o que é uma parte crítica da geração e distribuição de pacotes de software binários no Linux. Sem
fakeroot
, os arquivos de pacote teriam que ser gerados durante a execução como root real, para que eles contenham a propriedade e as permissões corretas do arquivo. Isso seria um risco de segurança. Construir e empacotar software potencialmente não confiável é uma grande exposição se feito com privilégios de root. Graças afakeroot
, um usuário sem privilégios com arquivos sem privilégios ainda pode gerar arquivos contendo arquivos com propriedade root. 2Mas não é um risco de segurança, porque nada no arquivo é realmente de propriedade do root até que os arquivos sejam EXTRAÍDOS . E mesmo assim, os arquivos só serão extraídos com suas permissões de root intactas se for feito por um usuário privilegiado. Essa etapa - onde um
fakeroot
arquivo assistido contendo arquivos "raiz" é extraído por um usuário privilegiado - é onde a raiz "falsa" finalmente se torna real. Até esse ponto, nenhum privilégio de root real é obtido ou ignorado.Notas
fakeroot
se estivessem instalados, incluindofakeroot-ng
epseudo
. Mas IMHO nem a página de manual do "imitador" é quase tão clara sobre ir direto ao ponto nesta questão. Fique com o original, um e únicofakeroot
OGOutras distribuições/sistemas de pacotes superam isso simplesmente não usando a propriedade do root em seus arquivos de pacotes. No Fedora, por exemplo, o software pode ser compilado, instalado e empacotado por um usuário sem privilégios sem exigir
fakeroot
. Tudo é feito dentro do$HOME/rpmbuild/
espaço do usuário e etapas normalmente privilegiadas comomake install
ser redirecionado (através de mecanismos como--prefix
eDESTDIR
) para uma$HOME/rpmbuild/BUILDROOT/
hierarquia que pode ser considerada uma espécie de espaço "fakechroot" (sem realmente usarfakechroot
).Mas mesmo durante
make install
, tudo é executado como e de propriedade do usuário sem privilégios. A propriedade e as permissões do arquivo extraído serão definidas comoroot,root
e0644
(ou0755
para executáveis) por padrão, a menos que sejam substituídas no arquivo de definição do pacote (.spec
), caso em que serão armazenados como metadados no pacote final. Como nenhuma permissão ou propriedade é realmente aplicada até o processo de instalação (privilegiado) do pacote rpm, nem root nemfakeroot
são necessários durante o empacotamento. Masfakeroot
é realmente apenas um caminho diferente para esse mesmo resultado.