Por que precisamos do comando fakeroot
? Não podemos simplesmente usar os comandos sudo
ou su
?
A página do manual diz:
fakeroot – executa um comando em um ambiente simulando privilégios de root para manipulação de arquivo
About.com diz:
Dá uma raiz falsa Este pacote destina-se a permitir algo como:
dpkg-buildpackage -rfakeroot
ou seja, remover a necessidade de se tornar root para uma construção de pacote. Isso é feito configurandoLD_PRELOAD
paralibfakeroot.so
, que fornece wrappers paragetuid
,chown
,chmod
,mknod
,stat
, …, criando assim um ambiente de raiz falso. Se você não “não entendo nada disso, você não precisa defakeroot
!
Minha pergunta é, qual sp propósito ecial ele resolve que um simples su
ou sudo
don “t? Por exemplo, para empacotar novamente todos os pacotes instalados no ubuntu, fornecemos 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 como este:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
EDITAR:
Executando:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
me dá este erro:
diretório de controle tem permissões incorretas 700 (deve ser> = 0755 e < = 0775)
Algum motivo?
Comentários
Resposta
Imagine que você é um desenvolvedor / mantenedor de pacote, etc. trabalhando em um servidor remoto. Você deseja atualizar o conteúdo de um pacote e reconstruí-lo, baixar e personalizar um kernel de kernel.org e compilá-lo, etc. Enquanto tenta fazer essas coisas, você descobrirá que alguns passos requerem que você tenha root
direitos (UID
e GID
0) por diferentes razões (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ê). É exatamente isso que fakeroot
faz: finge um UID
e GID
efetivo de 0 para o ambiente que os requer.
Na prática, você nunca obtém privilégios root
reais (em oposição a su
e sudo
que você mencionou).
Comentários
- então, posso ‘ t usar para alterar as configurações do sistema ?? porque o comando que ‘ estaremos executando pensará que ‘ está sendo executado como root e faremos tudo o que quisermos. ganhou ‘ t it?
- @mrid Observe o ” Na prática, você nunca obtém privilégios reais de root “. Portanto, o anwser não é
Resposta
Para ver claramente a diferença entre fakeroot e um sudo / su real, basta fazer:
$ 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ê está como root – contanto que você não tente fazer nada que realmente precisa de privilégios de root. E é exatamente disso que uma ferramenta de embalagem precisa para fazer embalagens 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 vejam seus arquivos como propriedade do root. Nada mais nada menos. Então, na verdade, su ou sudo não funcionará para obter a propriedade correta do arquivo.
Comentários
- Faker não é perigoso? Se eu criar um arquivo com o bit suid e rx perm, o arquivo será criado pelo root, executável por qualquer pessoa, como root! Ou talvez definir o bit suid não funcione?
- Não é bom. Eu tentei isso sozinho. A razão primária para o fakeroot é obter a propriedade de root: root em pacotes compilados sem realmente ser root. os pacotes instalados terão perms apropriados, entretanto.
- Tudo era muito confuso até que eu li @ ntzrmtthihu777 ‘ o comentário!
- Desculpe, Não ‘ não entendo a descrição. Por que não corrigir as ferramentas para que ‘ não se queixem se você não for root? Como uma questão relacionada: Afinal, os arquivos que você cria no fakeroot não são na verdade de propriedade do root. Não ‘ isso implicaria que, quando eu instalar tal
.deb
arquivo, todo o meu/usr
os arquivos são propriedade de qualquer usuário chamadofakeroot
? - @ JohannesSchaub-litb, não que ‘ seja o ponto. Os arquivos não são propriedade do root, mas dentro de um
fakeroot
shell, eles parecem que são. Quando o pacote .deb é criado dentro deste shell, o proprietário do arquivo é lido do sistema de arquivos (quefakeroot
intercepta e retornaroot
) e armazenado na embalagem. Ao instalar o pacote, o dpkg requer acesso root porque o pacote indica que o arquivo deve pertencer ao root.
Resposta
Como as respostas são difíceis de entender (para mim mesmo) e demorou um pouco para pensar para entendê-las ( este comentário me fez entender), estou vou dar uma explicação 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 dá a você um novo shell, como sudo
faria), finja fazer coisas para as quais você precisa de permissão e saia, absolutamente nada aconteceria.
Se você pensar bem, é uma total perda de tempo. Por que você faria coisas que não acontecem de verdade? É uma loucura. Você poderia simplesmente não ter feito nada disso e não teria havido diferença, já que não há nenhum vestígio disso.
Espere um minuto …
2. O rastreamento de fakeroot
Pode haver um traço deixado de fakeroot
. Vejamos os comandos em Resposta de MortenSickel , que é muito boa e merece um voto positivo:
$ 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 total perda de tempo. No final, se você não tivesse usado fakeroot
, teria obtido o mesmo 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 um root. Você pode dizer que não usar fakeroot
teria produzido os mesmos resultados. Você está certo, este exemplo é muito simples.
Vejamos 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 x
pertencer a myuser
e y
pertencer a root
. Na verdade, ambos pertencem a myuser
(como podemos ver no final), mas eu apenas fingi que era assim.
Então criei uma lista e salvei minha imaginação em um arquivo. Mais tarde, quando olho para o arquivo, posso ver de quem imaginei que os arquivos deveriam pertencer. Novamente, eles não são 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 lista. Eu poderia simplesmente ter criado a lista e, em seguida, editado para refletir minha imaginação. Você está certo, você não precisava de fakeroot
para isso. Na verdade, sabendo que fakeroot
não faz nada, você não pode ter adquirido qualquer habilidade que não tinha antes.
Mas , e é disso que se trata fakeroot
, editar a lista pode não ser trivial.Como acontece 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 mantenha seus arquivos juntos e lembre suas permissões e proprietários. Você pode modificar facilmente o arquivo compactado e editar a propriedade de um arquivo? Não sei sobre você, mas não consigo pensar em uma maneira.
Será que pode haver uma ferramenta construída que, uma vez que tudo está compactado, modifica o arquivo compactado e edita programaticamente as propriedades e permissões ? Sim, poderia. Portanto, você pode simular as propriedades antes de compactar ou alterá-las depois. O pessoal do Debian decidiu que o primeiro é 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. Portanto, se você não precisa disso, realmente precisa ser um usuário do Windows para pensar em obter essa permissão. Mas sarcasmo à parte, você pode nem mesmo ter a 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 para o raiz. Então, você sudo
, realmente altera o proprietário do arquivo e as permissões para root
, sai do shell do root e tenta empacotar tudo. Você falhou porque agora não pode mais ler o arquivo, pois não tem acesso root. Portanto, você deve sudo
e compactar 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 deveria obtê-las. Quando você instalar um pacote, você pode precisar instalar algum arquivo (A
) como root e é aí que você precisa de permissões de root. Tudo o que fakeroot
faz é tornar isso possível. Ele permite que a lista do empacotador A
seja propriedade do root para o arquivador, de forma que quando o pacote for descompactado pelo usuário, o arquivador exija permissão de root e crie A
como propriedade do root.
Comentários
- Excelente redação, isso deixa claro.
-
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? ‘. - Obrigado, isso esclarece a confusão que tive depois de ler a resposta da @Morten ‘
AFAIK, fakeroot executa um comando em um ambiente onde parece ter privilégios de root para manipulação de arquivo. 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 teria que construir os arquivos diretamente, sem usar o arquivador.
fakeroot funciona substituindo as funções da biblioteca de manipulação de arquivo (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:
fakeroot [-l|--lib library] [--faked faked-binary] [--] [command]
Verifique mais aqui: fakeroot
Comentários
- @MaskTheSmokin: Então o fakeroot dá a você poder de superusuário apenas para operações de manipulação de arquivo, certo.
- Ele realmente não dá poder do superusuário, ele apenas o finge – o programa em execução pensa que tem privilégios de root, embora na verdade ainda use os privilégios normais do usuário ‘ s.
- Onde está a diferença entre
the program running in it thinks it has root privileges
e o programa com privilégios de root? Se eu puder fazer umrm -rf /
e o programa, executá-lo acha que tenho privilégios de root … - @userunknown Você pode ser capaz de ignorar
rm
‘ s verifique se você tem permissões suficientes, mas o próprio kernel não ‘ deixaria você fazer isso ; aunlink
chamada do sistema falharia. ‘ não cabe ao aplicativo sozinho lidar com as permissões, ou você ‘ seria capaz de escrever seu próprio aplicativo que não ‘ t verifique as permissões e faça o que quiser com elas - Um exemplo para elucidar a necessidade de
fakeroot
seria fantástico. Eu posso ver os usos do fakeroot, mas eu não ‘ não vejo por que as pessoas podem ‘ não contornar as permissões de root a ponto de ‘ é mais fácil fingir.
Resposta
Eu usei para scripts de construção de pacotes. Não tinha certeza se a pessoa que estava executando o script tem acesso de nível de 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 construção de pacote em fakeroot, que enganou o arquivador fazendo-o acreditar que o os arquivos pertencem ao root e os empacotam como tal dentro do arquivo. Desta forma, quando o pacote foi descompactado na máquina de destino (em uma máquina diferente), os arquivos não pertenciam a usuários estranhos ou não existentes.
Pensando nisso, o único lugar que vi isso foi para construir algum tipo de arquivo: rootfs de sistemas embarcados, arquivos tar.gz, pacotes rpm, pacotes .deb, etc.
Comentários
-
fakeroot
é uma ferramenta alternativa para software de empacotamento com bug: não há razão para você precisar ser root para criar tais pacotes, b ut, uma vez que eles não ‘ não permitem que você especifique as permissões de arquivo de qualquer outra forma que não defini-las diretamente no sistema de arquivos de antemão, você não tem escolha
Resposta
Um uso comum é descobrir quais arquivos um binário com falha realmente deseja acessar. Ou seja, descobrir e corrigir ou contornar bugs causados por caminhos codificados e tratamento impróprio de exceção.
Resposta
Você pode use fakeroot sem realmente 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 fakeroot no máximo você removeria seu diretório inicial.
Comentários
- Isso não ‘ t explica a necessidade de
fakeroot
. Você pode remover seu diretório pessoal como você mesmo.
Resposta
A resposta simples:
su e sudo executam comandos como root. o fakeroot não, fora de seu arranjo de sandbox parcial.
sudo
ousu
porque é a sua máquina.fakeroot
tem dois usos 1) engana os programas fazendo-os acreditar que você é realmente um usuário root, o que alguns softwares proprietários mal escritos podem exigir mesmo que não sejam necessários (geralmente o desenvolvedor do Windows mudou para o Linux) e 2) permite emular o modo de arquivo e mudanças de propriedade que você não ‘ não seria capaz de fazer, principalmente para criar umtar
arquivo com as permissões corretas e propriedade, útil, por exemplo, ao empacotar software.fakeroot
! Se você puder ‘ pensar em uma situação em quefakeroot
é útil, então você literalmente não ‘ precisa dele. Mas as pessoas que realmente precisam entender completamente o caso de uso.