Comment utilisez-vous sudo pour exécuter une commande en tant qu'utilisateur root réel sur Ubuntu? Je pensais à l'origine que c'était le comportement par défaut de sudo, jusqu'à ce que je lance:
myuser@localhost:~$ sudo echo `whoami`
myuser
myuser@localhost:~$ sudo -u root echo `whoami`
myuser
Cependant, c'est le type de comportement que je veux, mais uniquement sur une seule ligne:
myuser@localhost:~$ sudo su -
root@localhost:~# echo `whoami`
root
whoami
? Dites simplement sudo whoami .. retourne rootRéponses:
En fait , il ne les exécuter en tant que root. Mais, ce qui vous arrive, c'est que les ticks arrière sont évalués avant les
sudo
exécutions, car ils sont nécessaires pour évaluer la commande. Plus directement, pourquoi pas seulement:Vos
whoami
ticks en arrière sont en fait évalués dans un sous-shell en tant qu'utilisateur actuel, c'est pourquoi vous voyez ce que vous faites.la source
0
(zéro), qui est exactement ce que les gens appellent "root". (Vous auriez eu raison si vous aviezsudo
étendu ses capacités sans vraiment changer l'UID. Mais ce n'est pas ce qu'il fait.)sudo
cas. Mais à la lecture de la réponse xyr, cela ne semble pas avoir été le cas.Le sous-shell (
whoami
) est exécuté en premier, comme vous, et le résultat (myuser
) est placé dans lasudo
commande; ce quisudo
voit estecho myuser
. Considérez-le comme un raccourci pour:la source
Il semble y avoir des conjectures ici…
Les backticks font évidemment ce que les autres ont expliqué, se développant
whoami
avant d'invoquer «sudo», et laissant les backticks désactivés retournent «root», comme prévu.Mais il est utile de comprendre ce qui se passe réellement avec sudo (8). J'ai donc regardé la page de manuel!
"Les uid et gid réels et efficaces sont définis pour correspondre à ceux de l'utilisateur cible…"
Il apparaît donc que le comportement observé n'a rien à voir avec la différence entre l'ID utilisateur effectif et réel.
Il est également illustratif de faire "sudo printenv" et de comparer simplement "printenv", ce qui m'a en fait un peu surpris. Il montre que [i] certaines [/ i] variables exportées sont disponibles et d'autres ne le sont pas: il signale HOME, PATH, PS1, SHELL, TERM et EDITOR de l'utilisateur appelant, mais pas d'autres comme MANPATH, CVSROOT, LD_LIBRARY_PATH ou ENV. Cela semble un peu étrange, car cela pourrait entraîner un comportement différent des programmes qu'ils ne le font en tant qu'utilisateur d'origine ou en tant que root.
la source
sudo vous permet d'exécuter n'importe quelle commande avec des privilèges root, mais pas en tant qu'utilisateur root. La raison pour laquelle cela est utile est qu'avec cette configuration, plusieurs personnes peuvent avoir des droits root mais toute la journalisation et ainsi de suite indique toujours qui a effectué les modifications.
Cette configuration est meilleure que le partage de mots de passe root. En tant que tel, il a remplacé les utilisateurs root sur de nombreuses distributions, y compris Ubuntu.
sudo su en revanche fait de vous les utilisateurs root et ne devrait donc pas vraiment être utilisé.
Cette différence explique également votre comportement observé (correct).
la source
Sudo accorde temporairement qui que vous soyez (étant donné que vous êtes autorisé à sudo en premier lieu) des privilèges de niveau racine.
Pour être root, vous devez vous connecter en tant que root qui est bloqué par défaut dans Ubuntu.
Vous devez être prudent avec cela, sudo n'est pas root. Si vous voulez montrer que Fred exécute quelque chose en tant que sudo, che3d les variables d'environnement SUDO, SUDO_COMMAND pourrait être le plus utile.
la source