Qual é a necessidade do comando 'fakeroot' no linux

85

Por que precisamos do comando fakeroot ? Não podemos simplesmente usar os comandos sudo ou su ?

A página man diz:

fakeroot - run a command in an environment faking root privileges for file manipulation

About.com diz:

Gives a fake root environment. This package is intended to enable something like: dpkg-buildpackage -rfakeroot i.e. to remove the need to become root for a package build. This is done by setting LD_PRELOAD to libfakeroot.so, which provides wrappers around getuid, chown, chmod, mknod, stat, ..., thereby creating a fake root environment. If you don't understand any of this, you do not need fakeroot!

A minha pergunta é, que propósito especial resolve que um simples su ou sudo não? Por exemplo, para reempacotamento de todos os pacotes instalados no Ubuntu nós damos o seguinte comando:

$ fakeroot -u dpkg-repack 'dpkg --get-selections | grep install | cut -f1'

Podemos fazer o comando acima com sudo ou su em vez de fakeroot assim:

$ sudo dpkg-repack 'dpkg --get-selections | grep install | cut -f1'

EDITAR:

Em exibição:

$ sudo dpkg-repack 'dpkg --get-selections | grep install | cut -f1'

me dá este erro:

control directory has bad permissions 700 (must be >=0755 and <=0775)

Qualquer motivo?

    
por gkt 24.02.2011 / 13:47

8 respostas

59

Imagine que você é um mantenedor do desenvolvedor / pacote, etc. trabalhando em um servidor remoto. Você quer atualizar o conteúdo de um pacote e reconstruí-lo, baixar e personalizar um kernel do kernel.org e compilá-lo, etc. Ao tentar fazer essas coisas, você descobrirá que algumas etapas requerem que você tenha root direitos ( UID e GID 0) por motivos diferentes (segurança, permissões ignoradas, etc). Mas não é possível obter root direitos, já que você está trabalhando em uma máquina remota (e muitos outros usuários têm o mesmo problema que você). Isto é exatamente o que o fakeroot faz: ele finge um efetivo UID e GID de 0 para o ambiente que os requer.

Na prática, você nunca obtém privilégios root reais (ao contrário de su e sudo que você mencionou).

    
por 20.03.2011 / 12:56
48

Para ver claramente a diferença entre fakeroot e um sudo / su real, faça:

$ fakeroot
# echo "Wow I have root access" > root.tst
# ls -l root.tst
-rw-rw-r-- 1 root root   23 Oct 25 12:13 root.tst
# ls -l /root
ls: cannot open directory /root: Permission denied
# exit
$ ls -l root.tst
-rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst

Contanto que você esteja dentro do shell fakeroot, parece que você é root - contanto que você não tente fazer nada que realmente precise de privilégios de root. E é exatamente isso que uma ferramenta de embalagem precisa para fazer pacotes que façam sentido em qualquer máquina.

Na verdade, quando você usa o fakeroot para empacotamento, o que você deseja alcançar é fazer com que as ferramentas executadas no fakeroot ver seus arquivos como de propriedade do root. Nada mais nada menos. Então, na verdade, o su ou o sudo não funcionará para obter a propriedade correta do arquivo.

    
por 25.10.2012 / 12:16
38

Como as respostas são difíceis de entender (para mim mesmo) e foi preciso pensar um pouco para compreendê-lo ( este comentário me fez entender isso, eu vou dar uma explicação esperançosamente melhor.

1. O que acontece em fakeroot

Nada mais do que o que acontece com seu próprio usuário. Absolutamente nada mais. Se vocêfakeroot% (que quando chamado lhe dá um novo shell, como sudo faria), fingir fazer coisas que você precisava de permissão e sair, absolutamente nada aconteceria.

Se você pensar sobre isso, é uma total perda de tempo. Por que você faria coisas que realmente não aconteceriam? É insano. Você poderia simplesmente não ter feito nada e não haveria diferença, já que não há nenhum vestígio disso.

Espere um minuto ...

2. O traço de fakeroot

poderia ser um traço à esquerda de fakeroot . Vamos dar uma olhada nos comandos da resposta do MortenSickel , que é muito legal e merece um upvote:

$ fakeroot
# echo "Wow I have root access" > root.tst
# ls -l root.tst
-rw-rw-r-- 1 root root   23 Oct 25 12:13 root.tst
# ls -l /root
ls: cannot open directory /root: Permission denied
# exit
$ ls -l root.tst
-rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst

À primeira vista, parece que ter usado fakeroot foi uma perda total de tempo. No final, se você não tivesse usado fakeroot , você teria a mesma coisa.

A coisa sutil aqui é esta:

$ cat root.tst
Wow I have root access

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:

$ fakeroot
# touch x
# touch y
# chown myuser:myuser x
# ls -l > listing
# exit
$ ls -l
total 4
-rw-rw-r-- 1 myuser myuser 152 Jan  7 21:39 listing
-rw-rw-r-- 1 myuser myuser   0 Jan  7 21:39 x
-rw-rw-r-- 1 myuser myuser   0 Jan  7 21:39 y
$ cat listing
total 0
-rw-rw-r-- 1 root   root   0 Jan  7 21:39 listing
-rw-rw-r-- 1 myuser myuser 0 Jan  7 21:39 x
-rw-rw-r-- 1 root   root   0 Jan  7 21:39 y

Vamos ver o que aconteceu. Eu fingi ser root , o que é totalmente ineficaz, e criei x e y . Fingi que x pertencesse a myuser e y pertencesse a root . Eles realmente pertencem a myuser (como podemos ver no final), mas eu apenas fingi que seja assim.

Depois, criei uma listagem e guardei minha imaginação em um arquivo. Mais tarde, quando olho para o arquivo, posso ver quem imaginei que os arquivos deviam ser de propriedade. Novamente, eles não são realmente de propriedade de pessoas que eu imaginei, eu simplesmente imaginei isso.

3. Então ... Por que você quer isso de novo?

Você pode dizer que eu realmente não precisei fingir ser root para criar essa listagem. Eu poderia simplesmente ter criado a listagem e depois editado para refletir minha imaginação. Você está certo, você não precisou de fakeroot para isso. De fato, sabendo que fakeroot não faz nada, você não pode ter ganho nenhuma habilidade que você não tinha antes.

Mas , e é isso que é o fakeroot , editar a listagem pode ser não trivial. Como é com um pacote que pode ser instalado em seu sistema, você tem um tar ed, gzip ed, xz ed, bzip2 ed ou qualquer outro formato que esteja mantendo seus arquivos juntos e lembrando suas permissões e proprietários. Você pode modificar facilmente o arquivo compactado e editar a propriedade de um arquivo? Eu não sei sobre você, mas não consigo pensar em um jeito.

Poderia haver uma ferramenta construída que, depois que tudo estiver compactado, modifique o arquivo compactado e edite programaticamente as propriedades e permissões? Sim, poderia. Então você pode falsificar as propriedades antes de comprimir ou alterá-las depois. As pessoas do Debian decidiram que a primeira é mais fácil.

4. Por que não usar apenas sudo ?

Primeiro de tudo, você não precisa de privilégios de root para construir software e não precisa de privilégios de root para compactá-los. Então, se você não precisa, você precisa realmente ser um usuário do Windows para pensar em obter essa permissão. Mas sarcasmo de lado, 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 você sudo , na verdade, altere o proprietário do arquivo e as permissões para root , saia do shell de root e tente empacotar tudo. Você falha porque agora não pode mais ler o arquivo, pois não tem acesso root. Então você tem que sudo e comprimir e construir o pacote como root. Efetivamente, você tem que fazer tudo como root.

Isso é Bad TM .

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 que o fakeroot faz é tornar isso possível. Ele permite que o empacotador liste A como propriedade de root para o arquivador, para que, quando o pacote for descompactado pelo usuário, o arquivador exija permissão raiz e crie A como propriedade de root.

    
por 07.01.2015 / 22:05
29

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 de root. Sem o fakeroot, seria necessário ter privilégios de root para criar os arquivos constituintes dos arquivos com as permissões e propriedade corretas e, em seguida, 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 aquelas que simulam o efeito que as funções reais da biblioteca teriam tido, se o usuário fosse realmente root.

Sinopse:

 fakeroot [-l|--lib library] [--faked faked-binary] [--] [command]  

Veja mais aqui: fakeroot

    
por 24.02.2011 / 13:58
9

Eu usei isso para scripts de criação de pacotes. Eu não tinha certeza se a pessoa que estava executando o script tinha acesso ao nível de raiz, mas o script ainda precisava gerar, digamos, um arquivo tar contendo arquivos que pertencem ao root. A maneira mais simples de fazer isso foi executar o script de criação de pacote sob fakeroot, que enganou 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 para a máquina de destino (em uma máquina diferente), os arquivos não pertenciam a usuários estranhos ou inexistentes.

Pensando nisso, o único lugar que eu vi isso foi para construir algum tipo de arquivo: rootfs de sistemas embarcados, arquivos tar.gz, pacotes rpm, pacotes .deb, etc.

    
por 24.02.2011 / 13:58
2

Um uso comum é descobrir quais arquivos um binário com falha realmente queria acessar. Ou seja, descobrir e consertar ou solucionar erros causados por caminhos codificados e manipulação inadequada de exceções.

    
por 27.08.2012 / 11:34
0

Você pode usar o fakeroot sem ter privilégios de root. Se você tivesse su e / ou sudo , seria capaz de destruir seu sistema com um simples rm -rf / , mas com o fakeroot, no máximo, removeria seu diretório pessoal.

    
por 30.08.2013 / 00:34
0

A resposta simples:

su e sudo executam comandos como root. O fakeroot não, fora do arranjo parcial do sandbox.

    
por 06.03.2018 / 07:56

Tags