Jak uruchomić określone polecenia sudo bez hasła?

211

Na jednym komputerze często muszę od czasu do czasu uruchamiać sudopolecenia. sudoW większości przypadków nie mam nic przeciwko wprowadzeniu hasła .

Istnieją jednak trzy sudopolecenia, które chcę uruchomić bez wprowadzania hasła :

  • sudo reboot
  • sudo shutdown -r now
  • sudo shutdown -P now

Jak mogę wykluczyć te polecenia z ochrony hasłem sudo?

Bhavesh Diwan
źródło

Odpowiedzi:

283

Skorzystaj z NOPASSWDdyrektywy

Możesz użyć NOPASSWDdyrektywy w swoim /etc/sudoerspliku .

Jeśli Twój użytkownik jest wywoływany, usera host jest nazywany, hostmożesz dodać te linie do /etc/sudoers:

user host = (root) NOPASSWD: /sbin/shutdown
user host = (root) NOPASSWD: /sbin/reboot

Umożliwi to użytkownikowi useruruchamianie żądanych poleceń hostbez wprowadzania hasła. Wszystkie pozostałe sudopolecenia ed nadal będą wymagać hasła.

Polecenia określone w sudoerspliku muszą być w pełni kwalifikowane (tj. Przy użyciu bezwzględnej ścieżki do polecenia do uruchomienia), jak opisano na sudoersstronie man . Podanie ścieżki względnej jest uważane za błąd składniowy.

Jeśli polecenie kończy się znakiem końcowym /i wskazuje na katalog, użytkownik będzie mógł uruchomić dowolne polecenie w tym katalogu (ale nie w żadnym z jego podkatalogów). W poniższym przykładzie użytkownik usermoże uruchomić dowolne polecenie w katalogu /home/someuser/bin/:

user host = (root) NOPASSWD: /home/someuser/bin/

Uwaga: Zawsze używaj polecenia visudodo edycji sudoerspliku, aby upewnić się, że nie zablokujesz się w systemie - na wypadek, gdyby przypadkowo zapisałeś coś niepoprawnego do sudoerspliku. visudobędzie zapisać zmodyfikowany plik do tymczasowej lokalizacji, a tylko zastąpić prawdziwego sudoerspliku, jeśli zmodyfikowany plik może być analizowana bez błędów.

Używanie /etc/sudoers.dzamiast modyfikowania/etc/sudoers

Alternatywnie do edycji /etc/sudoerspliku możesz dodać dwie linie do nowego pliku /etc/sudoers.dnp /etc/sudoers.d/shutdown. Jest to elegancki sposób oddzielania różnych zmian sudopraw, a także pozostawia oryginalny sudoersplik nietknięty dla łatwiejszych aktualizacji.

Uwaga: Ponownie użyj polecenia visudodo edycji pliku, aby upewnić się, że nie zablokujesz się w systemie:

sudo visudo -f /etc/sudoers.d/shutdown 

Zapewnia to również automatycznie prawidłowe ustawienie właściciela i uprawnień nowego pliku.

Jeśli sudoersjest pomieszany

Jeśli nie używałeś visudodo edycji plików, a następnie przypadkowo pomieszałeś /etc/sudoerslub pomieszałeś plik /etc/sudoers.d, zostaniesz zablokowany sudo.

Rozwiązaniem może być naprawa plików za pomocą, pkexecktóra jest alternatywą dla sudo.

Aby naprawić /etc/sudoers:

pkexec visudo

Aby naprawić /etc/sudoers.d/shutdown:

pkexec visudo -f /etc/sudoers.d/shutdown

Jeśli własność i / lub uprawnienia są niepoprawne dla dowolnego sudoerspliku, plik zostanie zignorowany, sudowięc możesz również zostać zablokowany w tej sytuacji. Ponownie możesz użyć tego pkexecdo naprawy.

Prawidłowe uprawnienia powinny wyglądać tak:

$ ls -l /etc/sudoers.d/shutdown 
-r--r----- 1 root root 86 Jul 16 15:37 /etc/sudoers.d/shutdown

Użyj pkexectego w celu ustalenia własności i uprawnień :

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown
mgd
źródło
2
Dwie linie odnoszą się konkretnie do tych dwóch poleceń. Jeśli usernie ma innych sudouprawnień, żadne inne polecenia nie mogą być sudoedowane przez tego użytkownika. Spójrz na man sudoi man sudoers.
mgd
4
@StanKurdziel Próbowałem z tej linii na Mac OS X Yosemite i to działało w porządku: mgd ALL=(root) NOPASSWD: /var/root/test. Jestem użytkownikiem mgdi ALLoznacza „ze wszystkich hostów” . /var/root/testJest to prosty „Hello World” skrypt z uprawnieniami: -rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test. Nie wprowadziłem żadnych innych zmian w systemie.
mgd
2
Co znajduje się hostw pliku sudoers?
user106563,
1
To nie jest odpowiedź, to prawie pełny przewodnik na temat dyrektywy NOPASSWD. Dziękuję Ci.
Eray
1
@Michael proszę przeczytać stronę podręcznika man. Wszystko tam jest zapisane. Cytując: Możesz jednak podać również argumenty wiersza poleceń (w tym symbole wieloznaczne). Alternatywnie możesz podać „”, aby wskazać, że polecenie można uruchomić tylko bez argumentów wiersza polecenia.
mgd
3

Przepraszam, ale jest tyle zamieszania w tej sprawie i kilka naprawdę skomplikowanych odpowiedzi, że czuję, że muszę tu ważyć, zanim ktoś źle zrozumie i zrobi coś szalonego.

Korzystanie z visudo !!

Dodaj następujące wiersze do konfiguracji:

ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown

Umożliwia to wykonywanie poleceń, restartowanie i zamykanie z dowolnymi parametrami od dowolnego użytkownika.

Zmień stos, podaj proste zwięzłe odpowiedzi.

Sowa
źródło