web-dev-qa-db-fra.com

Que fait la commande 'Sudo -s' et comment est-elle utilisée dans cet exemple?

J'ai le doute suivant. Dans un tutoriel relatif à l’installation du logiciel que je suis, dites que je dois exécuter les commandes suivantes (je le fais dans un shell ssh , donc cette liste d'étapes se termine par la commande exit):

Sudo -s
apt-get update
apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen
exit

Mes doutes sont:

Que fait exactement le paramètre -s après la commande Sudo?

En cherchant sur le web, j'ai trouvé que:

- s [commande] 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 la base de données de mot de passe. Si une commande est spécifiée, elle est transmise au shell pour être exécutée via l'option -c du shell. Si aucune commande n'est spécifiée, un shell interactif est exécuté

Il me semble que le Sudo -s exécute une commande à l'aide de la variable d'environnement du shell.

Mais ce n'est pas clair pour moi: dans ce cas, quelle est la commande exécutée avec la variable d'environnement? (il n’exécute que Sudo -s et pas Sudo -s [command]).

8
AndreaNobili

La réponse simple est que cela vous donne un shell racine. C'est pour ça que c'est utilisé ici. Il y a un bon comparaison technique entre les méthodes su, Sudo -i, Sudo -s et Sudo su sur Unix.SE mais ce n'est vraiment pas pertinent ici. Le code aurait pu utiliser n'importe lequel et aurait fonctionné.

La pépite d’aide signifie quelques choses:

  • Il recherche une commande dans la variable d'environnement $Shell. Si vous exécutez echo $Shell, vous verrez probablement /bin/bash. Cela signifie que vous obtiendrez une instance racine de Bash. Je suis sûr que si vous étiez dans zsh cela signifierait que vous obtenez une instance racine de zsh.

  • Si $Shell est vide, il retourne au shell par défaut défini dans /etc/passwd pour cet utilisateur.

  • Si vous fournissez une commande (par exemple, Sudo -s whoami), elle est en cours d'exécution: Sudo /bin/bash -c "whoami"

  • Si vous ne transmettez pas une commande, elle ne transmettra pas l'argument -c et vous obtiendrez simplement un shell interactif.

J'ai utilisé la phrase "racine" plusieurs fois. Par défaut Sudo consiste à exécuter des tâches en tant que root, mais Sudo (et su) peut être exécuté de la même manière que les autres utilisateurs (si vous avez la permission de le faire). Je ne fais que dire cela aux pédants qui vont crier que Sudo -s -u $USER ne leur donne pas de racine Shell, comme je l'avais promis -s ci-dessus.


Et dans mes opinions les plus humbles , il est vraiment ridicule de devenir root pour seulement deux commandes, sans compter que cela pourrait laisser un utilisateur exécuter accidentellement d'autres commandes en tant que racine. Si vous voulez ou avez besoin d’exécuter quelque chose en tant que root, commencez simplement la commande par Sudo:

Sudo apt-get update
Sudo apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen

Je serais douteux d'un didacticiel qui suggérerait un shell racine, sauf dans les cas où vous avez des tas de commandes à exécuter ... Et même dans ce cas, il y a un script.

7
Oli