Je l'ai déjà lu dans le manuel mais je ne vois pas la différence ..
su
- change l'ID utilisateur ou devient superutilisateur
Sudo -s [command]
L'option -s
(Shell) exécute le shell spécifié par la variable d'environnement du shell, si celle-ci est définie, ou le shell spécifié dans passwd (5). Si une commande est spécifiée, elle est transmise au shell pour exécution. Sinon, un shell interactif est exécuté.
Sudo -i
disparaît la description dans le manuel
La principale différence entre ces commandes réside dans la manière dont elles restreignent l'accès à leurs fonctions.
su
(ce qui signifie "utilisateur suppléant" ou "utilisateur alternatif") - fait exactement cela, il démarre une autre instance Shell avec les privilèges de l'utilisateur cible. Pour vous assurer que vous avez le droit de le faire, il vous demande le mot de passe de l'utilisateur cible. Donc, pour devenir root, vous devez connaître le mot de passe root. Si plusieurs utilisateurs de votre ordinateur doivent exécuter des commandes en tant que root, ils doivent tous connaître le mot de passe root. Notez que ce sera le même mot de passe. Si vous devez révoquer les autorisations d'administrateur de l'un des utilisateurs, vous devez modifier le mot de passe root et le transmettre uniquement aux personnes qui doivent conserver l'accès - en désordre.
Sudo
(hmm ... quel est le mnémonique? Super-User-DO?) est complètement différent. Il utilise un fichier de configuration (/ etc/sudoers) qui répertorie les utilisateurs autorisés à exécuter des actions spécifiques (commandes d'exécution en tant que root, etc.). Lorsqu'il est appelé, il demande le mot de passe de l'utilisateur qui l'a lancé - pour s'assurer que la personne au terminal est vraiment le même "joe" que celui répertorié dans /etc/sudoers
. Pour révoquer les privilèges d'administrateur d'une personne, il vous suffit de modifier le fichier de configuration (ou de supprimer l'utilisateur d'un groupe répertorié dans cette configuration). Cela se traduit par une gestion beaucoup plus propre des privilèges.
En conséquence, dans de nombreux systèmes basés sur Debian, root
n’a pas de mot de passe défini, c’est-à-dire qu’il est impossible de se connecter directement en tant que root.
De plus, /etc/sudoers
permet de spécifier des options supplémentaires - c’est-à-dire que l’utilisateur X ne peut exécuter que le programme Y, etc.
La combinaison Sudo su
souvent utilisée fonctionne comme suit: first Sudo
vous demande votre mot de passe et, si vous y êtes autorisé, appelle le prochain commande (su
) en tant que super-utilisateur. Étant donné que su
est appelé par root
, vous ne devez pas entrer le mot de passe de l'utilisateur cible. Ainsi, Sudo su
vous permet d’ouvrir un shell en tant qu’autre utilisateur (y compris root), si vous êtes autorisé à accéder au superutilisateur par le fichier /etc/sudoers
.
Sudo
vous permet d'exécuter des commandes dans votre propre compte utilisateur avec les privilèges root. su
vous permet de changer d'utilisateur pour que vous soyez réellement connecté en tant que root.
Sudo -s
exécute un shell avec les privilèges root. Sudo -i
acquiert également l'environnement de l'utilisateur root.
Pour voir la différence entre su
et Sudo -s
, faites cd ~
, puis pwd
après chacun d’eux. Dans le premier cas, vous serez dans le répertoire de base de la racine, car vous êtes la racine. Dans le second cas, vous serez dans votre propre répertoire personnel, car vous êtes vous-même avec les privilèges root.
Il y a plus de discussion sur cette question exacte ici .
Cette réponse est une dupe de ma réponse sur ne dupe de cette question , mettez ici la réponse canonique pour que les gens puissent la trouver!
La principale différence entre Sudo -i
et Sudo -s
est la suivante:
Sudo -i
vous donne l’environnement racine, c’est-à-dire que votre ~/.bashrc
est ignoré.Sudo -s
vous donne l'environnement de l'utilisateur, donc votre ~/.bashrc
est respecté.Voici un exemple, vous pouvez voir que j’ai une application lsl
dans mon répertoire ~/.bin/
qui est accessible via Sudo -s
mais non accessible avec Sudo -i
. Notez également que l'invite de commandes change comme avec Sudo -i
mais pas avec Sudo -s
:
dotancohen@melancholy:~$ ls .bin
lsl
dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl
dotancohen@melancholy:~$ Sudo -i
root@melancholy:~# which lsl
root@melancholy:~# exit
logout
dotancohen@melancholy:~$ Sudo -s
Sourced .bashrc
dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl
dotancohen@melancholy:~$ exit
exit
Bien que Sudo -s
soit pratique pour vous fournir l'environnement avec lequel vous êtes familier, , je recommande l'utilisation de Sudo -i
pour deux raisons:
.bashrc
.su
demande le mot de passe de l'utilisateur "root".
Sudo
vous demande votre propre mot de passe (et vérifie également si vous êtes autorisé à exécuter des commandes en tant qu'utilisateur root, configuré via /etc/sudoers
. Par défaut, tous les comptes d'utilisateurs appartenant aux groupes "admin" ou "Sudo" sont autorisés. ).
Sudo -s
lance un shell en tant que root, mais ne modifie pas votre répertoire de travail. Sudo -i
simule une connexion au compte root: votre répertoire de travail sera /root
et le code racine .profile
sera créé comme si vous vous connectiez.
Dans Ubuntu ou un système apparenté, je ne trouve pas beaucoup d’utilisation pour su
au sens traditionnel du terme superutilisateur. Sudo
gère ce cas beaucoup mieux. Cependant, su
est idéal pour devenir un autre utilisateur dans des situations uniques où la configuration de sudoers serait stupide.
Par exemple, si je répare mon système à partir d'un live CD/USB, je vais souvent monter mon disque dur et les autres éléments nécessaires, ainsi que chroot
dans le système. Dans un tel cas, ma première commande est généralement:
su - myuser # Note the '-'. It means to act as if that user had just logged in.
De cette façon, je ne travaille pas en tant que root, mais en tant qu'utilisateur normal, et j'utilise ensuite Sudo
selon le cas.