Wie kann man einem Benutzer Abschaltberechtigungen erteilen?

9

Ich benutze Ubuntu 11.04. Ich möchte ein Skript ausführen, das nach einem laufenden Prozess sucht und das System herunterfährt, wenn dieser Prozess endet. Zu diesem Zweck benötigt der Benutzer einen Zugriff zum Herunterfahren, damit das Skript ausgeführt werden kann, ohne dass ein Kennwort erforderlich ist.

Ich habe auf diese Seite verwiesen und den Text in meine Sudoers-Datei eingefügt. Es fragt mich jedoch immer noch nach dem Passwort, wenn ich es ausführe sudo shutdown -h now. Außerdem wird eine Fehlermeldung angezeigt, dass Root-Berechtigungen erforderlich sind, wenn ich das Herunterfahren ohne sudo ausführe.

Meine Sudoers-Datei sieht ungefähr so ​​aus.

# Cmnd alias specification
Cmnd_Alias      SHUTDOWN = /sbin/shutdown

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

Wie kann ich einem Benutzer die Berechtigung erteilen, den Befehl zum Herunterfahren auszuführen, ohne das Kennwort manuell eingeben zu müssen?

Vielen Dank.

Amey Jah
quelle
1
Könnten Sie sudoersbitte Ihre echte und ganze Datei posten ?
Enzotib

Antworten:

6

Sie können mit HAL oder ConsoleKit herunterfahren oder neu starten, ohne dass Sie einen Benutzernamen / ein Passwort eingeben müssen:

HAL (ältere Ubuntu-Versionen):

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

ConsoleKit (neuere Ubuntu-Versionen, getestet unter Ubuntu 11.04):

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

Ich habe es wie in dieser Antwort gemacht, funktioniert einwandfrei für mich. Vielleicht fehlt Ihrem Ansatz der visudoTeil?

Öffnen Sie eine Befehlszeile und geben Sie Folgendes ein:

sudo visudo 

Fügen Sie in der sich öffnenden Datei am Ende die folgende Zeile hinzu:

yourusername ALL=NOPASSWD: /sbin/halt

Beenden Sie dann den Editor und sichern Sie ihn (STRG + x).

Jetzt können Sie Ihren Computer über die Befehlszeile herunterfahren, z. B. nachdem Sie etwas heruntergeladen haben:

wget UrlOfTheFileYouWantToDownload ; sudo halt
Christoph
quelle
1

Vor einiger Zeit habe ich dies getan, indem ich die suid (Set User ID) eingestellt habe. Dadurch wird das Programm als Eigentümer der Datei ausgeführt, nicht als Benutzer, der sie ausführt. Da das Herunterfahren im Besitz von root ist, sollten Sie das Herunterfahren ohne sudo durchführen können.

chmod u+s /sbin/shutdown

Es gibt jedoch Auswirkungen auf die Sicherheit, da jeder das Herunterfahren ausführen kann. http://en.wikipedia.org/wiki/Setuid

Turbo
quelle
Im Allgemeinen ist es nicht ratsam, Dateien oder Metadaten von Dateien zu ändern, die aus Paketen installiert wurden, außer Konfigurationsdateien in /etc.
Enzotib
Hmm ... stimmt! Aber wie ist dann der offizielle Weg? Mit Polkit spielen? Auch nicht so schön ...
Turbo
sudoist meiner Meinung nach der richtige Weg, aber leider gibt der Benutzer nicht die Möglichkeit, seine sudoersDatei zu sehen , und was daran falsch ist.
Enzotib
Dies ist das einzige, was für mich funktioniert hat.
Mark Stewart
0

Es hört sich so an, als ob Sie das Skript selbst als root ausführen möchten. Wenn Sie ein Skript ausführen möchten, das darauf wartet, dass etwas beendet wird, und dann Ihren Computer herunterfährt, führen Sie das Skript einfach mit sudo aus. Das fragt Sie nach Ihrem Passwort, wenn Sie das Skript ausführen, aber dann kann das Skript selbst das System ohne weitere Eingriffe herunterfahren.

Jo-Erlend Schinstad
quelle