Jak stosować sudo?

24

Próbowałem już skonfigurować sudo, ale nie miałem z tym zbyt wiele szczęścia. Czym się różni su -l -c "x"? Wydaje się, że za pomocą pliku konfiguracyjnego można to zrobić, aby użytkownik miał dostęp tylko do niektórych poleceń i nie tylko. Zawsze uważałem to sudoza sposób na wyłożenie pojedynczego polecenia jako innego użytkownika lub grupy. Ponieważ dystrybucje, takie jak Ubuntu i Mint, ułatwiają przede wszystkim zapewnienie głównemu użytkownikowi łatwego dostępu do rootowania za pomocą hasła, nie jestem do końca pewien, jakie jest jego przeznaczenie.

Jak dodać użytkownika do pliku sudo, dając mu uprawnienia do uruchamiania tylko niektórych poleceń w katalogu głównym? Nie chcę też otwierać żadnych luk w zabezpieczeniach.

Naftuli Kay
źródło

Odpowiedzi:

16

W przypadku podstawowej operacji - uruchamiania komend jako root - najbardziej widoczną różnicą między sudo i su jest to, że sudo wymaga hasła użytkownika wywołującego (tj. Hasła), podczas gdy su wymaga hasła użytkownika docelowego (tj. Hasła roota). Wpływ na bezpieczeństwo został obszernie omówiony w poprzednim pytaniu: Jaki jest najbezpieczniejszy sposób uzyskania uprawnień roota: sudo, su lub logowanie? .

Sudo ma dodatkowe funkcje poza su. W szczególności, gdy masz hasło użytkownika, możesz uruchomić dowolne polecenie jako ten użytkownik. Z drugiej strony, sudo można skonfigurować tak, aby wywołujący go użytkownik mógł uruchamiać określone polecenia tylko jako inny użytkownik. Jest to możliwe, ponieważ sudo nie wymaga żadnego uwierzytelnienia (poza być może potwierdzeniem, że jesteś sobą, wpisując hasło - ale to nieznacznie różni się od uwierzytelnienia użytkownika dla zadania).

Zmieniasz konfigurację sudo, uruchamiając visudokomendę jako root (nigdy nie edytuj konfiguracji bezpośrednio). Upewnij się zmienną środowiskową EDITORlub VISUALjest ustawiona na swoim ulubionym edytorze lub może pojawić się nienormalne edytor. sudoersStrona man jest nieco lakoniczny, ale ma przykładów. Aby zezwolić użytkownikowi bobna uruchamianie /bin/foo(z dowolną liczbą argumentów) i /bin/bar --safe(ale bez żadnego innego argumentu) jako root, użyj następujących wierszy:

bob ALL = (root) /bin/foo
bob ALL = (root) /bin/bar --safe
Gilles „SO- przestań być zły”
źródło
2
sudoto niesamowity wynalazek
tshepang,
1
To, czy sudo wymaga hasła roota czy hasła roota, zależy od konfiguracji. Można go skonfigurować w dowolny sposób.
Jonathan M Davis
3
@Tshepang Amen, bracie. Gdybym musiał zwolnić hasło roota i wyjaśnić technikom pomocy technicznej, jak SU, a nie robić / cokolwiek / innego niż apache2ctl gracefulmyślę, że wolałbym podciąć sobie nadgarstki i skończyć z tym.
Shadur
6

Największą różnicą jest to sudo, że nie potrzebujesz hasła roota, aby uruchomić komendę jako root, tak jak byś to zrobił su. Potrzebujesz hasła roota, aby dodać kogoś do sudoerspliku, ale później ta osoba będzie mogła uruchomić wszystkie lub niektóre (jeśli je ograniczyłeś) jako root bez potrzeby podawania dodatkowego hasła.

Inną różnicą jest, jak zauważyłeś, sudoznacznie lepsza kontrola dokładnie nad tym, jakie polecenia można uruchamiać.

Szczegółowe informacje na temat formatu sudoersuruchomienia pliku man sudoers. Znajdziesz tam przykłady zezwalania na uruchamianie tylko niektórych poleceń jako root. Podstawowa struktura każdej linii to:

user_list host_list = cmd_list

cmd_list może zawierać szczegóły, do którego użytkownika może się przełączać prawdziwy użytkownik. Na przykład możesz zezwolić webmasterowi na przełączenie na wwwroot, aby zrestartować apache, ale nie rootować. Może także zawierać inne opcje, takie jak to, czy hasło użytkownika jest wymagane przed przełączeniem (jest to ustawienie domyślne).

Przykładowa linia może być:

joe  ALL=(ALL) ALL

co oznacza: niech Joe uruchomi dowolne polecenie na dowolnym hoście jako dowolny użytkownik. Węższa linia może być:

joe  ALL=(operator) /usr/local/ops/

co oznacza: niech Joe uruchomi dowolne polecenie w katalogu / usr / local / ops jako użytkownik „operator”.

Na końcu strony podręcznika sudoers znajduje się wiele przykładów.

Powinieneś edytować /etc/sudoersza pomocą polecenia visudo. To sprawdza, czy plik jest legalny i pomaga zapobiec przypadkowemu jego uszkodzeniu.

Dave Jennings
źródło
To, czy hasło jest wymagane podczas korzystania z sudo, zależy całkowicie od sudoerskonfiguracji pliku. Można go skonfigurować tak, aby wymagał hasła lub nie wymagał hasła.
Jonathan M Davis
Dodatkowe typowe praktyki pozwalające uniknąć zmiany głównego pliku / etc / sudoers, ponieważ IDS go obserwuje i ponieważ jego formatowanie może zrujnować Twój dzień: Użyj fragmentów sudo jako osobnych plików w /etc/sudoers.d. Używanie grupy kół dla osób dopuszczało dowolne polecenia.
bbaassssiiee
2

Oprócz innych odpowiedzi sudo zapewnia funkcje rejestrowania, dzięki czemu możesz śledzić, które polecenia zostały uruchomione i przez kogo. Nie jest to ze względów bezpieczeństwa, ponieważ złośliwy użytkownik, który uzyskuje dostęp do sudo, może wyczyścić dziennik. Bardzo przydatne jest jednak dokładne ustalenie, co ty lub inny administrator zrobiłeś niewyraźnym oczom o 2 nad ranem w zeszłym tygodniu.

JRW
źródło
3
Służy to bezpieczeństwu, ponieważ sudo obsługuje logowanie do syslog, który w każdej ważnej konfiguracji dotyczącej bezpieczeństwa zostanie skonfigurowany do logowania na oddzielnej maszynie zdalnej, tak że w przypadku naruszenia bezpieczeństwa systemu nie można wykonać dzienników.
Arrowmaster
Atrybut pliku tylko do
dołączenia