fakeroot(1) Manuel de Debian fakeroot(1) NOM fakeroot - lance une commande dans un environnement simulant les privileges du superutilisateur pour la manipulation des fichiers. SYNOPSIS fakeroot [-l|--lib bibliotheque] [--faked binairedesimulation] [-i fichier-de-chargement] [-s fichier-de-sauvegarde] [-u|--unknown-is-real ] [-b|--fd-base ] [-h|--help ] [-v|--version ] [--] [commande] DESCRIPTION fakeroot lance une commande dans un environnement dans lequel cette commande obtient les droits de l'administrateur pour manipuler des fichiers. C'est pratique pour permettre aux utilisateurs de creer des archives (tar, ar, .deb, etc.) qui contiennent des fichiers avec les privileges et appartenances du superutilisateur. Sans fakeroot, il faudrait posseder les droits du superutilisateur pour donner les droits et appartenances convenables aux fichiers constituant l'archive, puis de les assembler ; ou bien, il faudrait construire directement l'archive, sans utiliser le programme d'archivage. 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)) Si vous desirez construire des paquets avec fakeroot, veuillez essayer de construire d'abord le paquet fakeroot : l'etape << debian/rules build >> realise quelques tests (principalement pour les bogues des vieilles versions de fakeroot). Si ces tests echouent (si vous avez par exemple certains programmes en libc5 sur votre systeme), la construction d'autres paquets avec fakeroot echouera certainement aussi, mais de facon parfois plus subtile. De meme, notez qu'il vaut mieux ne pas construire les binaires eux-memes sous fakeroot. En particulier, configure et ses amis n'apprecient pas quand le systeme se comporte differemment de ce qu'ils attendent (parfois, ils modifient aleatoirement des variables d'environnement dont fakeroot a besoin). OPTIONS -l bibliotheque, --lib bibliotheque Specifie une autre bibliotheque de substitution (wrapper library). --faked binaire Specifie l'utilisation d'une autre bibliotheque que faked. [--] commande La commande a lancer sous fakeroot. Utilisez << -- >> si des options de la commande risque d'etre confondues avec celles de fakeroot. -s fichier-de-sauvegarde Enregistre l'environnement de fakeroot dans fichier-de-sauvegarde en quittant. Ce fichier pourra servir plus tard a restaurer cette configuration grace a l'option -i. Toutefois, cette option echouera et fakeroot se comportera bizarrement sauf si vous laissez les fichiers manipules par fakeroot intacts quand vous etes en dehors de cet environnement. Malgre cette restriction, cela peut etre utile. Par exemple, cela peut servir avec rsync(1) pour sauvegarder et restaurer toute une arborescence de repertoires avec les informations de proprietaire, groupe et peripherique sans avoir a etre superutilisateur. Voir /usr/share/doc/fakeroot/README.saving pour plus d'informations. -i fichier-de-chargement Recharge a partir de fichier-de-chargement un environnement fakeroot prealablement sauvegarde en utilisant l'option -s. Notez que cela ne sauvegardera pas automatiquement la configuration, vous devez repreciser -s dans ce but. L'utilisation du meme nom de fichier pour -i et -s dans une seule commande fakeroot ne pose pas de probleme. -u, --unknown-is-real Utilise le veritable proprietaire des fichiers auparavant inconnus de fakeroot, plutot que de considerer qu'ils appartiennent a root:root. -b fd Definit la valeur de base du descripteur de fichier (en mode TCP uniquement). Fd sera la plus petite valeur du descripteur de fichier utilise pour les connexions TCP. Ce reglage peut etre tres pratique pour gerer les descripteurs de fichiers utilises par les programmes qui fonctionnent sous fakeroot. -h Affiche l'aide. -v Affiche la version. EXEMPLES Voici un exemple d'utilisation de fakeroot. Notez bien qu'a l'interieur de l'environnement fakeroot, les manipulations de fichiers qui requierent les privileges du superutilisateur ont lieu, mais uniquement virtuellement. $ 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 Seule l'operation que l'utilisateur joost pouvait realiser a reellement aboutie. fakeroot a ete ecrit specifiquement pour permettre aux utilisateurs de creer des paquets pour Debian GNU/Linux (au format deb(5)) sans avoir a leur donner les privileges du superutilisateur. Ceci peut etre fait par des commandes telles que dpkg-buildpackage -rfakeroot ou debuild -rfakeroot (-rfakeroot est actuellement utilise par defaut par debuild, donc vous n'avez pas besoin de cet argument). ASPECTS DE SECURITE fakeroot est un programme normal, sans privileges speciaux. Il n'augmente pas les privileges de l'utilisateur et n'altere pas la securite du systeme. FICHIERS /usr/lib/*/libfakeroot-*.so The shared library containing the wrapper functions. ENVIRONNEMENT FAKEROOTKEY La cle utilisee pour communiquer avec le demon fakeroot. Tout programme qui demarre avec le bon LD_PRELOAD et une FAKEROOTKEY d'un serveur actif se connectera automatiquement a ce demon, et aura la meme << fausse >> vision des droits du systeme de fichiers (si le serveur et le programme connecte ont bien ete lances par le meme utilisateur). LD_LIBRARY_PATH LD_PRELOAD Fakeroot a ete concu en encapsulant les appels systemes. On y arrive en definissant LD_LIBRARY_PATH=/usr/lib/fakeroot et LD_PRELOAD=libfakeroot.so.0. Cette bibliotheque est chargee avant la bibliotheque C du systeme, d'ou l'interception de la plupart des fonctions de la bibliotheque. Si vous devez definir d'autres LD_LIBRARY_PATH ou LD_PRELOAD au sein d'un environnement fakeroot, cela devrait etre fait en respectant l'ordre de placement, par exemple comme dans LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/toto/titi/. LIMITES Versions des bibliotheques Toute commande executee sous fakeroot devra etre liee a la meme version de la bibliotheque C que fakeroot lui-meme. open()/create() fakeroot n'encapsule pas open(), create(), etc. Donc si l'utilisateur joost tape soit touch foo fakeroot ls -al foo soit fakeroot touch foo ls -al foo fakeroot n'aura aucun moyen de savoir que dans le premier cas, le proprietaire de foo est reellement joost tandis que dans le second cas, il aurait du etre root. Pour un paquet Debian, il est toujours correct de donner a tous les fichiers << inconnus >> l'uid=gid=0. La vraie solution est de simuler open() et create(), mais cela souleve d'autres problemes, comme demontre par le paquet libtricks. Ce paquet simule beaucoup d'autres fonctions, et tente d'aller plus loin que fakeroot . On peut s'apercevoir qu'une mise a jour minime de la libc (d'une version dans laquelle la fonction stat() n'utilise pas open() a une nouvelle version dans laquelle la fonction stat() utilise (dans certains cas) open()), causera d'inexplicables erreurs de segmentation (ainsi, le stat() de la libc6 appellera la fonction simulee open(), qui a son tour appellera la fonction stat() de la libc6, etc.). La correction n'a pas ete facile, mais une fois corrige, ce n'etait plus qu'une question de temps avant qu'une autre fonction ne se mette a utiliser open(). Quant au portage sur un autre systeme d'exploitation, il n'a pas ete envisage. Il a donc ete decide de limiter au maximum le nombre de fonctions simulees par fakeroot, afin de limiter l'eventualite de ces << collisions >>. GNU configure (et autres programmes du meme genre) En pratique, fakeroot modifie le comportement du systeme. Les programmes qui testent le systeme (tel que configure du GNU) peuvent etre troubles par cela (ou, s'ils ne le sont pas, ils risquent de solliciter fakeroot a un point tel que celui-ci risque lui-meme de s'y perdre). Il est donc preferable de ne pas lancer << configure >> dans un environnement fakeroot. Comme configure doit etre lance par la cible build de debian/rules, l'utilisation de << dpkg-buildpackage -rfakeroot >> gere correctement ce probleme. BOGUES open() n'est pas simule. Ce n'est pas si grave que cela, mais si un programme invoque open("file", O_WRONLY, 000), ecrit dans ce fichier << file >>, le ferme, puis reessaye ensuite de l'ouvrir en lecture, alors cette tentative echouera, car les droits du fichier seront 000. Le bogue, c'est que si root fait cette operation, alors open() fonctionne, puisque les droits des fichiers ne sont pas du tout verifies pour root. Il a ete choisi de ne pas simuler open(), car open() est utilise par nombre d'autres fonctions de la libc (dont certaines qui sont deja simulees par fakeroot), ce qui creerait des boucles (ou pourrait en creer quand l'implementation des diverses fonctions de la libc change). COPIES fakeroot est distribue sous la licence GNU General Public License. (GPL 2.0 ou superieure). AUTEURS Joost Witteveen Clint Adams Timo Savola TRADUCTION Sylvain Cherrier . PAGE DE MANUEL En majeure partie ecrite par J.H.M. Dassen : La plupart des ajouts et des modifications par Joost et Clint. VOIR AUSSI faked(1) dpkg-buildpackage(1), debuild(1) /usr/share/doc/fakeroot/DEBUG Projet Debian 5 October 2014 fakeroot(1)