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.