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.
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
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
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
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.