[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [ddr] fakeroot.1



On Thu, Oct 17, 2002 at 12:32:42PM +0200, Julien Louis wrote:
> Bonjour,
> 
> Encore une autre page.
> 
> Merci pour les relecture

Avec la page c'est mieux, désolé.
-- 
pain, n.:
	One thing, at least it proves that you're alive!
.\" Process this file with
.\" groff -man -Tascii foo.1
.\"
.\" "verbatim" environment (from strace.1)
.de CW
.sp
.nf
.ft CW
..
.de CE
.ft
.fi
.sp
..
.\"
.TH fakeroot 1 "26 Juillet 1997" "Project Debian" "Manuel de Debian GNU/Linux"
.\" Page d'aide par J.H.M. Dassen <jdassen@wi.LeidenUniv.nl>
.SH NOM
fakeroot \- lance un commande dans un environnement offrant les privilèges du
root pour la manipulation des fichiers.
.SH SYNOPSIS
.B fakeroot 
.B [\-l|\-\-lib
.IB library] 
.B [-\-faked
.IB faked-binary] 
.BI [--]
.BI [command]
.SH DESCRIPTION
.B fakeroot
lance une commande dans un environnement dans lequel elle obtient les droits
de l'administrateur concernant la manipulation des fichiers. Ceci est
pratique pour permettre aux utilisateurs de créer des archives (tar, ar,
.deb, etc.) contenant des fichiers appartenant/réservés à root.
Sans
.B fakeroot
on serait obligé d'avoir les droits du root pour créer les fichiers
constituant l'archive avec les bonnes permissions et appartenances, puis de
les assembler, ou on serait obligé de construire directement l'archive,
sans utiliser le programme d'archivage.

.B fakeroot
fonctionne en remplaçant la bibliothèque de fonctions de manipulation de
fichier (chmod(2), stat(2), etc...) par une autre qui simule les fonctions
que la vraie bibliothèque aurait offertes si l'utilisateur était le root.
Ces fonctions simulées sont dans la bibliothèque partagée 
.B /usr/lib/libfakeroot.so*
qui est chargée par le mécanisme
.B LD_PRELOAD
du chargeur dynamique (dynamic loader). (Voir
.BR ld.so (8))

Si vous désirez construire des packages avec
.BR fakeroot ,
essayez, s'il vous plait, de construire d'abord le package fakeroot : l'étape
"fabrication à la mode debian (debian/rules build)" réalise quelques tests
(principalement pour les bogues des vieilles versions fakeroot). Si ces tests
échouent (si vous avez par exemple certains programmes en libc5 sur votre
système), les autres packages que vous fabriquerez avec fakeroot échoueront
certainement aussi, mais de façon parfois plus subtile.

De même, notez qu'il vaut mieux ne pas construire les binaires eux-mêmes sous
fakeroot. Particulièrement, configure et ses amis n'apprécient pas quand le
système se comporte différement de ce qu'ils attendent (parfois, ils modifient
aléatoirement quelques variables d'environnement dont fakeroot a besoin).

.SH OPTIONS
.TP
.BI \-\-lib \ library
Spécifie une autre bibliothèque de substitution (wrapper library).
.TP
.BI \-\-faked \ binary
Spécifie l'utilisation d'un autre démon que faked.
.TP
.BI [\-\-] \ command
La commande à lancer sous fakeroot. Invoquez '--' si des options de la
commande risque d'être confondues avec des options de fakeroot.
.TP
.SH EXEMPLES
Voici un exemple d'utilisation de 
.BR fakeroot . 
Notez bien qu'à l'intérieur de l'environnement fakeroot, les manipulations de
fichiers qui requierent les priviliges de l'administrateur aboutissent, mais
uniquement virtuellement.
.CW
$  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
.CE
Seule l'opération que l'utilisateur 
.B joost
pouvait réaliser a réellement aboutie. 

.B fakeroot
a été écrit spécifiquement pour permettre aux utilisateurs de créer des
packages pour Debian GNU/Linux (au format
.BR deb(5)
) sans avoir à leur donner les privilèges du root.
Ceci peut être fait par des commandes telles que
.B dpkg-buildpackage -rfakeroot
ou
.B debuild -rfakeroot
(normallement, -rfakeroot est utilisé maintenant par défaut pour debuild,
donc vous n'aurez pas besoin de cet argument).
.SH ASPECTS DE SECURITE 
.B fakeroot
est un programme normal, non setuid. Il n'augmente pas les privilèges de
l'utilisateur, ni n'altère la sécurité du système.
.SH FICHIERS
.I /usr/lib/libfakeroot/libfakeroot.so*
La bibliothèque partagée qui contient les fonctions simulées.
.SH ENVIRONNEMENT
.B 
.IP FAKEROOTKEY
La clé utilisée pour communiquer avec le serveur fakeroot (le daemon). Tout
programme qui démarre avec le bon 
.B LD_PRELOAD
et la
.B FAKEROOTKEY
d'un serveur actif se connectera automatiquement à ce démon, et aura la même
"fausse" vision des permissions/appartenance sur le système de fichiers (si
le serveur et le programme connecté ont bien été lancés par le même
utilisateur).
.SH LIMITES
.B
.IP "Versions des libs"
Toute commande exécutée sous
.B fakeroot 
devra être liée à la même version de la bibliothèque C que 
.B fakeroot
lui-même. Comme la version "potato" de la debian ne se sert plus que de la
libc6(glibc2.1), ceci n'est plus un problème aujourd'hui. 
.B
.IP open()/create()
Fakeroot ne modifie pas open(), create(), etc... Donc si l'utilisateur
.B joost
tape soit
.CW
touch foo
fakeroot 
ls -al foo
.CE
ou soit
.CW
fakeroot
touch foo
ls -al foo
.CE
fakeroot n'aura aucun moyen de savoir que dans le premier cas, le
propriétaire de foo est réellement
.B joost
tandis que dans le second cas, il aurait du être 
.BR root .
Pour le packaging Debian, l'usage est de donner à tous les fichiers
"inconnus" l'uid=gid=0. La vraie solution est de simuler 
.B open() 
et
.BR create() ,
mais cela soulève d'autres problèmes, comme il a été démontré par le package
libtricks. Ce package simule beaucoup d'autres fonctions, et tente d'aller
plus loin que
.B fakeroot.
Il appert qu'une mise à jour minime de la libc (d'une version dans laquelle
la fonction 
.BR stat()
n'utilise pas 
.BR open()
à une nouvelle version dans laquelle la fonction
.BR stat()
utilise (dans certains cas)
.BR open() ),
causera d'inexplicables erreurs de segmentation (ainsi, le 
.BR stat()
de la libc6 appellera la fonction simulée 
.BR open() ,
qui à son tour appellera la fonction 
.BR stat() ,
de la libc6, etc)
. LA correction n'a pas été facile, mais une fois corrigé, c'est juste une
question de temps avant qu'une autre fonction ne se mette à utiliser open().
Quant au portage sur un autre système d'exploitation, il n'a pas été envisagé.
.. J'ai donc décidé de limiter au maximum le nombre de fonctions simulées
par fakeroot, afin de contenir ce type de "collisions".
.B
.IP "GNU configure (et autres programmes du même genre)"
Fakeroot, en fait, modifie le comportement du système. Les programmes qui
testent le système (tel que GNU configure) peuvent être troublé par cela (ou,
si ils ne le sont pas, ils risquent de solliciter fakeroot à tel point que
celui-ci risque lui-même de s'y perdre). Il est donc préférable de ne pas
lancer "configure" dans un environnement fakeroot. Comme configure pourrait
être lancé par une dépendance dans "la construction à la mode debian
(debian/rules build)", l'utilisation de "dpkg-buildpackage -rfakeroot" permet
une gestion correcte de ce risque.
.SH BOGUES
open() n'est pas simulé. Ce n'est pas si grave que cela, mais si un programme
invoque open("file", O_WRONLY, 000), écrit dans le fichier "file", le ferme,
puis réessaye ensuite de l'ouvrir en lecture, alors cette tentative échouera,
car les droits du fichier seront 000. Le bogue, c'est que si root fait cette
opération, alors l'ouverture fonctionne, puisque les droits des fichiers ne 
sont pas vérifiés du tout pour root. J'ai choisi de ne pas simuler open(), car
open() est utilisé par nombre d'autres fonctions de la libc (dont certaines
qui sont déja simulé par fakeroot), ce qui créerait de boucles (ou en créeraiti
à l'avenir, dès lors que l'implémentation des diverses fonctions de la libc
est soumise à évolution).
.SH COPIE
.B fakeroot
est distribué sous la licence GNU General Public License.
(GPL 2.0 ou supérieure).
.SH AUTEUR
joost witteveen
.RI < joostje@debian.org >
.SH PAGE D'AIDE
en majeure partie par  J.H.M. Dassen 
.RI <jdassen@wi.LeidenUniv.nl> 
La plupart de ajouts/modification par joost.
.SH "VOIR AUSSI"
.BR faked (1)
.BR dpkg-buildpackage (1),
.BR build (1L)
.BR /usr/doc/fakeroot/DEBUG
.SH TRADUCTION
Sylvain Cherrier, 2002.

Reply to: