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 works by replacing the file manipulation library functions (chmod(2), stat(2) etc.) by ones that simulate the effect the real library functions would have had, had the user really been root. These wrapper functions are in a shared library /usr/lib/*/libfakeroot-*.so or similar location on your platform. The shared object is loaded through the LD_PRELOAD mechanism of the dynamic loader. (See 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.

Note também que, é melhor não fazer a compilação dos próprios binários sob o fakeroot. Especialmente o configure e "amigos" não gostam quando o sistema subitamente se comporta de modo diferente do que eles esperam (ou, eles desconfiguram aleatoriamente algumas variáveis de ambiente, algumas das quais o fakeroot necessita).

OPÇÕES

-l biblioteca, --lib biblioteca
    Especifica uma biblioteca wrapper alternativa.

--faked binário
    Especifica um binário alternativo para usar como fingido.

[--] comando
    Qualquer comando que deseje correr como fakeroot. Use ‘--’ se no comando você tem outras opções que podem confundir a análise de opções do fakeroot.

-s save-file
    Save the fakeroot environment to save-file on exit. This file can be used to restore the environment later using -i. However, this file will leak and fakeroot will behave in odd ways unless you leave the files touched inside the fakeroot alone when outside the environment. Still, this can be useful. For example, it can be used with rsync(1) to back up and restore whole directory trees complete with user, group and device information without needing to be root. See /usr/share/doc/fakeroot/README.saving for more details.

-i load-file
    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.

-u, --unknown-is-real
    Usa a posse real dos ficheiros anteriormente desconhecida para o fakeroot em vez de fingir que eles são posse de root:root.

-b fd
    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.

-h  Mostra a ajuda.

-v  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

FAKEROOTKEY
    A chave usada para comunicar com o daemon do fakeroot. Qualquer programa arrancado com o LD_PRELOAD correto e um FAKEROOTKEY de um daemon em execução irá ligar-se automaticamente a esse daemon, e terá a mesma visão "falsa" das permissões/propriedades do sistema de ficheiros (assumindo que o daemon e o programa que se liga foram arrancados pelo mesmo utilizador).

LD_LIBRARY_PATH

LD_PRELOAD
    fakeroot é implementado ao envolver chamadas do sistema. Isto é conseguido ao definir LD_LIBRARY_PATH=/usr/lib/fakeroot e LD_PRELOAD=libfakeroot.so.0. Essa biblioteca é carregada antes da biblioteca C do sistema, e assim a maioria das funções da biblioteca são intercetadas por ela. Você precisa de definir ou LD_LIBRARY_PATH ou LD_PRELOAD de dentro de um ambiente fakeroot, deverá ser definido em relação aos caminhos fornecidos, como em LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/foo/bar/

LIMITAÇÕES

Library versions
    Cada comando executado dentro do fakeroot precisa de ser ligado por link à mesma versão de biblioteca C do próprio fakeroot.

open()/create()
    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

    Em primeiro lugar 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 porta-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’.

GNU configure (e outros programas como tal)
    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

joost witteveen
    <joostje@debian.org>

Clint Adams
    <clint@debian.org>

Timo Savola

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 modsifications and additions by joost and Clint.

VEJA TAMBÉM
debuild(1), dpkg-buildpackage(1), faked(1), /usr/share/doc/fakeroot/DEBUG