sudoers - wymagane proste wyjaśnienie

24

Za każdym razem, gdy chcę być w stanie uruchomić coś, co wymaga ode mnie sudoerzbyt wiele razy, muszę google sformatować, /etc/sudoersaby ponownie przypomnieć mi, jaki jest właściwy sposób na napisanie tego.

Teraz widzę różne style pisania w moim sudoerspliku, co jest konsekwencją różnych wyników Google w ciągu miesięcy. Zauważyłem również, że drugi przykład (poniżej) wydaje się działać w XFCE, ale nie w Cinnamon (Gnome 3). Może to być całkowicie niezwiązane, ale mimo to chciałbym raz na zawsze wiedzieć, jaka jest prawidłowa gramatyka linii sudoer i jaka jest różnica między podanymi przykładami?

  1. redsandro ALL=NOPASSWD:/path/to/command
  2. redsandro ALL=(ALL) NOPASSWD:/path/to/command
  3. redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

Ponadto, po co to wszystko ALL? Jeden użytkownik, jedno polecenie, ale muszę użyć ALLsłowa kluczowego do trzech razy? Czy robię to źle?

Oczywiście, pomijając NOPASSWD:sprawia, że można wprowadzić hasło, zanim wolno uruchomić polecenie, ale jeden punkt zamieszania jest wykorzystanie =i :, końcowego polecenia, które jest przedmiotem tej linii mogą być poprzedzany przez jedną =, :, , lub ), myląca gramatyka dla podobnej semantyki.

Redsandro
źródło
3
Czuję się również bardzo sfrustrowany sudoersskładnią. Czytanie strony podręcznika było jeszcze bardziej frustrujące: opisuje tak zwany zwięzły i dokładny język EBNF, przykłady są wyczerpująco długie. Dlatego nie jestem zaskoczony, że znalazłem tutaj tak wiele wątków dotyczących tego pliku.
m-ric
1
Dzięki za to. Chciałem zadać to pytanie, odkąd kilka lat temu natknąłem się na plik sudoers :-)
vahidg

Odpowiedzi:

35

To coś więcej niż tylko użytkownik i polecenie:


redsandro host=(user:group) tag:commands
  • hostokreśla nazwy hostów, dla których ta linia jest ważna. Chyba że dzielisz plik asudoers między różnymi hostami, które potrzebują różnych reguł, używając specjalnej wartości ALLoznaczającej, że „wszystkie hosty” to dobry wybór.

  • userokreśla, których użytkowników można użyć z -uopcjami uruchomienia polecenia. Jeśli pominiesz to, nie będziesz mógł skorzystać z tej -uopcji.

  • groupokreśla grupy, których można używać z -gopcjami. Jeśli go pominiesz, nie możesz użyć tej -gopcji.

Zarówno useri groupzrozumieć wartość specjalną ALLza „wszystkich użytkowników / grup”

Jeśli pominiesz całą (user:group)rzecz, której nie możesz użyć, -ua -guruchomisz polecenie tylko jako root.

  • tag pozwala określić niektóre opcje, takie jak NOPASSWD

Tak więc w pierwszym przykładzie możesz uruchomić komendę jako root, ale nie możesz jej użyć -ui -guruchomić jako jakikolwiek inny użytkownik lub grupa.

W przykładzie 2. możesz uruchomić komendę jako root lub użyć -ujej jako dowolnego użytkownika.

Za pomocą 3. możesz uruchomić polecenie jako root lub użyć -ulub, -gaby uruchomić polecenie jak każdy inny użytkownik lub grupa.

Florian Diesch
źródło
Właśnie tego szukałem. Zaakceptowałem twoją odpowiedź i dziękuję za twój wysiłek.
Redsandro,
1
Ostateczna myśl, czy mogę użyć 127.0.0.1lub localhostjak hostdla trywialnego dodatkowego bezpieczeństwa?
Redsandro,
5
Strona ta mówi: „Uwaga sudo sprawdza tylko rzeczywiste interfejsy sieciowe; oznacza to, że adres IP 127.0.0.1 (localhost) nigdy nie będzie zgodny. Ponadto nazwa hosta „localhost” będzie pasować tylko wtedy, gdy jest to rzeczywista nazwa hosta, co zwykle ma miejsce tylko w przypadku systemów niesieciowych. ”
Florian Diesch
1
Dzięki. Nie ma dla mnie nazwy hosta, zwłaszcza, że ​​chcę móc skopiować plik sudoers na wiele komputerów. ALLto jest.
Redsandro,
9

Rozłóżmy to na części:
redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

redsandro to nazwa użytkownika, na który zezwalamy. Umieść% z przodu, aby zastosować go do grupy.

WSZYSTKO to nazwa tej reguły. Sudoerzy mogą zrobić znacznie więcej niż tylko przyznawać globalne uprawnienia. Tam jednak komplikuje się.

= nie wymaga wyjaśnienia

ALL: ALL czyta jako (who_to_run_it_as: what_group_to_run_it_as). W ten sposób możesz zezwolić na uruchomienie polecenia, ale tylko w kontekście określonego użytkownika lub grupy.

NOPASSWD: nakazuje wyłączenie monitu o podanie hasła.

/ ścieżka / do / polecenie pozwala określić określone polecenia ścieżka_do_komendy, inna_komenda

Należy pamiętać, że chociaż sudo jest najczęściej używane przez użytkowników domowych do eskalacji uprawnień administratora, może być używane do kontroli dostępu do określonych poleceń w bardziej szczegółowy sposób.

RobotHumans
źródło
1
Dzięki za dodatkowe informacje %i , another_commanduwagi. Teraz rozumiem %wheellinię w dystrybucji opartej na Fedorze.
Redsandro,