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


9

J'utilise Ubuntu 11.04. Je veux exécuter un script qui vérifie un processus en cours et arrête le système lorsque ce processus se termine. Pour ce faire, l'utilisateur requiert un accès d'arrêt afin que le script puisse être exécuté sans avoir besoin d'un mot de passe.

J'ai fait référence à 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 les privilèges root sont requis lorsque j'exécute l'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 à saisir manuellement le mot de passe?

Merci.


1
Pourriez-vous publier votre sudoersfichier réel et entier , s'il vous plaît?
enzotib

Réponses:


6

Vous pouvez arrêter ou redémarrer en utilisant HAL ou ConsoleKit 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 (nouvelles versions 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

7

Je l'ai fait comme dans cette réponse, fonctionne parfaitement pour moi. Peut-être que votre approche manque la visudopartie?

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 sécurisez-le (CTRL + x).

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

wget UrlOfTheFileYouWantToDownload ; sudo halt

1

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 en tant qu'utilisateur qui l'exécute. Étant donné que l'arrêt appartient à root, cela devrait vous permettre d'arrêter sans sudo.

chmod u+s /sbin/shutdown

Il y a cependant des implications en matière de sécurité, car n'importe qui peut alors exécuter l'arrêt. http://en.wikipedia.org/wiki/Setuid


En général, il n'est pas conseillé de modifier des fichiers ou des métadonnées de fichiers, installés à partir de packages, autres que les fichiers de configuration dans /etc.
enzotib

Hmm ... c'est vrai! Mais quelle est alors la voie officielle? Jouer avec polkit? Pas si bien non plus ...
turbo

sudoest la bonne façon, à mon avis, mais malheureusement, l'utilisateur ne donne pas la chance de voir son sudoersfichier et ce qui ne va pas.
enzotib

C'est la seule chose qui a fonctionné pour moi.
Mark Stewart

0

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 éteindre votre ordinateur, vous devez simplement exécuter le script avec sudo. Cela vous demandera votre mot de passe lorsque vous exécuterez le script, mais le script lui-même est alors libre d'arrêter le système sans autre intervention.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.