Wyłącz lub uruchom ponownie jak zwykły użytkownik

17

Aby uruchomić polecenie powerofflub reboottrzeba być super użytkownika. Czy w ogóle mogę uruchomić to jako zwykły użytkownik? Po prostu nie chcę sudoi wpisuję hasła przy każdym ponownym uruchomieniu lub wyłączeniu zasilania.

Stormvirux
źródło
2
Odpowiedź zależy od tego, z jakiego systemu init korzysta Twoja dystrybucja ... Na przykład, z systemdaktywną logindsesją możesz zrestartować komputer lub wyłączyć go bez podwyższonych uprawnień, pod warunkiem, że żaden inny użytkownik nie jest jeszcze zalogowany ...
jasonwryan
@ jasonwryan Obecnie używam Ubuntu, którego domyślnie nie używa. systemdCzy masz na myśli, że inne Distros, takie jak Arch, mogą się zrestartować bez wyodrębnionych uprawnień?
Stormvirux,
Tak: zgodnie z warunkami w moim pierwszym komentarzu.
jasonwryan

Odpowiedzi:

22

Zmieniłem /etc/sudoers, aby każdy użytkownik należący do grupy administratorów mógł wykonać następujące polecenia bez pytania o hasło.

sudo halt
sudo reboot
sudo poweroff

Musisz tylko dodać następujące wiersze /etc/sudoers

## Admin user group is allowed to execute halt and reboot 
%admin ALL=NOPASSWD: /sbin/halt, /sbin/reboot, /sbin/poweroff

i dodaj się do grupy administracyjnej.

Jeśli chcesz, aby mógł to zrobić tylko jeden użytkownik, po prostu usuń %admini zastąp go w usernameten sposób

## user is allowed to execute halt and reboot 
stormvirux ALL=NOPASSWD: /sbin/halt, /sbin/reboot, /sbin/poweroff

Możesz dowiedzieć się więcej na temat /etc/sudoersz man sudoerslub podręcznika on-line

Raphael Ahrens
źródło
4

Możesz również utworzyć nowy plik pod /etc/sudoers.dnazwą, jak chcesz (nazwałem go'shutdown' ), i wstaw do niego następujące wiersze:

# Allows me to shutdown the system without a password

yourUserName ALL = NOPASSWD: /sbin/halt, /sbin/reboot, /sbin/poweroff

Po prostu zmień „twojaNazwaUżytkownika” na SWOJĄ Nazwę Użytkownika i dodaj lub usuń polecenia, których osobiście używam, tylko do shutdown. Jedną z głównych różnic w tworzeniu określonego pliku poniżej sudoers.djest to, że plik ten przetrwa Uaktualnienia systemu

Racu
źródło
1
Jeśli wybierzesz to podejście, upewnij się, że /etc/sudoersma odpowiednią #includedyrektywę do odczytu plików /etc/sudoers.d/.
patricktokeeffe
2

Możesz to również osiągnąć poprzez trick z setuid. Nie wiem, czy to zadziała na wszystkich systemach, ponieważ czasami ignorują bit setuid / setgid.

Możesz określić grupę użytkowników, którzy mogą dokonać zmiany stanu systemu w moim przypadku adm. Następnie dodaj odpowiednich użytkowników do tej grupy.

gpasswd -a $USER adm

Określ uprawnienia:

chmod 4550 /usr/bin/reboot

ls -l outpus powinien wyglądać tak:

-r-sr-x--- 1 root adm 18928 Mar 13  2015 /usr/bin/reboot

Następnie możesz po prostu wpisać:

reboot
hurufu
źródło
1

Najprostsze rozwiązanie:

sudo echo $USER >> /etc/shutdown.allow

Następnie możesz użyć jednego z tych poleceń:

shutdown -ah now   // halt
shutdown -ar now   // reboot

Zgodnie z zamknięciem przez człowieka istnieje opcja -nie do użytku innego niż root:

Jeśli shutdownzostanie wywołany z argumentem -a (dodaj to do wywołania zamknięcia w / etc / inittab ), sprawdza, czy plik /etc/shutdown.allow jest obecny. Następnie porównuje nazwy logowania w tym pliku z listą osób zalogowanych na wirtualnej konsoli ...

Działa w systemie Debian Linux. I jest limit dla 32 nazw użytkowników w /etc/shutdown.allow.

Alexander Yancharuk
źródło
4
Brak takiej opcji w Fedorze, CentOS lub RHEL.
fpmurphy
1
To również nie działa dla Ubuntu, przynajmniej tyle otrzymuję z dokumentacji. Przydałoby się sprawdzić, czy jest to funkcja tylko dla Debiana.
Raphael Ahrens,
Wciąż nie w Ubuntu (18.04) w 2020 roku =}
zadzwoń