Depois de ler algumas respostas bastante legais dessa pergunta , ainda estou confuso sobre o motivo pelo qual você deseja fingir que é root sem obter nenhum dos benefícios de realmente ser root.
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?
Uma discussão nos Grupos do Google aqui indica que você precisa do fakeroot para compilar um kernel do Debian (se você quiser fazê-lo por um usuário sem privilégios). Meu comentário é que, o motivo pelo qual você precisa ser root para compilar é provavelmente porque as permissões de leitura não foram definidas para outros usuários. Em caso afirmativo, não é uma violação de segurança que o fakeroot permite a compilação (o que significa que o gcc agora pode ler um arquivo que era raiz)?
Esta resposta aqui descreve que as chamadas reais do sistema são feitas com o uid / gid real do usuário . Então, novamente, onde o fakeroot ajuda?
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?
Pelo que eu coletei, o fakeroot é útil apenas quando você deseja alterar o proprietário de qualquer arquivo de pacote criado para raiz. Mas você pode fazer isso com o chown, então , onde me falta a compreensão de como esse componente deve ser usado?
Respostas:
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 objetivofakeroot
: 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
, ouinstall -o root
etc.).fakeroot
lembra-se da propriedade falsa que pretendia fornecer arquivos; portanto, as operações subsequentes que examinam a propriedade veem isso em vez do real; isso permitetar
execuções subsequentes, por exemplo, para armazenar arquivos pertencentes à raiz.fakeroot
não se enganatar
ao 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 precisafakeroot
produzir um tarball contendo um arquivo pertencente a root e suid; se você possui um binárioevilbinary
, executandotar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
, como usuário comum, criará um tarball contendoevilbinary
, 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;fakeroot
não fornece nenhum método para adquiri-los.Para entender o uso de
fakeroot
mais detalhes, considere que uma construção de distribuição típica envolve as seguintes operações (entre muitas outras):A primeira parte obviamente falha se você não é root. No entanto, quando executado
fakeroot
como um usuário normal, o processo se tornafakeroot
finge que é bem-sucedido e lembra a propriedade alteradatar
(ou qualquer outro arquivador que estiver sendo usado) perguntar ao sistema qual é a propriedade do arquivo,fakeroot
altera a resposta para corresponder à propriedade registrada anteriormenteAssim, 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 sem
fakeroot
. Isso é suportadodpkg
diretamente pelaRules-Requires-Root
diretiva (consulterootless-builds.txt
).Para entender a finalidade
fakeroot
e 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: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:
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.fonte
tar --mode --owner
para cada arquivo adicionado ao arquivo (e também funciona com outros programas). Os problemas em potencial surgem se / quando você descompacta um arquivo tar ou arquivo morto não confiável como raiz, e não quando o cria.NÃO. A raiz falsa permite que você execute ferramentas de manipulação de permissões e relatórios, que serão relatadas de forma consistente. No entanto, ele realmente não concederá essas permissões. Apenas parecerá que você os possui (falso). Não mudará nada fora do ambiente.
É útil, se você deseja criar uma estrutura de diretórios que contenha propriedade e permissões, que não podem ser definidas pelo usuário, que você irá tar, zip ou outro pacote.
Ele não realmente elevar as permissões, é falso. Não permite que você faça nada (excluir, gravar, 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, porque não permite o acesso ou qualquer coisa que você não possa fazer sem ele. É executado sem privilégios. Tudo o que é dose é interceptar as chamadas para
chown
,chmod
etc. Isso as torna inoperantes, exceto que registra o que teria acontecido. Ele também intercepta chamadas parastat
etc. para relatar 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á 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 arquivo set-uid (para outro usuário) não será configurado. Qualquer outra escalação de privilégios não funcionará.
É um tipo de máquina virtual: uma máquina virtual, em geral, pode simular qualquer ambiente / sistema operacional, mas não pode fazer nada para o host, o 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 o mesmo ou diferente. No entanto, tudo isso existirá no host, como recursos pertencentes ao usuário / grupo do processo que está executando o ambiente virtual.
fonte
Já existem duas respostas boas e muito detalhadas aqui, mas vou apenas salientar que o parágrafo introdutório da página de manual original 1 na verdade explica de maneira bem clara e concisa:
fakeroot
O Fakeroot permite que um usuário não root crie arquivos que contenham arquivos de propriedade raiz, o que é uma parte crítica da geração e distribuição de pacotes de software binários no Linux. Sem isso
fakeroot
, os arquivos do pacote precisariam ser gerados durante a execução como raiz real, para que eles contenham a propriedade e as permissões corretas. Isso seria um risco de segurança. Construir e empacotar software potencialmente não confiável é uma enorme exposição se feito com privs raiz. Graças afakeroot
, um usuário sem privilégios com arquivos sem privilégios ainda pode gerar arquivos contendo arquivos com propriedade de root. 2Mas não é um risco de segurança, porque nada no arquivo é realmente de propriedade da raiz até que os arquivos são EXTRAÍDO . E mesmo assim, os arquivos serão extraídos apenas com suas permissões de root intactas se forem feitos por um usuário privilegiado. Essa etapa - onde um
fakeroot
arquivo assistido que contém arquivos "raiz" é extraído por um usuário privilegiado - é onde a raiz "falsa" finalmente se torna real. Até esse ponto, nenhum privilégio root real é obtido ou ignorado.Notas
fakeroot
se instalados, incluindofakeroot-ng
epseudo
. Mas a IMHO, nem a página de manual do "imitador" é tão clara quanto a ir direto ao ponto nesta questão. Fique com o original, o únicofakeroot
OGOutras distribuições / sistemas de empacotamento superam isso simplesmente não usando a propriedade de 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 necessidade
fakeroot
. Tudo é feito no$HOME/rpmbuild/
espaço do usuário e etapas normalmente privilegiadas, comomake install
redirecionadas (por meio 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 pertencente ao 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.spec
arquivo de definição de pacote ( ), caso em que são armazenadas como metadados no pacote final. Como nenhuma permissão ou propriedade é realmente aplicada até o processo de instalação (privilegiado) do pacote rpm, nem o root nem ofakeroot
necessário durante o empacotamento. Masfakeroot
é realmente apenas um caminho diferente para o mesmo resultado.fonte
fakeroot-ng
afirma- se substituirfakeroot
, mas na prática ela não a substituiu, e o AFAIKfakeroot
ainda é a ferramenta usada no Debian por padrão (quando necessário).fakeroot
manual, e o Google me largou na casafakeroot-ng
de (disfarçado defakeroot(1)
), e acho que fiquei com excesso de presunção. Mas agora vejo que o fakeroot-ng não é atualizado desde 2014 , enquanto o fakeroot ainda está ativo . Aparentemente, também há pseudo que fez isso há alguns anos, mas agora parou. Vou ajustar minha resposta de acordo.fakeroot
manual no site do Debian leva àfakeroot-ng
versão do padrão por padrão. Confira o último parágrafo dofakeroot-ng
para uma torção divertida ;-).