fakeroot(1) Manual Debian fakeroot(1) NOME fakeroot - corre um comando num ambiente onde finge privilegios de root para manipulacao 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] DESCRICAO fakeroot corre um comando num ambiente onde aparenta ter privilegios de root para manipulacao de ficheiros. Isto e util para permitir aos utilizadores criar arquivos (tar, ar, .deb etc.) com ficheiros dentro com permissoes/posse de root. Sem o fakeroot seria preciso ter privilegios de root para criar os ficheiros constituintes dos arquivos com as permissoes e posse atuais, e depois empacota-los, ou seria preciso construir os arquivos diretamente, sem usar o arquivador. fakeroot funciona ao substituir as funcoes da biblioteca de manipulacao de ficheiros (chmod(2), stat(2) etc.), por outras que simulam o efeito que teriam as funcoes da biblioteca real, caso o utilizador fosse realmente o root. Estas funcoes envolventes estao numa biblioteca partilhada /usr/lib/*/libfakeroot-*.so ou localizacao semelhante na sua plataforma. O objecto partilhado e carregado atraves do mecanismo LD_PRELOAD do carregador dinamico. (Veja ld.so(8)) Se voce 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 versoes do fakeroot). Se esses testes falharem (por exemplo porque voce tem certos programas da libc5 no seu sistema), os outros pacotes que compilem com o fakeroot irao muito provavelmente falhar tambem, 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). OPCOES -l biblioteca, --lib biblioteca Especifica uma biblioteca wrapper alternativa. --faked binario Especifica um binario 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. -s save-file 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 ira ter fugas e o fakeroot ira comportar-se de modo estranho a menos que voce deixe os ficheiros que foram "mexidos" dentro do fakeroot, isolados e inalterados quando fora do ambiente. Mesmo assim, isto podera ser util. Por exemplo, pode ser usado com o rsync(1) para salvaguardar e restaurar arvores de diretorios inteiras com informacoes de utilizador, grupo e dispositivo sem a necessidade de ser root. Veja /usr/share/doc/fakeroot/README.saving para mais detalhes. -i load-file Carrega um ambiente do fakeroot previamente guardado usando -s a partir de load-file. Note que isto nao salva implicitamente o ficheiro, use -s tambem para esse comportamento. E seguro usar o mesmo ficheiro para ambos -i e -s numa unica invocacao do fakeroot. -u, --unknown-is-real Usa a posse real dos ficheiros anteriormente desconhecida para o fakeroot em vez de fingir que eles sao posse de root:root. -b fd Especifica a base fd (apenas modo TCP). O fd e o numero descritor de ficheiro minimo usado para ligacoes TCP; isto pode ser importante para evitar conflitos com os descritores de ficheiro usados pelos programas que correm sob o fakeroot. -h Mostra a ajuda. -v Mostra a versao. EXEMPLOS Aqui esta uma sessao exemplo com o fakeroot. Note que dentro do ambiente fingido de root a manipulacao de ficheiro que requer privilegios de root tem sucesso, mas na realidade nao esta 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 privilegios de root. Isto pode ser feito por comandos como dpkg-buildpackage -rfakeroot ou debuild -rfakeroot (na realidade, -rfakeroot e predefinicao no debuild nos dias que correm, por isso voce nao precisa desse argumento). ASPECTOS DE SEGURANCA fakeroot e um programa normal, nao-setuid. Nao aumenta os privilegios do utilizador nem baixa a seguranca do sistema. FICHEIROS /usr/lib/*/libfakeroot-*.so A biblioteca partilhada que contem as funcoes wrapper. AMBIENTE FAKEROOTKEY 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). LD_LIBRARY_PATH LD_PRELOAD 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/ LIMITACOES Versoes de biblioteca Cada comando executado dentro do fakeroot precisa de ser ligado por link a mesma versao de biblioteca C do proprio fakeroot. open()/create() O fakeroot nao envolve o open(), create(), etc. Entao, se o utilizador joost tambem o fizer touch foo fakeroot ls -al foo ou do outro modo contrario, fakeroot touch foo ls -al foo No primeiro caso o fakeroot nao tem maneira de saber isso, o dono de foo devera realmente ser joost enquanto no segundo caso deveria ter sido root. Para o empacotamento de Debian, a predefinicao de dar a todos os ficheiros "desconhecidos" uid=gid=0, esta sempre OK. A maneira real para contornar isto e envolver open() e create(), mas isso cria outros problemas, como demonstrado pelo pacote libtricks. Este pacote envolvia muitas mais funcoes, e tentava fazer muito mais do que o fakeroot .. Aconteceu que uma actualizacao menor da libc (de um caso em que a funcao stat() nao usava open() para um com uma funcao stat() que usava (em alguns casos) open()), veio a causar falhas de segmentacao inexplicaveis (isto e, o stat() da libc6 chamava o open() envolvido, o qual iria entao chamar a stat() da libc6, etc.). Corrigir isto nao foi la muito facil, mas apos corrigido, foi apenas uma questao de tempo antes de outra funcao passar a usar open(), e esquecam de tentar porta-lo para outro sistema operativo diferente. Assim Eu decidi manter o numero de funcoes envolvidas pelo fakeroot o mais pequeno possivel, para limitar a possibilidade de `collisions'. configure do GNU (e outros programas como tal) O fakeroot, efectivamente, esta 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 nao ficarem, podem "stressar" o fakeroot tanto que o proprio fakeroot possa ficar confuso). Portanto, e aconselhavel nao correr o "configure" de dentro do fakeroot. Como o configure devera ser chamado na meta "debian/rules build", correr "dpkg-buildpackage -rfakeroot" actualmente toma conta disto. BUGS Nao envolve open(). Isto nao e mau por si proprio, 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, entao essa abertura vai falhar, pois o modo do ficheiro sera 000. O bug e tal que se o root fizer o mesmo, open() ira ter sucesso, pois as permissoes nao sao verificadas para o root. Eu escolhi nao envolver open(), pois open() e usado por muitas outras funcoes na libc (mesmo aquelas que ja estao envolvidas), assim criando ciclos viciosos (ou possiveis ciclos futuros, quando a implementacao de varias funcoes da libc mudarem ligeiramente). COPIAR fakeroot e distribuido sob a GNU General Public License. (GPL 2.0 ou superior). AUTORES joost witteveen Clint Adams Timo Savola TRADUTOR Americo Monteiro PAGINA DE MANUAL mostly by J.H.M. Dassen , with rather a lot of modifications and additions by joost and Clint. VEJA TAMBEM debuild(1), dpkg-buildpackage(1), faked(1), /usr/share/doc/fakeroot/DEBUG Projecto Debian 2024-12-19 fakeroot(1)