Scroll to navigation

fakeroot(1) Manual Debian fakeroot(1)

NOME

fakeroot - corre um comando num ambiente onde finge privilégios de root para manipulação de ficheiro

SINOPSE

fakeroot [-l|--lib library] [--faked faked-binary] [-i load-file] [-s save-file] [-u|--unknown-is-real] [-b|--fd-base ] [-h|--help ] [-v|--version ] [--] [command]

DESCRIÇÃO

fakeroot corre um comando num ambiente onde aparenta ter privilégios de root para manipulação de ficheiros. Isto é útil para permitir aos utilizadores criar arquivos (tar, ar, .deb etc.) com ficheiros dentro com permissões/posse de root. Sem o fakeroot seria preciso ter privilégios de root para criar os ficheiros constituintes dos arquivos com as permissões e posse atuais, e depois empacota-los, ou seria preciso construir os arquivos diretamente, sem usar o arquivador.

fakeroot funciona ao substituir as funções da biblioteca de manipulação de ficheiros (chmod(2), stat(2) etc.), por outras que simulam o efeito que teriam as funções da biblioteca real, caso o utilizador fosse realmente o root. Estas funções envolventes estão numa biblioteca partilhada /usr/lib/*/libfakeroot-*.so ou localização semelhante na sua plataforma. O objecto partilhado é carregado através do mecanismo LD_PRELOAD do carregador dinâmico. (Veja ld.so(8))

Se você pretende compilar pacotes com o fakeroot, por favor tente primeiro compilar o pacote fakeroot: a fase "debian/rules build" tem alguns testes (testar principalmente por bugs em antigas versões do fakeroot). Se esses testes falharem (por exemplo porque você tem certos programas da libc5 no seu sistema), os outros pacotes que compilem com o fakeroot irão muito provavelmente falhar também, mas possivelmente de maneiras muito mais subtis.

Also, note that it's best not to do the building of the binaries themselves under fakeroot. Especially configure and friends don't like it when the system suddenly behaves differently from what they expect (or, they randomly unset some environment variables, some of which fakeroot needs).

OPÇÕES

Especifica uma biblioteca wrapper alternativa.
Especifica um binário alternativo para usar como fingido.
[--] comando
Any command you want to be run as fakeroot. Use ‘--’ if in the command you have other options that may confuse fakeroot's option parsing.
Guarda o ambiente do fakeroot para o save-file ao sair. Este ficheiro pode ser usado para restaurar o ambiente mais tarde usando -i. No entanto, este ficheiro irá ter fugas e o fakeroot irá comportar-se de modo estranho a menos que você deixe os ficheiros que foram "mexidos" dentro do fakeroot, isolados e inalterados quando fora do ambiente. Mesmo assim, isto poderá ser útil. Por exemplo, pode ser usado com o rsync(1) para salvaguardar e restaurar árvores de diretórios inteiras com informações de utilizador, grupo e dispositivo sem a necessidade de ser root. Veja /usr/share/doc/fakeroot/README.saving para mais detalhes.
Carrega um ambiente do fakeroot previamente guardado usando -s a partir de load-file. Note que isto não salva implicitamente o ficheiro, use -s também para esse comportamento. E seguro usar o mesmo ficheiro para ambos -i e -s numa única invocação do fakeroot.
Usa a posse real dos ficheiros anteriormente desconhecida para o fakeroot em vez de fingir que eles são posse de root:root.
Especifica a base fd (apenas modo TCP). O fd é o número descritor de ficheiro mínimo usado para ligações TCP; isto pode ser importante para evitar conflitos com os descritores de ficheiro usados pelos programas que correm sob o fakeroot.
Mostra a ajuda.
Mostra a versão.

EXEMPLOS

Aqui está uma sessão exemplo com o fakeroot. Note que dentro do ambiente fingido de root a manipulação de ficheiro que requer privilégios de root tem sucesso, mas na realidade não está a acontecer.

$  whoami
joost
$ fakeroot /bin/bash
#  whoami
root
# mknod hda3 b 3 1
# ls -ld hda3
brw-r--r--   1 root     root       3,   1 Jul  2 22:58 hda3
# chown joost:root hda3
# ls -ld hda3
brw-r--r--   1 joost    root       3,   1 Jul  2 22:58 hda3
# ls -ld /
drwxr-xr-x  20 root     root         1024 Jun 17 21:50 /
# chown joost:users /
# chmod a+w /
# ls -ld /
drwxrwxrwx  20 joost    users        1024 Jun 17 21:50 /
# exit
$ ls -ld /
drwxr-xr-x  20 root     root         1024 Jun 17 21:50 //
$ ls -ld hda3
-rw-r--r--   1 joost    users           0 Jul  2 22:58 hda3

Apenas os efeitos que o utilizador joost podia fazer aconteceram de verdade.

fakeroot foi especificamente escrito para permitir aos utilizadores criarem pacotes Debian GNU/Linux (no formato deb(5)) sem lhes dar privilégios de root. Isto pode ser feito por comandos como dpkg-buildpackage -rfakeroot ou debuild -rfakeroot (na realidade, -rfakeroot é predefinição no debuild nos dias que correm, por isso você não precisa desse argumento).

ASPECTOS DE SEGURANÇA

fakeroot é um programa normal, não-setuid. Não aumenta os privilégios do utilizador nem baixa a segurança do sistema.

FICHEIROS

/usr/lib/*/libfakeroot-*.so A biblioteca partilhada que contém as funções wrapper.

AMBIENTE

The key used to communicate with the fakeroot daemon. Any program started with the right LD_PRELOAD and a FAKEROOTKEY of a running daemon will automatically connect to that daemon, and have the same "fake" view of the file system's permissions/ownerships (assuming the daemon and connecting program were started by the same user).
fakeroot is implemented by wrapping system calls. This is accomplished by setting LD_LIBRARY_PATH=/usr/lib/fakeroot and LD_PRELOAD=libfakeroot.so.0. That library is loaded before the system's C library, and so most of the library functions are intercepted by it. If you need to set either LD_LIBRARY_PATH or LD_PRELOAD from within a fakeroot environment, it should be set relative to the given paths, as in LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/foo/bar/

LIMITAÇÕES

Cada comando executado dentro do fakeroot precisa de ser ligado por link à mesma versão de biblioteca C do próprio fakeroot.
O fakeroot não envolve o open(), create(), etc. Então, se o utilizador joost também o fizer

touch foo
fakeroot
ls -al foo
    

ou do outro modo contrário,

fakeroot
touch foo
ls -al foo
    

No primeiro caso o fakeroot não tem maneira de saber isso, o dono de foo deverá realmente ser joost enquanto no segundo caso deveria ter sido root. Para o empacotamento de Debian, a predefinição de dar a todos os ficheiros "desconhecidos" uid=gid=0, está sempre OK. A maneira real para contornar isto é envolver open() e create(), mas isso cria outros problemas, como demonstrado pelo pacote libtricks. Este pacote envolvia muitas mais funções, e tentava fazer muito mais do que o fakeroot .. Aconteceu que uma actualização menor da libc (de um caso em que a função stat() não usava open() para um com uma função stat() que usava (em alguns casos) open()), veio a causar falhas de segmentação inexplicáveis (isto é, o stat() da libc6 chamava o open() envolvido, o qual iria então chamar a stat() da libc6, etc.). Corrigir isto não foi lá muito fácil, mas após corrigido, foi apenas uma questão de tempo antes de outra função passar a usar open(), e esqueçam de tentar portá-lo para outro sistema operativo diferente. Assim Eu decidi manter o número de funções envolvidas pelo fakeroot o mais pequeno possível, para limitar a possibilidade de ‘collisions’.

O fakeroot, efectivamente, está a alterar o modo como o sistema se comporta. Programas que testam o sistema como o configure do GNU podem ficar confusos por isto (ou se não ficarem, podem "stressar" o fakeroot tanto que o próprio fakeroot possa ficar confuso). Portanto, é aconselhável não correr o "configure" de dentro do fakeroot. Como o configure deverá ser chamado na meta "debian/rules build", correr "dpkg-buildpackage -rfakeroot" actualmente toma conta disto.

BUGS

Não envolve open(). Isto não é mau por si próprio, mas se um programa fizer open("file", O_WRONLY, 000), escrever no ficheiro "file" e o fechar, e depois tentar abri-lo para ler o ficheiro, então essa abertura vai falhar, pois o modo do ficheiro será 000. O bug é tal que se o root fizer o mesmo, open() irá ter sucesso, pois as permissões não são verificadas para o root. Eu escolhi não envolver open(), pois open() é usado por muitas outras funções na libc (mesmo aquelas que já estão envolvidas), assim criando ciclos viciosos (ou possíveis ciclos futuros, quando a implementação de várias funções da libc mudarem ligeiramente).

COPIAR

fakeroot é distribuído sob a GNU General Public License. (GPL 2.0 ou superior).

AUTORES

<joostje@debian.org>
<clint@debian.org>

TRADUTOR

Américo Monteiro <a_monteiro@gmx.com>

PÁGINA DE MANUAL

mostly by J.H.M. Dassen <jdassen@debian.org>, with rather a lot of modifications and additions by joost and Clint.

VEJA TAMBÉM

debuild(1), dpkg-buildpackage(1), faked(1), /usr/share/doc/fakeroot/DEBUG

2024-12-19 Projecto Debian