Jaka jest poprawna składnia sudoers do dodania użytkownika?

50

Zgodnie z komentarzami w /etc/sudoers(Fedora 13):

## Syntax:
##
##    user  MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.

Moje dwa powiązane pytania:

  1. Co to ALL=(ALL) ALLznaczy w następującym wierszu:

    root  ALL=(ALL)   ALL
    
  2. Przetestowałem te dwie linie, ale nie mogę zrozumieć, jak różnią się funkcjonalnie:

    superadm    ALL=(ALL)    ALL
    superadm    ALL=ALL
    

Przeczytałem instrukcję, ale specyfikacja składni jest trudna do przestrzegania. Wywniosłem, że ta (ALL) ALLczęść jest specyfikacją polecenia i znacznika, ale nadal nie mogę się nad tym zastanowić.

Belmin Fernandez
źródło

Odpowiedzi:

91

Uwaga: odpowiadam 1. , ponieważ Ignacio już odpowiedział 2 ..

W następującym sudowpisie:

superadm  ALL=(ALL)   ALL

istnieją cztery pola:

  • Pierwszy określa użytkownika, który otrzyma uprawnienia do niektórych poleceń.
  • Drugi jest rzadko używany. Jest to lista nazw hostów, na których ten wpis sudo będzie obowiązywał. W standardowych konfiguracjach istotny jest tylko jeden host (localhost), więc to pole zwykle jest pozostawione jako ALL.
  • Czwarte pole jest lista komend superadmbędzie w stanie uruchomić z podwyższonymi uprawnieniami. ALLoznacza wszystkie polecenia. W przeciwnym razie użyj rozdzielonej przecinkami listy poleceń.
  • Trzecie pole (napisane (…)opcjonalnie) określa, którzy użytkownicy (i grupy) superadmbędą mogli uruchamiać następujące polecenia jako. ALLoznacza, że ​​mogą wybrać cokolwiek (nieograniczone). Jeśli to pole zostanie pominięte, oznacza to to samo, co (root).

Przykład:

alan   ALL = (root, bin : operator, system) /bin/ls, /bin/kill

Tutaj alanmożna uruchamiać dwie komendy /bin/lsi /bin/killjako root(lub bin), ewentualnie z dodatkowymi operatorlub systemgrupowymi uprawnieniami.

alanMoże więc zdecydować się na uruchomienie lsjako binużytkownik z operatoruprawnieniami grupowymi takimi jak to:

sudo -u bin -g operator /bin/ls /whatever/directory

Jeśli -uzostanie pominięty, będzie taki sam jak -u root. Jeśli -gzostanie pominięty, nie są przyznawane żadne dodatkowe uprawnienia grupowe.

Stéphane Gimenez
źródło
1
Cóż, to prawdopodobnie najlepsza odpowiedź w historii ...
David Betz
1
Zauważyłem, że znak nowej linii \njest obowiązkowy na końcu wpisu w sudoers lub /etc/sudoers.d/your_file_name
ramonrails
Możesz także używać symboli wieloznacznych w nazwach hostów, nazwach ścieżek i argumentach wiersza poleceń. Lubię /bin/cat /var/log/messages.?lub /bin/ls /var/log/*więcej informacji tutaj
Alex
9

Ze strony sudoers(5)man, sekcja DESCRIPTION , podsekcja Runas_Spec :

Pierwszy Runas_List wskazuje których użytkownicy komenda może być uruchamiany jako poprzez sudo„s -uopcja.

...

Jeśli nie określono parametru Runas_Spec, komendę można uruchomić jako rooti nie można określić żadnej grupy.

Więc nie ma żadnej różnicy funkcjonalnej podczas próby uruchamiania poleceń jako root, tj. Gdy nie używasz -uz sudo. Różnica ma znaczenie przy próbie uruchamiania poleceń jak inni użytkownicy; ten drugi to zapobiegnie, ale ten pierwszy na to pozwoli.

Ignacio Vazquez-Abrams
źródło