Que fait réellement «sudo -s»?

26

J'utilise ubuntu 10.04.

Je remarque qu'après avoir exécuté " sudo -s " dans le terminal, l'invite est passée de

" XXX @ XXX "

à

" root @ XXX ",

semble avoir changé en privilège root.

Mais quand je vérifie la documentation de la commande "sudo" ici , cela explique une autre histoire de "sudo -s", quelqu'un peut-il m'expliquer ce que fait " sudo -s " exactement?

Leem
la source
6
Vous devriez demander ceci sur askubuntu.com
7
Pourquoi askubuntu.com? sudon'est pas spécifique à Ubuntu ...
Dave Sherohman
doublon possible de la différence entre les commandes "su -s" et "sudo -s"
Linker3000

Réponses:

9

Les deux ne sont pas vraiment incompatibles - la sudocommande change toujours d'utilisateur, soit en root, soit en l'utilisateur que vous spécifiez avec le -ucommutateur. La seule -schose à faire est de fournir un raccourci pour démarrer un shell en tant qu'utilisateur. C'est vraiment équivalent à:

sudo $SHELL

sauf qu'il se repliera probablement sur /bin/shou quelque chose s'il SHELLn'est pas défini.

TomH
la source
6

sudo -sexécute le shell spécifié dans votre $SHELLvariable d'environnement en tant que superutilisateur / root. Vous pouvez spécifier un autre utilisateur à l'aide de -u.

La $SHELLvariable d'environnement contient le chemin d'accès au shell de connexion par défaut de l'utilisateur. Le paramètre réel du programme shell par défaut se trouve généralement dans etc/passwd. Selon ce que vous avez fait dans votre session actuelle, la variable $ SHELL peut ne pas contenir le programme shell que vous utilisez actuellement. Si vous vous connectez automatiquement avec zsh par exemple, mais que vous invoquez ensuite bash, $ SHELL ne changera pas de /bin/zsh.

Affichez le programme utilisateur et shell actuel: echo $(whoami) is logged in and shell is $0

  • whoami imprime le nom d'utilisateur sous lequel l'utilisateur travaille.
  • $0 contient le nom / chemin du programme en cours d'exécution (programme shell dans ce cas).
RKelley
la source
3

Du manuel:

sudo permet à un utilisateur autorisé d'exécuter une commande en tant que superutilisateur ou autre utilisateur, comme spécifié dans le fichier sudoers.

-s Shell, exécute le shell spécifié par la variable d'environnement SHELL s'il est défini ou le shell comme spécifié dans passwd (5).

Plus sérieusement, les sudo -s exécutent une variable d'environnement shell. Puisque vous n'avez ajouté aucune variable, il s'exécute comme spécifié dans passwd, et vous connectez donc en tant que root.

Anarko_Bizounours
la source
1
Il n'est pas évident d'après le manuel que si vous ne fournissez pas d'utilisateur, il est par défaut root. Vous devriez lire la description de l' -uoption pour l'apprendre. Mais pour quelqu'un qui ne connaît pas sudo, ils ne sauraient pas regarder -u.
wisbucky
0

Il semble qu'il crée une autre instance du shell au-dessus du shell actuel, mais avec les privilèges root. Je parie qu'après avoir fait sudo -ssi vous tapez exit, vous reviendrez au shell d'origine.

Noah Duncan
la source
-1

sudo -s vous permet d'exécuter une commande pour laquelle vous êtes pré-autorisé [voir / etc / sudoers], éventuellement en vous demandant de confirmer votre ID actuel.

Eric Herlitz
la source