PATH Mini-HowTo
Esa Turtiainen (
[email protected])
Version 0.4, 15 Novembre 1997
L'objectif de ce HOWTO est de traiter l'utilisation des variables
d'environnement sous Unix, et en particulier de la variable PATH.
Adaptation fran�aise par Mathieu Lafon (
[email protected]),
r�alis�e le 22 Octobre 1998.
11.. IInnttrroodduuccttiioonn
Ce document aborde les astuces et les probl�mes relatifs aux variables
d'environnement sous Unix/Linux, et plus sp�cialement � la variable
PATH. PATH est une liste de r�pertoires dans lesquels le syst�me
recherche les commandes � ex�cuter. Ce document s'appuie sur la
distribution Debian Linux 1.3.
Remarque: Ce document est en phase de d�veloppement (b�ta). Vous
pouvez m'envoyer vos commentaires ou vos corrections.
Les commentaires sur la traduction sont � envoyer � Mathieu Lafon
(
[email protected]).
22.. DDrrooiittss dd''aauutteeuurr
Cette documentation est libre, vous pouvez la redistribuer et/ou la
modifier selon les termes de la Licence Publique G�n�rale GNU publi�e
par la Free Software Foundation (version 2 ou bien toute autre version
ult�rieure choisie par vous).
Cette documentation est distribu�e car potentiellement utile, mais
SANS AUCUNE GARANTIE, ni explicite ni implicite, y compris les
garanties de commercialisation ou d'adaptation dans un but sp�cifique.
Reportez-vous � la Licence Publique G�n�rale GNU pour plus de d�tails.
Vous pouvez obtenir une copie de la Licence Publique G�n�rale GNU en
�crivant � la Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, Etats-Unis.
33.. GG��nn��rraalliitt��ss
Tous les processus sous Unix poss�dent un _e_n_v_i_r_o_n_n_e_m_e_n_t. C'est une
liste de variables contenant un nom et une valeur, les deux sous la
forme de cha�nes (pouvant contenir la majorit� des caract�res). Tous
les processus Unix poss�dent un processus parent, celui qui les a
cr��s. Les processus fils h�ritent de l'environnement de leurs
parents. Ils peuvent ensuite y faire quelques modifications avant de
le passer � leurs propres processus fils.
Une variable importante de l'environnement est la variable PATH qui se
pr�sente sous la forme d'une liste de r�pertoires s�par�s par le
caract�re deux-points (':'). Ces r�pertoires sont parcourus pour
rechercher les commandes. Si vous essayez de lancer la commande
bidule, tous les r�pertoires contenus dans PATH seront examin�s (dans
l'ordre), � la recherche de l'ex�cutable bidule (un fichier avec le
bit ex�cutable positionn�). Si un tel fichier est trouv�, il sera
ex�cut�.
Dans ce document, j'utilise le terme de _c_o_m_m_a_n_d_e pour un programme
ex�cutable qui est appel� sans indication de son chemin, utilisant
donc le m�canisme de PATH.
Sous Linux, m�me les appels de bas niveau pour lancer des processus
(la famille des exec) se basent sur la variable PATH pour trouver les
ex�cutables : vous pouvez donc utiliser le m�canisme de PATH n'importe
o�, o� vous voulez ex�cuter une commande. Si un appel de exec re�oit
le nom d'un fichier qui ne contient pas de '/', il cherchera dans la
variable d'environnement PATH. M�me si cette variable n'existe pas,
les r�pertoires /bin et /usr/bin seront examin�s � la recherche de
cette commande.
Pour cr�er ou modifier l'environnement, on utilisera export avec sh ou
setenv avec csh. Par exemple :
sh:
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:.
csh:
setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:.
Les programmes C peuvent utiliser la fonction setenv() pour modifier
l'environnement. Perl, quand � lui, conserve l'environnement dans le
tableau associatif %ENV, et vous pouvez donc modifier PATH avec :
$ENV{PATH}="/bin"
La commande env est le moyen le plus facile pour conna�tre les vari�
ables de l'environnement courant. Elle peut �galement �tre utilis�e
pour les modifier.
Pour trouver plus d'information sur les commandes d'acc�s �
l'environnement, vous pouvez regarder les pages de manuel de environ,
execl, setenv, le fichier info env, ainsi que la documentation des
shells.
Quand Linux d�marre, le premier processus a �tre lanc� est init. C'est
un processus particulier car il n'a pas de parent. De plus, il s'agit
de l'anc�tre de tous les autres processus. Son environnement restera
celui des autres processus tant qu'ils ne le modifieront pas. La
plupart le modifieront.
Le programme init lance un groupe de processus sp�cifi�s dans le
fichier /etc/inittab. Ces processus travaillent dans un environnement
directement h�rit� de init. Ce sont d'habitude des processus comme
getty, le programme qui �crit 'login:' � l'�cran. Si vous lancez une
connexion PPP ici, vous devez savoir que vous travaillez avec
l'environnement de init. L'initialisation du syst�me est souvent
effectu�e par un script lanc� � cet endroit. Dans le cas de la Debian
1.3, il s'agit de /etc/init.d/rc qui est charg� de lancer � son tour,
les scripts d'initialisation.
Le syst�me comprend plusieurs d�mons qui peuvent ou non utiliser
l'environnement par d�faut. La plupart de ceux-ci sont lanc� par les
scripts d'initialisation et poss�dent donc l'environnement de init.
Quand un utilisateur se connecte, l'environnement est modifi� par les
param�tres contenus dans les programmes, les scripts d'initialisation
communs � tous, et ceux sp�cifiques � l'utilisateur. C'est assez
compliqu� et la situation n'est pas compl�tement satisfaisante. En
effet, le comportement est totalement diff�rent suivant que
l'utilisateur se connecte � partir du terminal texte, de XDM ou du
r�seau.
44.. iinniitt
init est le processus parent de tous les autres processus du syst�me.
Ceux-ci h�ritent de son environnement et m�me de sa variable PATH dans
le rare cas o� aucun autre PATH n'est indiqu�.
Le PATH de init est fix� dans le code source du programme. Il s'agit
de :
/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin
Notez qu'il ne contient pas le r�pertoire /usr/local/bin.
Tous les programmes qui sont lanc�s � partir de /etc/inittab
travaillent avec l'environnement de init, et en particulier les
scripts d'initialisation contenus dans /etc/init.d (dans le cas de la
Debian 1.3).
Tout ce qui est lanc� par les scripts d'initialisation poss�de par
d�faut l'environnement de init. Par exemple, syslogd, kerneld, pppd
(lorsqu'il est lanc� au d�marrage), gpm, et ce qui est le plus
important, lpd et inetd poss�dent l'environnement de init et ne le
modifient pas.
Un certain nombre de programmes sont lanc�s par les scripts de
d�marrage mais avec une variable PATH explicitement fix�e dans le
script. Les exemples de tels programmes sont atd, sendmail, apache et
squid.
D'autre programmes, par exemple cron, sont lanc�s par les scripts mais
modifient totalement la variable PATH.
55.. CCoonnnneexxiioonn
Sur un terminal texte, il y a le programme getty qui attend le login
de l'utilisateur. Il est charg� d'�crire 'login:' et quelques autres
messages. Il travaille avec l'environnement de init. Lorsque
l'utilisateur commence � se connecter au moyen de getty, ce dernier
invoque le programme login. Celui-ci installe alors l'environnement
utilisateur et lance le shell.
Le programme login fixe le PATH comme d�fini dans le fichier
/usr/include/paths.h.
Il s'agit, pour les utilisateurs normaux (_PATH_DEFPATH) de :
/usr/local/bin:/usr/bin:/bin:.
Et pour root (_PATH_DEFPATH_ROOT) de :
/sbin:/bin:/usr/sbin:/usr/bin
Le PATH des utilisateurs normaux ne contient aucun r�pertoires sbin.
Cependant, il contient le r�pertoire courant '.', qui est consid�r�
comme dangereux pour l'utilisateur root. M�me /usr/local/bin n'est pas
disponible pour root.
Le PATH obtenu lors du login est souvent modifi� par l'initialisation
du shell. Cependant, il est possible d'utiliser d'autres programmes
que des shells dans /etc/passwd. Par exemple, j'utilise la ligne
suivante pour lancer PPP quand je me connecte avec le nom
d'utilisateur etu-ppp. Dans ce cas, pppd poss�de exactement le PATH du
login.
etu-ppp:viYabVlxPwzDl:1000:1000:Esa Turtiainen, PPP:/:/usr/sbin/pppd
66.. SShheellllss
Les processus utilisateurs sont souvent des processus fils du shell
indiqu� pour cet utilisateur dans le fichier /etc/passwd. Les
fichiers d'initialisation de ces shells modifient souvent la variable
PATH.
Lors de la connexion, le nom du shell est pr�c�d� d'un '-'. Par
exemple, dans le cas de bash, on aura -bash. Cela indique au shell
qu'il est en pr�sence d'un login shell et qu'il doit dans ce cas
ex�cuter les fichiers d'initialisation sp�cifiques � la connexion.
Dans le cas contraire, on aura une initialisation plus l�g�re. De
plus, le shell d�termine s'il est interactif ou non, c'est � dire si
les commandes viennent d'un terminal (tty) ou d'un fichier. Cela
modifie �galement l'importance de l'initialisation si bien qu'un shell
non interactif et qui n'est pas lanc� avec une connexion effectue
vraiment tr�s peu d'initialisation (bash n'ex�cute aucune
initialisation dans ce cas l�).
66..11.. bbaasshh
Pour un login shell normal, bash parcourt le fichier /etc/profile,
commun � tous, o� les variables d'environnement, dont PATH, peuvent
�tre fix�es pour les utilisateurs de bash. Cependant, ce fichier n'est
pas relu lorsque le syst�me se trouve face � un shell non interactif.
Le cas le plus important est rsh, o� la commande est ex�cut�e sur la
machine voisine : le fichier /etc/profile n'est pas lanc� et le PATH
provient du d�mon de rsh.
bash accepte les arguments -login et -i qui sont utilis�s pour obtenir
respectivement un login shell et/ou un shell interactif.
L'utilisateur peut red�finir les param�tres contenus dans /etc/profile
en cr�ant un fichier ~/.bash_profile, ~/.bash_login ou ~/.profile. Il
faut noter que seul le premier fichier sera ex�cut� m�me si cela
diff�re des habitudes de csh. En particulier, ~/.bash_login ne sera
pas forcement ex�cut� pour un login shell, car si ~/.bash_profile
existe, ce dernier sera prioritaire.
Si bash est lanc� par sh (qui est un lien symbolique sur bash), il se
comporte comme le Bourne shell original : il ne parcourt que les
fichiers /etc/profile et ~/.profile et uniquement dans le cas d'un
login shell.
66..22.. ttccsshh
Pour un login shell, tcsh ex�cute dans l'ordre les fichiers suivants :
� /etc/csh.cshrc
� /etc/csh.login
� ~/.tcshrc
� ~/.cshrc (si ~/.tcshrc n'existe pas)
� ~/.history
� ~/.login
� ~/.cshdirs
AAtttteennttiioonn.. tcsh peut �tre compil� pour ex�cuter les scripts de
connexion (login) avant les scripts cshrc.
Les shells non interactifs n'ex�cutent que les scripts *cshrc. Les
scripts *login peuvent �tre utilis�s pour ne fixer le PATH que lors
d'une connexion.
77.. MMooddiiffiieerr ll''iiddeennttiitt�� ddee ll''uuttiilliissaatteeuurr
77..11.. ssuu
La commande su sert � indiquer la nouvelle identit� � utiliser (sous
r�serve de conna�tre le mot de passe), root �tant la valeur par
d�faut.
Normalement, su lance un sous-shell avec la nouvelle identit�. Avec
l'argument '-' (plus r�cemment -l ou --login), su lance le shell comme
un login shell. Cependant, il n'utilise pas le programme login pour
cela mais encore un autre PATH int�gr� au programme pour simuler le
login (termes employ�s dans le code source). Il s'agit de :
pour les utilisateurs normaux :
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:.
pour l'utilisateur root :
/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin
su r�alise �galement quelques changements mineurs dans l'environ�
nement.
77..22.. ssuuddoo
Il y a un groupe de commandes qui permettent une utilisation plus s�r
des commandes du super utilisateur. Elles permettent un meilleur suivi
(au sens o� l'on garde une trace de chaque ex�cution - NdT), des
restrictions sur les utilisateurs et utilisent des mots de passe
individuels. La plus utilis�e est s�rement sudo.
$ sudo env
Cette commande ex�cute env en tant que super utilisateur (si sudo est
configur� pour le permettre).
La commande sudo a encore une autre approche en ce qui concerne la
gestion du PATH. Elle modifie les r�pertoires o� chercher la commande
� ex�cuter pour que le r�pertoire courant soit toujours le dernier.
Cependant, elle ne modifie pas la variable PATH, seulement quelques
variables comme SUDO_USER.
88.. SSeerrvveeuurrss
La majorit� des serveurs ne devrait pas lancer n'importe quelle sorte
de processus. Pour des raisons de s�curit�, leur PATH doit donc �tre
minimal.
La plus grosse exception est l'ensemble des services qui autorisent
une connexion sur le syst�me � partir du r�seau. Cette section d�crit
comment se trouve l'environnement dans ces cas pr�cis. En effet, une
commande ex�cut� � distance avec rsh aura un PATH diff�rent d'une
commande ex�cut� avec ssh. De la m�me fa�on, une connexion � l'aide de
rlogin, telnet ou ssh est diff�rente.
88..11.. iinneettdd
La plupart des serveurs ne poss�dent pas de processus charg�
d'attendre en permanence l'arriv�e d'une requ�te. Ce travail est
laiss� � un super serveur (Internet super server), appel� inetd. Le
programme inetd est � l'�coute permanente du r�seau et lance le
serveur appropri� en fonction du port sur lequel arrive la requ�te.
Son comportement est d�fini dans le fichier /etc/inetd.conf.
inetd est d�marr� par les scripts de d�marrage du syst�me. Il h�rite
donc du PATH de init. Il ne le modifie pas et tous les serveurs
lanc�s par inetd poss�dent donc le PATH de init. Un exemple de tel
serveur est imapd, le serveur du protocole IMAP.
D'autre exemples de processus lanc�s par inetd sont telnetd, rlogind,
talkd, ftp, popd, certains serveurs http, etc...
Souvent, l'utilisation de inetd est compliqu�e par l'utilisation du
programme tcpd, charg� de lancer le v�ritable serveur. C'est un
programme qui effectue quelques v�rifications du point de vue s�curit�
avant de lancer le v�ritable serveur. Il ne touche pas au PATH
(information non v�rifi�e).
88..22.. rrsshh
Le d�mon de rsh utilise le PATH d�fini par _PATH_DEFPATH
(/usr/include/path.h), c'est � dire, le m�me que celui utilis� par le
programme login pour connecter les utilisateurs normaux.
L'utilisateur root obtiendra le m�me PATH que les autres.
En r�alit�, rshd ex�cute la commande d�sir�e en se servant de la
commande suivante :
shell -c ligne_de_commande
O� shell n'est pas un login shell. Il est pr�f�rable que tous les
shells mentionn�s dans /etc/passwd prennent en compte l'option -c pour
pouvoir leur envoyer ce genre de ligne de commande.
88..33.. rrllooggiinn
rlogin invoque login pour effectuer la proc�dure de connexion. Si
vous vous connectez avec rlogin, vous aurez le m�me PATH qu'avec
login. La plupart des autres fa�ons de se connecter � un ordinateur
sous Linux n'utilisent pas login. Notez la diff�rence avec rsh.
La commande de login utilis�e est de la forme :
login -p -h nom_de_l_hote nom_d_utilisateur
L'option -p conserve l'environnement � l'exception des variables HOME,
PATH, SHELL, TERM, MAIL et LOGNAME. L'option -h indique le nom de
l'ordinateur sur lequel doit se faire la connexion.
88..44.. tteellnneett
Le programme telnet est similaire � rlogin : il utilise le programme
login et la ligne de commande utilis�e est de la m�me forme.
88..55.. sssshh
ssh poss�de sa propre variable PATH, � laquelle il ajoute le
r�pertoire o� se trouve ssh. Cela implique souvent que le r�pertoire
/usr/bin se retrouve en double :
/usr/local/bin:/usr/bin:/bin:.:/usr/bin
La variable PATH ne contient pas /usr/bin/X11 et le shell invoqu� par
ssh n'est pas un login shell. Ainsi, la commande
ssh hote_distant xterm
ne marchera pas et rien de ce qui est contenu dans /etc/profile ou
/etc/csh.cshrc ne pourra changer cela. Vous devrez toujours utiliser
des chemins absolus, par exemple /usr/bin/X11/xterm.
ssh cherche des variables d'environnement de la forme VARIABLE=VALEUR
dans le fichier /etc/environment. Malheureusement, cela provoque des
probl�mes avec XFree86.
99.. XXFFrreeee8866
99..11.. XXDDMM
XDM est la mani�re la plus courante pour se connecter � partir d'un
terminal graphique. M�me s'il ressemble � login, il se comporte, en
interne, d'une mani�re totalement diff�rente.
Les fichiers de configuration se trouvent dans le r�pertoire
/etc/X11/xdm et sont ex�cut�s pendant les diff�rentes �tapes de la
connexion. Xstartup (et Xstartup_0 pour l'�cran 0) contient les
commandes � ex�cuter juste apr�s la connexion. Ces commandes sont
lanc�s en tant que root.
Le PATH qui est utilis� pour les utilisateurs se trouve dans
/etc/X11/xdm/xdm-config. Ce sont les lignes :
DisplayManager*userPath: /usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
DisplayManager*systemPath: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11
C'est le PATH par d�faut pour les utilisateurs normaux (userPath), et
pour l'utilisateur root (systemPath) respectivement. Il est tr�s
important que le r�pertoire /usr/bin/X11 soit accessible pour les
utilisateurs sous X. En effet, si un utilisateur se connecte � une
autre machine pour lancer une application X, il faut qu'il aie
/usr/bin/X11 dans son PATH car la machine h�te ne saura pas qu'il dis�
pose d'un terminal X.
Apr�s Xstartup, XDM lance /etc/X11/Xsession en tant qu'utilisateur
final. La configuration locale est contenue dans le fichier
/etc/environment qui est parcouru, s'il existe, par Xsession.
Xsession �tant ex�cut� par /bin/sh, /etc/environment doit donc �tre un
script sh. Cela interf�re avec ssh qui suppose que /etc/environment
est un fichier qui ne contient que des lignes de la forme
VARIABLE=VALEUR.
99..22.. xxtteerrmm --llss
Par d�faut, le PATH de toutes les commandes lanc�s � partir des menus
du gestionnaire de fen�tre est celui h�rit� de XDM. Pour en utiliser
un autre, il faut le d�finir explicitement. Pour lancer un terminal X
avec un PATH "normal", on doit utiliser des options sp�ciales. Pour
xterm, l'option -ls (login shell) doit �tre utilis� pour obtenir un
login shell avec le PATH d�fini dans les fichiers d'initialisation du
shell en question.
99..33.. MMeennuuss eett bboouuttoonnss dduu ggeessttiioonnnnaaiirree ddee ffeenn��ttrree
Le gestionnaire de fen�tre h�rite de l'environnement de XDM. Tous les
programmes lanc�s par lui h�ritent donc de cet environnement.
L'environnement du shell de l'utilisateur n'affecte pas les programmes
qui sont lanc�s par les menus ou les boutons. Par exemple, si un
programme est lanc� par un xterm (xterm -ls), il poss�de
l'environnement par d�faut du login shell, par contre s'il est lanc�
par un menu, il aura l'environnement du gestionnaire de fen�tre.
1100.. CCoommmmaannddeess ""�� rreettaarrddeemmeenntt"" ccrroonn eett aatt
1100..11.. ccrroonn
C'est le programme cron qui ex�cute p�riodiquement les commandes
sp�cifi�es dans /etc/crontab et dans les crontabs des utilisateurs. La
Debian 1.3 poss�de en plus un m�canisme pour ex�cuter les commandes de
/etc/cron.daily, /etc/cron.weekly et /etc/cron.monthly, respectivement
tous les jours, toutes les semaines et tous les mois.
cron est lanc� par les scripts de d�marrage mais il change son PATH en
une valeur assez �trange :
/usr/bin:/binn:/sbin:/bin:/usr/sbin:/usr/bin
IILL SS''AAGGIITT SSUURREEMMEENNTT DD''UUNN BBOOGGUUEE DDAANNSS CCRROONN.. Il s'agit en fait du PATH de
init (/usr/bin:/bin) qui est copi� ici, mais sans le 0 terminal
(cha�ne en convention C - NdT)! Ce bogue n'existe pas sur tous les
syst�mes.
Dans la crontab, on peut d�finir un PATH sp�cifique pour l'ex�cution
des commandes. Pour la Debian 1.3, il s'agit de :
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
De cette fa�on, le PATH de crond n'est jamais utilis� dans les pro�
grammes utilisateurs. Tous les scripts de /etc/cron.* obtiennent par
d�faut le PATH de la crontab. Celui ci est utilis� m�me si le pro�
gramme n'est pas ex�cut� en tant que root.
1100..22.. aatt
La commande at est utilis�e pour lancer un programme � une heure
fix�e.
Le programme atd est lanc� avec le PATH de init. Cependant, les
programmes sont toujours lanc�s avec l'environnement utilisateur gr�ce
� sh. Les sp�cificit�s de sh s'appliquent donc ici. Reportez vous au
chapitre sur bash.
1111.. QQuueellqquueess eexxeemmpplleess
1111..11.. mmaaggiiccffiilltteerr
magicfilter est un outil standard permettant de manipuler les fichiers
� destination de l'imprimante. Il analyse le type du fichier �
imprimer et lance un filtre appropri� pour l'imprimer de la meilleure
fa�on. Les scripts utilis�s pour filtrer sont lanc�s par lpd, lui m�me
lanc� par le script /etc/init.d/lpd lanc� par init. Le PATH est donc
identique � celui de init et ne contient donc pas /usr/bin/X11.
Si vous voulez envoyer des fichier PDF (Portable Data Format) �
magicfilter, vous pouvez utiliser /usr/bin/X11/xpdf. Mais vous ne
devez pas oublier d'indiquer le chemin absolu. Sinon, magicfilter ne
trouvera pas xpdf. La plupart des programmes utilis�s avec
magicfilter, ne n�cessitent pas forcement un chemin explicite car ils
se trouvent souvent dans /bin ou /usr/bin.
1111..22.. IImmpprreessssiioonn �� ppaarrttiirr dd''aapppplliiccaattiioonnss XX
Au cas o� vous utilisez la variable d'environnement PRINTER pour
s�lectionner l'imprimante � utiliser, vous devez savoir que dans
certains cas, certaines applications X risquent de ne pas la
conna�tre.
Vous vous souvenez s�rement que si la session X a �t� lanc� par XDM,
le gestionnaire de fen�tre ne se sert pas de vos scripts de login.
Toutes les applications X que vous lancez � partir d'un xterm
poss�dent donc la variable PRINTER. Par contre, la m�me application
lanc�e � partir d'un menu ou d'un bouton ne poss�dera pas cette
variable.
Parfois, la variable PRINTER peut �tre h�rit�e � un niveau encore plus
bas. Par exemple, une application auxiliaire de Netscape pourra
conna�tre votre variable PRINTER m�me si Netscape ne la conna�t pas.
1122.. QQuueessttiioonnss ddee ss��ccuurriitt��
Le m�canisme de PATH est souvent un gros probl�me du point de vue
s�curit�. Utiliser une erreur dans la d�finition du PATH est une
mani�re fr�quente de pirater un syst�me. Il est facile pour un pirate
de fabriquer des chevaux de Troie, s'il arrive � forcer root ou un
autre utilisateur � ex�cuter ses propres programmes.
Une erreur fr�quente par le pass� (?) �tait de laisser le r�pertoire
courant '.' dans le PATH de l'utilisateur root. Un pirate malveillant
peut alors cr�er son propre programme 'ls' dans son r�pertoire.
Ensuite, si root fait :
# cd ~pirate
# ls
il ex�cute le programme du pirate...
De la m�me fa�on, cela s'applique � tous les programmes ex�cut�s par
root. Aucun important d�mon ne devrait ex�cuter quoi que ce soit qui
puisse �tre modifi� par un utilisateur. Dans certains syst�mes,
/usr/local/bin peut contenir des programmes jug�s moins s�r, mais le
r�pertoire est retir� du PATH de root. Cependant, si on sait qu'un
d�mon ex�cute bidule avec 'PATH=/usr/local/bin:...', il est possible
de tromper le d�mon en lui faisant ex�cuter /usr/local/bin/bidule � la
place de /bin/bidule. Dans ce cas, n'importe qui pouvant �crire dans
/usr/local/bin peut s�rement pirater le syst�me.
Il est donc tr�s important de faire attention � l'ordre dans lequel
les r�pertoires sont plac�s dans le PATH. Si /usr/local/bin se trouve
avant /bin, il y a un risque. Alors que s'il se trouve apr�s, il est
impossible de lancer la commande modifi�e /usr/local/bin/bidule � la
place de /bin/bidule.
Sous Linux, vous devez vous souvenir que la recherche dans le PATH est
fa�te dans tous les m�canismes d'appels du syst�me d'exploitation.
N'importe o�, o� le chemin d'un ex�cutable est donn�, vous pouvez
utiliser le nom de la commande seul qui sera alors cherch�e au moins
dans /bin et /usr/bin, et vraisemblablement dans beaucoup d'autres
endroits.
1133.. CCoommmmeenntt rr��ssoouuddrree lleess pprroobbll��mmeess ??
La commande la plus simple pour avoir acc�s � l'environnement est
/usr/bin/env.
Il est egalement possible d'utiliser le r�pertoire /proc pour trouver
le PATH de n'importe quel programme. Vous devez d'abord conna�tre le
num�ro de processus du programme. Utilisez la commande ps pour
l'obtenir. Par exemple, si xterm est le processus num�ro 1088, vous
pouvez voir son environnement avec :
# more /proc/1088/environ
Cela ne marche pas avec des processus comme xdm. Pour acc�der �
l'environnement d'un processus du syst�me ou d'un autre utilisateur,
vous devez �tre root.
Pour deboguer Netscape, vous pouvez cr�er le script suivant :
$ cat > /tmp/test
#!/bin/sh
/usr/bin/env > /tmp/env
^d
$ chmod +x /tmp/test
Ensuite, arrangez vous pour que votre programme soit appel� � la place
d'une application auxiliaire, par exemple RealAudio (audio/x-pn-
realaudio). Lorsque vous essayerez d'acc�der � un lien RealAudio
(quelque chose comme
http://www.realaudio.com/showcase), Netscape
lancera votre programme factice et sauvera l'environnement dans
/tmp/env.
1144.. MM��tthhooddeess ppoouurr qquuee ttoouuss lleess uuttiilliissaatteeuurrss aaiieenntt llee mm��mmee PPAATTHH
Le r�glage le plus important est � faire dans les fichiers commun
d'initialisation des logins shells : /etc/csh.login pour tcsh et
/etc/profile pour bash.
Ceux qui n'obtiennent pas le bon PATH � partir de ces fichiers sont :
rsh, ssh, les �l�ments des menus du gestionnaire de fen�tres sous X ne
lan�ant pas explicitement de login shell, les commandes lanc�s �
partir de inittab, les travaux de cron, les travaux des d�mons comme
magicfilter (lanc� par lprd), les scripts CGI (WWW), etc...
Si le PATH est fix� dans /etc/csh.cshrc, il sera utilis� si rsh ou ssh
lance des commandes sur une machine distante o� l'utilisateur utilise
tcsh/csh. Par contre, il n'est pas possible de r�gler le PATH si
l'utilisateur utilise bash/sh. Voici une m�thode pour ne garder le
PATH que dans un seul fichier, par exemple /etc/environnement-commun,
dans lequel on �crit :
${EXPORT}PATH${EQ}/bin:/usr/bin:/sbin:/usr/sbin:/usr/bin/X11:/usr/local/bin:/usr/games:.
On peut ensuite l'utiliser � partir de /etc/csh.login (pour tcsh et
csh)
set EQ=" " set EXPORT="setenv "; source /etc/environnement-commun
A partir de /etc/profile (pour bash, mais pas pour le vrai sh)
EQ='=' EXPORT="export " . /etc/environnement-commun
Et � partir de /etc/environment (pour XDM)
EQ='=' EXPORT="export " . /etc/environnement-commun
Cette m�thode marchera la plupart du temps, sauf que ssh se plaindra
des lignes contenues dans /etc/environment (ainsi que des variables EQ
et EXPORT). De plus, rsh n'aura toujours pas le bon PATH s'il passe
par bash.
1155.. RReemmeerrcciieemmeennttss
Une des raisons pour commencer l'�criture de ce document a �t� la
grosse frustration de Ari Mujunen. Juha Takala m'a donn� de pr�cieux
commentaires.