web-dev-qa-db-fra.com

que signifie «Sudo» pour root?

J'exécute les commandes suivantes dans Ubuntu 14.04:

root@ubuntu:~# service rpki-ca restart 
stop: Unknown job: rpki-ca
start: Unknown job: rpki-ca
root@ubuntu:~# Sudo service rpki-ca restart 
rpki-ca stop/waiting
rpki-ca start/running
root@ubuntu:~#

Quel est l'effet de Sudo dans la deuxième commande? Pourquoi root a-t-il besoin de Sudo?

5
Xiaowei Liu

Ok, googler ceci, trouver cela réponse U&L , vérifier son historique des révisions et suivre la source citée dans le révision # 1 , cela se trouve être un bug Upstart ; le problème est que lors du passage à root exécutant su le $UPSTART_SESSION La variable d'environnement est reprise de l'environnement précédent au lieu d'être à nouveau définie.

Après m'être beaucoup cogné la tête et googlé, j'ai trouvé un article ( https://unix.stackexchange.com/questions/120050/Sudo-service-vsftpd-returns-unknown-job-vsftpd ) montrant que

Sudo service xxxx start (ou arrêter ou redémarrer)

fonctionne, tandis que

`service xxxx start (dans une session su)

ne marche pas.

Donc, le coupable était clairement l'environnement: si vous allez root avec "su" au lieu de "Sudo su" ou "su -", "service" ne fonctionne pas non plus correctement, car "su" transportera la plupart de votre environnement utilisateur normal à la session racine.

Après quelques tests, j'ai constaté que le coupable est la variable d'environnement UPSTART_SESSION, qui est définie lorsque vous "su", mais pas lorsque vous "Sudo su" ou "su -". Voici quelques résultats de tests:

-- ne marche pas

jsveiga@Dell:~$ su
Password:
root@Dell:/home/jsveiga# service smbd restart
stop: Unknown job: smbd
start: Unknown job: smbd

- fonctionne même à partir d'une session su

root@Dell:/home/jsveiga# Sudo service smbd restart
smbd stop/waiting
smbd start/running, process 3823

-- travaux

root@Dell:/home/jsveiga# exit
jsveiga@Dell:~$ Sudo su
root@Dell:/home/jsveiga# service smbd restart
smbd stop/waiting
smbd start/running, process 3862

-- travaux

root@Dell:/home/jsveiga# exit
jsveiga@Dell:~$ su -
Password:
root@Dell:~# service smbd restart
smbd stop/waiting
smbd start/running, process 3905

- aller su puis désactiver les travaux UPSTART_SESSION

root@Dell:/home/jsveiga# exit
jsveiga@Dell:~$ su
Password:
root@Dell:/home/jsveiga# service smbd restart
stop: Unknown job: smbd
start: Unknown job: smbd
root@Dell:/home/jsveiga# unset UPSTART_SESSION
root@Dell:/home/jsveiga# service smbd restart
smbd stop/waiting
smbd start/running, process 4244

Ainsi, les scripts de démarrage/d'arrêt échouent en quelque sorte simplement par la présence de UPSTART_SESSION variable d'environnement.

BR, Joao S Veiga

Pour résoudre ce problème, désactivez simplement $UPSTART_SESSION:

unset UPSTART_SESSION

ou basculez vers root par d'autres moyens, comme su -, Sudo su ou Sudo -i.

3
kos

Dans ce contexte, cela ne signifie rien et devrait être supprimé. Sans spécifier un autre utilisateur, Sudo essaie de devenir root, et donc si vous êtes déjà root, c'est un no-op, autre que la création d'un processus supplémentaire (pour Sudo lui-même) qui occupe certaines ressources jusqu'à ce que la commande qu'il exécute se termine.

0
psusi