Jak nadać użytkownikowi uprawnienia do zamykania?

9

Używam Ubuntu 11.04. Chcę uruchomić skrypt, który sprawdza działający proces i zamyka system po zakończeniu tego procesu. Aby to zrobić, użytkownik wymaga dostępu do zamykania, aby skrypt mógł zostać wykonany bez konieczności podawania hasła.

Odniosłem się do tej strony i dodałem tekst do mojego pliku sudoers. Jednak wciąż pyta mnie o hasło przy każdym uruchomieniu sudo shutdown -h now. Ponadto pojawia się błąd informujący, że wymagane są uprawnienia roota, gdy uruchamiam zamknięcie bez sudo.

Mój plik sudoers wygląda mniej więcej tak.

# Cmnd alias specification
Cmnd_Alias      SHUTDOWN = /sbin/shutdown

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

Jak mogę zezwolić użytkownikowi na wykonanie polecenia zamknięcia bez konieczności ręcznego wprowadzania hasła?

Dzięki.

Amey Jah
źródło
1
Czy mógłbyś opublikować swój prawdziwy i cały sudoersplik?
enzotib

Odpowiedzi:

6

Możesz zamknąć lub uruchomić ponownie za pomocą HAL lub ConsoleKit, który nie będzie wymagał podania nazwy użytkownika / hasła:

HAL (starsze wersje Ubuntu):

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

ConsoleKit (nowsze wersje Ubuntu, testowane na Ubuntu 11.04):

dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
Alin Andrei
źródło
7

Zrobiłem to tak, jak w tej odpowiedzi, działa dla mnie bezbłędnie. Może twoje podejście pomija tę visudoczęść?

Otwórz wiersz poleceń i wpisz:

sudo visudo 

W pliku, który zostanie otwarty, dodaj następujący wiersz na końcu:

yourusername ALL=NOPASSWD: /sbin/halt

Następnie zamknij edytor i zabezpiecz go (CTRL + x).

Teraz możesz wyłączyć komputer z wiersza poleceń, np. Po pobraniu czegoś:

wget UrlOfTheFileYouWantToDownload ; sudo halt
Christoph
źródło
1

Jakiś czas temu zrobiłem to, ustawiając suid (Ustaw identyfikator użytkownika). To powoduje, że program działa jako właściciel pliku, a nie użytkownik go uruchamiający. Ponieważ zamknięcie jest własnością root, powinno to umożliwić zamknięcie bez sudo.

chmod u+s /sbin/shutdown

Istnieją jednak konsekwencje dla bezpieczeństwa, ponieważ każdy może wtedy uruchomić zamknięcie systemu. http://en.wikipedia.org/wiki/Setuid

turbo
źródło
Zasadniczo nie zaleca się modyfikowania plików ani metadanych plików zainstalowanych z pakietów innych niż pliki konfiguracyjne w /etc.
enzotib
Hmm ... prawda! Ale jaki jest zatem oficjalny sposób? Bawisz się z polkit? Nie tak miło też ...
turbo
sudojest moim zdaniem właściwy sposób, ale niestety użytkownik nie daje szansy zobaczyć jego sudoerspliku i co jest z nim nie tak.
enzotib
To jedyna rzecz, która działała dla mnie.
Mark Stewart
0

Wygląda na to, że chcesz uruchomić sam skrypt jako root. Jeśli chcesz uruchomić skrypt, który czeka, aż coś się skończy, a następnie wyłącza komputer, wystarczy uruchomić skrypt za pomocą sudo. Spowoduje to podanie hasła podczas uruchamiania skryptu, ale sam skrypt może zamknąć system bez dalszej interwencji.

Jo-Erlend Schinstad
źródło