Por que precisamos de fakeroot
comando? Não podemos simplesmente usar os comandos sudo
ou su
?
A página do manual diz:
fakeroot - executa um comando em um ambiente, falsificando privilégios de root para manipulação de arquivos
About.com diz:
Dá um ambiente raiz falso. Este pacote visa habilitar algo como:
dpkg-buildpackage -rfakeroot
ou seja, remover a necessidade de se tornar root para uma compilação de pacotes. Isto é feito através da criaçãoLD_PRELOAD
delibfakeroot.so
, que fornece invólucros em tornogetuid
,chown
,chmod
,mknod
,stat
, ..., criando assim um ambiente de raiz falso. Se você não entende nada disso, não precisafakeroot
!
Minha pergunta é: que finalidade especial resolve isso de maneira simples su
ou sudo
não? Por exemplo, para reembalar todos os pacotes instalados no ubuntu, damos o seguinte comando:
$ fakeroot -u dpkg-repack `dpkg --get-selections | grep install | cut -f1`
Podemos executar o comando acima com sudo ou su em vez de fakeroot desta maneira:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
EDITAR:
Corrida:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
me dá este erro:
o diretório de controle tem permissões incorretas 700 (deve ser> = 0755 e <= 0775)
Alguma razão para isso?
sudo
ousu
porque é sua máquina.fakeroot
tem dois usos 1) engana os programas a acreditar que você é realmente usuário root, o que algum software proprietário mal escrito pode exigir, mesmo que não seja necessário (geralmente o desenvolvedor do Windows usa o Linux) e 2) permite emular o modo de arquivo e as alterações de propriedade que você não faria ' caso contrário, será capaz de fazer, principalmente para criar umtar
arquivo com permissões e propriedade corretas, útil, por exemplo, ao empacotar software.fakeroot
! Se você não consegue pensar em uma situação em quefakeroot
é útil, literalmente não precisa dela. Mas as pessoas que realmente precisam dele compreendem completamente o caso de uso.Respostas:
Imagine que você é um desenvolvedor / mantenedor de pacotes, etc., trabalhando em um servidor remoto. Você deseja atualizar o conteúdo de um pacote e reconstruí-lo, fazer o download e personalizar um kernel do kernel.org e compilá-lo etc. Ao tentar fazer essas coisas, você descobrirá que algumas etapas requerem
root
direitos (UID
eGID
0) por diferentes razões (segurança, permissões ignoradas, etc.). Mas não é possível obterroot
direitos, pois você está trabalhando em uma máquina remota (e muitos outros usuários têm o mesmo problema que você). É exatamentefakeroot
isso: finge um efetivoUID
eGID
0 para o ambiente que os requer.Na prática, você nunca obtém
root
privilégios reais (ao contráriosu
esudo
mencionados).fonte
fakeroot
para alterar as configurações do sistema? Porque o comando que executaremos achará que está executando como root e fará o que quisermos. não é?Para ver claramente a diferença entre fakeroot e um verdadeiro sudo / su, basta:
Enquanto você estiver no shell fakeroot, parece que você é root - desde que você não tente fazer nada que realmente precise de privilégios de root. E é exatamente isso que uma ferramenta de empacotamento precisa para criar pacotes que farão sentido em qualquer máquina.
De fato, quando você usa o fakeroot para empacotamento, o que você deseja alcançar é tornar as ferramentas executadas no fakeroot para ver seus arquivos pertencentes ao root. Nada mais nada menos. Portanto, su ou sudo não funcionará para obter a propriedade correta do arquivo.
fonte
.deb
arquivo, todos os meus/usr
arquivos pertencem a quem o chamoufakeroot
?fakeroot
shell, eles parecem ser . Quando o pacote .deb é criado dentro desse shell, o proprietário do arquivo é lido no sistema de arquivos (quefakeroot
intercepta e retornaroot
) e armazenado no pacote. Ao instalar o pacote, o dpkg requer acesso root porque o pacote indica que o arquivo deve pertencer à raiz.Como as respostas são difíceis de entender (para mim) e foram necessárias algumas considerações para entender ( esse comentário me fez entender), vou dar uma explicação esperançosamente melhor.
1. O que acontece no fakeroot
Nada além do que acontece com seu próprio usuário. Absolutamente nada mais. Se você
fakeroot
(que quando chamado lhe der um novo shell, comosudo
faria), fingir fazer coisas pelas quais você precisava de permissão e sair, absolutamente nada aconteceria.Se você pensar bem, é uma total perda de tempo. Por que você faria coisas que realmente não vão acontecer? É insano. Você poderia simplesmente não ter feito nada disso e não haveria diferença, pois não há vestígios.
Espere um minuto...
2. O traço de fakeroot
Não poderia ser um traço deixado de
fakeroot
. Vejamos os comandos na resposta de MortenSickel, que são bastante agradáveis e merecem uma votação:À primeira vista, parece que o uso
fakeroot
foi uma total perda de tempo. No final, se você não tivesse usadofakeroot
, teria a mesma coisa.A coisa sutil aqui é esta:
O que significa que o conteúdo do arquivo ainda se lembra de ser uma raiz. Você pode dizer que não usar
fakeroot
teria produzido os mesmos resultados. Você está certo, este exemplo é muito simples.Vamos dar outro exemplo:
Vamos ver o que aconteceu. Eu fingi ser
root
, o que é totalmente ineficaz, e crieix
ey
. Eu fingix
pertencermyuser
ey
pertencer aroot
. Eles realmente pertencem amyuser
(como podemos ver no final), mas eu apenas fingi que era assim.Então eu criei uma lista e salvei minha imaginação em um arquivo. Mais tarde, quando olho para o arquivo, vejo quem imaginei que os arquivos deveriam pertencer. Novamente, eles não são de propriedade de pessoas que imaginei, simplesmente imaginei isso.
3. Então ... Por que você quer isso de novo?
Você pode dizer que eu realmente não precisava fingir ser root para criar essa listagem. Eu poderia simplesmente criar a listagem e editá-la para refletir minha imaginação. Você está certo, você não precisava
fakeroot
disso. De fato, sabendo quefakeroot
realmente não faz nada, você não pode ter adquirido nenhuma habilidade que não possuía antes.Mas , e é disso que
fakeroot
se trata, editar a listagem pode não ser trivial. Como acontece com um pacote que pode ser instalado no seu sistema, você tem umtar
ed,gzip
ed,xz
ed,bzip2
ed ou qualquer outro formato que mantenha seus arquivos juntos e lembre-se de suas permissões e proprietários. Você pode modificar facilmente o arquivo compactado e editar a propriedade de um arquivo? Não sei você, mas não consigo pensar em uma maneira.Poderia haver uma ferramenta criada que, depois que tudo é compactado, modifica o arquivo compactado e edita programaticamente as propriedades e permissões? Sim, poderia. Portanto, você pode falsificar as propriedades antes da compactação ou alterá-las depois. O pessoal do Debian decidiu que o primeiro é mais fácil.
4. Por que não usar
sudo
?Primeiro de tudo, você não precisa de privilégios de root para criar software e não precisa de privilégios de root para compactá-los. Portanto, se você não precisar, seria realmente um usuário do Windows para conseguir obter essa permissão. Mas sarcasmo à parte, você pode até não ter senha de root.
Além disso, digamos que você tenha permissões de root. E digamos que você queira fingir que um arquivo deve ter acesso de leitura apenas à raiz. Então
sudo
, você realmente muda o proprietário e as permissões do arquivo pararoot
, sai do shell raiz e tenta empacotar tudo. Você falhou porque agora não pode mais ler o arquivo, pois não possui acesso root. Então você precisasudo
compactar e compilar o pacote como root. Efetivamente, você precisa fazer tudo como raiz.Esta é a TM ruim .
Como empacotador, você não precisa de permissões de root e não deve obtê-lo. Quando você instala um pacote, pode ser necessário instalar algum arquivo (
A
) como root e é aí que você precisa de permissões de root. Tudo o quefakeroot
faz é tornar isso possível. Ele permite que o empacotador listeA
como pertencente à raiz do arquivador, de modo que, quando o pacote é descompactado pelo usuário, o arquivador exige permissão de raiz e criaA
como pertencente à raiz.fonte
So either you could fake the ownerships before compressing, or change them after. Debian people decided the former is easier.
Isso me ajudou enquanto eu pensava 'por que não modificá-lo depois?'.AFAIK, fakeroot executa um comando em um ambiente em que parece ter privilégios de root para manipulação de arquivos. Isso é útil para permitir que os usuários criem arquivos (tar, ar, .deb etc.) com arquivos neles com permissões / propriedade raiz. Sem o fakeroot, seria necessário ter privilégios de root para criar os arquivos constituintes dos arquivos com as permissões e a propriedade corretas e depois empacotá-los, ou seria necessário construir os arquivos diretamente, sem usar o arquivador.
O fakeroot funciona substituindo as funções da biblioteca de manipulação de arquivos (chmod (), stat () etc.) por outras que simulam o efeito que as funções reais da biblioteca teriam, se o usuário realmente fosse root.
Sinopse:
Confira mais aqui: fakeroot
fonte
the program running in it thinks it has root privileges
e o programa ter privilégios de root? Se eu puder fazer umrm -rf /
eo programa, executá-lo pensa que eu tenho privilégios de root ...rm
a verificação de que possui permissões suficientes, mas o próprio kernel não o deixou; aunlink
chamada do sistema falharia. Não cabe apenas ao aplicativo manipular permissões, ou você poderá escrever seu próprio aplicativo que não verifica as permissões e faz o que quiser com eleEu o usei para scripts de criação de pacotes. Eu não tinha certeza de que a pessoa que executava o script tem acesso no nível da raiz, mas o script ainda precisava gerar, digamos, um arquivo tar que continha arquivos que pertencem à raiz. A maneira mais simples de fazer isso era executar o script de criação de pacotes no fakeroot, o que levou o arquivador a acreditar que os arquivos pertencem ao root e os empacotou como tal dentro do arquivo. Dessa forma, quando o pacote foi descompactado na máquina de destino (em uma máquina completamente diferente), os arquivos não pertenciam a usuários estranhos ou inexistentes.
Pensando nisso, o único lugar que vi foi para a criação de algum tipo de arquivo: rootfs de sistemas embarcados, arquivos tar.gz, pacotes rpm, pacotes .deb, etc.
fonte
fakeroot
é uma ferramenta de solução alternativa para o software de empacotamento com erros: não há motivo para você ser root para criar esses pacotes, mas como eles não permitem que você especifique permissões de arquivo de nenhuma outra maneira além de configurá-las diretamente no sistema de arquivos anteriormente, você não tem escolhaUm uso comum é descobrir quais arquivos um binário com falha realmente queria acessar. Ou seja, descobrir e corrigir ou solucionar problemas causados por caminhos codificados e tratamento inadequado de exceções.
fonte
Você pode usar o fakeroot sem ter privilégios de root. Se você tivesse
su
e / ousudo
seria capaz de destruir seu sistema com um simplesrm -rf /
, mas com o fakeroot no máximo, você removeria seu diretório pessoal.fonte
fakeroot
. Você pode remover seu diretório pessoal como você mesmo.A resposta simples:
su e sudo executam comandos como root. fakeroot não, fora do seu arranjo parcial de sandbox.
fonte