Pourquoi sudo -s est meilleur que sudo su?

28

J'ai vu de nombreux commentaires ici dans Ask Ubuntu concernant la préférence d'utilisation sudo -splutôt que sudo su.

Pour moi, ces deux commandes font exactement la même chose. Mais pourquoi est-ce sudo -scensé être mieux?

fitojb
la source
1
Je pense sudo -iou sudo suvaut mieux que sudo -spour les raisons mentionnées ici: ubuntuforums.org/showpost.php?p=6188826&postcount=4 Aussi: il s'agit d'un doublon possible de superuser.com/questions/29/…
organisez
Je pense que cette question devrait être déplacée vers unix.stackexchange.com
igi

Réponses:

26

Je pense que ce sudo -sn'est pas "mieux", c'est juste différent.

sudo -s

conserve votre répertoire $ HOME, donc lorsque vous démarrez des programmes, ils utiliseront vos fichiers de configuration (et non root), etc. Inconvénient: ils peuvent également changer la propriété de vos fichiers dans le répertoire $ HOME, un exemple typique est le .Xauthorityfichier, mais je n'ont jamais rencontré de problème avec ça.

sudo su ou sudo -i

les programmes utiliseront le répertoire personnel de la racine et ses fichiers de configuration. Cela peut être plus intuitif, mais cela signifie également qu'il n'utilisera aucune configuration que vous auriez définie pour vous-même (alias, historique de bash, ...).

organiser
la source
1
D'accord, je comprends maintenant la différence. Merci!
fitojb
1
"sudo su" n'est pas équivalent à "sudo -i". "sudo -i" est équivalent à "sudo su -" mais "sudo su -" conserve le répertoire de travail actuel tandis que "sudo -i" vous emmène dans le répertoire racine
Gregory Pakosz
13

Parce sudo -sque ne changera pas vos variables d'environnement, en particulier $HOME, qui resteront HOME=/home/USER. Si vous utilisez, sudo sucela changera, HOME=/rootce qui peut avoir des effets secondaires négatifs lorsque les programmes que vous démarrez tentent d'accéder au répertoire personnel de votre utilisateur.

Donc, fondamentalement, c'est comme sudovs gksudolors de l'exécution de programmes graphiques.

htorque
la source
5

Mis à part les différences déjà mentionnées avec les variables d'environnement, je trouve sudo sustupide et inutile parce que vous demandez sudoà exécuter en sutant que root et lui demandez d'exécuter un shell en tant que root. Pourquoi demander à un programme de demander à un programme de vous donner un shell racine, alors que vous pouvez simplement demander au premier programme de vous donner ce shell? Est-ce important dans un sens pratique? Non, je suis juste pédant.

psusi
la source
Vous avez raison, c'est un peu redondant.
fitojb
Eh bien, pas complètement: si vous utilisez sudo supour être root, oui, allez-y sudo -i, par exemple. Mais elle aide quand vous voulez devenir un autre utilisateur: sudo su - myuser.
hggdh
2
Il y a une autre différence: sudo -ichangera de /rootrépertoire et sudo surestera dans le répertoire que vous êtes.
laurent
1
@hggdh, sudo -u myuser.
psusi
3

Je ne serais pas d'accord avec d'autres réponses lorsque l'on considère les cas où vous souhaitez vous connecter en tant qu'utilisateur n'ayant pas de shell. C'est un cas très courant avec des utilisateurs affectés à des services.

L'utilisation de "sudo su" démarrera le shell spécifié par l'utilisateur. Cependant, dans le cas d'un utilisateur affecté au processus serveur, le shell est / usr / bin / false et la journalisation échouera. Au lieu de cela, vous devez entrer en tant que:

sudo -sHu <server-user>

qui vous connectera et cd à son chemin d'accueil, même si l'utilisateur n'a pas de shell assigné

SystematicFrank
la source