web-dev-qa-db-fra.com

Comment donner des privilèges d'arrêt à un utilisateur?

J'utilise Ubuntu 11.04. Je veux exécuter un script qui recherche un processus en cours et arrête le système à la fin de ce processus. Pour ce faire, l'utilisateur doit disposer d'un accès à l'arrêt afin que le script puisse être exécuté sans qu'un mot de passe ne soit nécessaire.

J'ai mentionné cette page et ajouté le texte dans mon fichier sudoers. Cependant, il me demande toujours le mot de passe chaque fois que j'exécute Sudo shutdown -h now. De plus, je reçois une erreur indiquant que des privilèges root sont requis lorsque j'exécute un arrêt sans Sudo.

Mon fichier sudoers ressemble à ceci.

# Cmnd alias specification
Cmnd_Alias      SHUTDOWN = /sbin/shutdown

# User privilege specification
root    ALL=(ALL:ALL) ALL
myusername    ALL = NOPASSWD: SHUTDOWN

Comment puis-je autoriser un utilisateur à exécuter la commande d'arrêt sans avoir à entrer manuellement le mot de passe?

Merci.

9
Amey Jah

Vous pouvez arrêter ou redémarrer en utilisant HAL ou ConsoleKit, ce qui ne vous demandera pas d'entrer un nom d'utilisateur/mot de passe:

HAL (anciennes versions d'Ubuntu):

dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown

ConsoleKit (versions plus récentes d'Ubuntu, testées sur Ubuntu 11.04):

dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
6
Alin Andrei

Je l'ai fait comme dans this answer, fonctionne parfaitement pour moi. Peut-être que votre approche passe à côté de la partie visudo?

Ouvrez une ligne de commande et tapez:

Sudo visudo 

Dans le fichier qui s'ouvre, ajoutez la ligne suivante à la fin:

yourusername ALL=NOPASSWD: /sbin/halt

Quittez ensuite l'éditeur et protégez-le (CTRL + x).

Vous pouvez maintenant éteindre votre ordinateur à partir de la ligne de commande, par exemple. après avoir téléchargé quelque chose:

wget UrlOfTheFileYouWantToDownload ; Sudo halt
7
Christoph

Il y a quelque temps, je l'ai fait en définissant le suid (Set User ID). Cela fait que le programme s'exécute en tant que propriétaire du fichier et non pas l'utilisateur qui l'exécute. Étant donné que shutdown appartient à root, cela devrait vous permettre de vous arrêter sans Sudo.

chmod u+s /sbin/shutdown

Il y a cependant des implications en termes de sécurité puisque tout le monde peut alors exécuter un arrêt. http://en.wikipedia.org/wiki/Setuid

1
turbo

Il semble que vous souhaitiez exécuter le script lui-même en tant que root. Si vous souhaitez exécuter un script qui attend que quelque chose se termine, puis éteignez votre ordinateur, exécutez simplement le script avec Sudo. Cela vous demandera votre mot de passe lorsque vous exécuterez le script, mais le script lui-même est libre d'arrêter le système sans autre intervention.

0