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?


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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.