O jakie hasło użytkownika prosi `sudo`?

10
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul  4  2017 /usr/bin/sudo

więc sudomoże być uruchamiany przez dowolnego użytkownika, a każdy działający użytkownik sudobędzie miał root jako efektywny identyfikator użytkownika procesu, ponieważ ustawiony /usr/bin/sudojest bit set-user-id .

Od https://unix.stackexchange.com/a/11287/674

najbardziej widoczną różnicą między sudo i su jest to, że sudo wymaga hasła użytkownika, a su wymaga hasła roota.

  1. O jakie hasło użytkownika sudoprosi? Czy jest to użytkownik reprezentowany przez rzeczywisty identyfikator użytkownika procesu?

    Jeśli tak, to czy żaden użytkownik nie może uzyskać uprawnień administratora, uruchamiając, sudoa następnie podając własne hasło? Czy Linux może to ograniczyć niektórym użytkownikom?

  2. Czy jest prawdą, że sudopyta o hasło po execve() rozpoczyna realizację main()stanowi /usr/bin/sudo?

    Ponieważ euid procesu został zmieniony na root (ponieważ ustawiony jest bit set-user-id / usr / bin / sudo), po co sudo pyta o hasło później?

Dzięki.

Przeczytałem https://unix.stackexchange.com/a/80350/674 , ale nie odpowiada na powyższe pytania.

Tim
źródło
3
To nie jest żaden użytkownik, ale tylko ci z listy sudoers.
Rodrigo
1
@Rodrigo To brzmi jak odpowiedź, umieść ją w odpowiedzi, a nie w komentarzu.
Philip Kendall
2
@PhilipKendall To odpowiadało tylko na część wątpliwości OP.
Rodrigo

Odpowiedzi:

22
  1. W swojej najczęstszej konfiguracji sudopyta o hasło uruchomionego użytkownika sudo(jak mówisz, użytkownika odpowiadającego rzeczywistemu identyfikatorowi użytkownika procesu). Chodzi o sudoto, aby przyznać dodatkowe uprawnienia określonym użytkownikom (zgodnie z konfiguracją w sudoers), bez konieczności zapewnienia przez innych użytkowników uwierzytelnienia innego niż własne. Jednak sudo nie sprawdzić, czy użytkownik pracuje sudonaprawdę jest kim oni twierdzą, że są, i to robi, że prosząc o ich hasło (lub cokolwiek uwierzytelniania mechanizm jest ustawiona na sudo, zazwyczaj za pomocą PAM - więc może to wiązać się z odcisku palca lub dwuskładnikowego uwierzytelnianie itp.).

    sudoniekoniecznie przyznaje prawo do rootowania, może przyznawać różne przywileje. Każdy użytkownik, któremu zezwolono na rootowanie, sudoersmoże to zrobić tylko przy użyciu własnego uwierzytelnienia; ale użytkownik nie może, nie może (przynajmniej nie używając sudo). Nie jest to wymuszane przez sam Linux, ale przez sudo(i jego konfigurację uwierzytelniania).

  2. sudorzeczywiście pyta o hasło po uruchomieniu; nie może zrobić inaczej ( tzn. nie może nic zrobić, zanim zacznie działać). Punktem sudoprośbą o podanie hasła, nawet jeśli jest to root, jest sprawdzenie tożsamości pracującym użytkownika (w jego typowej konfiguracji).

Stephen Kitt
źródło
12

sudozwykle pyta o hasło użytkownika, który go uruchomił, chociaż można to skonfigurować :

W odróżnieniu od tego su(1), gdy sudoerswymaga uwierzytelnienia, sprawdza on poświadczenia użytkownika wywołującego, a nie poświadczenia użytkownika docelowego (lub użytkownika root). Można to zmienić poprzez rootpw, targetpwi runaspwflagi, opisanych później.

Ustawienie rootpwjest sudozawsze poprosić o hasło roota, targetpwpyta o hasło użytkownika sudow końcu uruchomić program jak i runaspwpyta o hasło użytkownika w zestawie runas_default.

sudoBinarny skonfigurować tak można rzeczywiście zaczął z uprawnieniami administratora przez dowolnego użytkownika. Zakładając, sudoże nie ma żadnych błędów w kodzie uwierzytelniającym, to samo w sobie nie będzie miało większego znaczenia.

W podobny sposób każdy proces może również wykonać kod w trybie jądra, wywołując dowolne wywołanie systemowe, powiedzmy open(). (to nie to samo, co kod przestrzeni użytkownika jako root). Dopóki jądro nie ma błędów, nie będzie w stanie uruchomić dowolnego kodu.

ilkkachu
źródło
8

Z pierwszej linii man sudo:

OPIS
sudo pozwala uprawnionemu użytkownikowi na wykonanie polecenia jako administrator lub inny użytkownik, zgodnie z zasadami bezpieczeństwa. Rzeczywisty (nieefektywny) identyfikator użytkownika wywołującego jest używany do określenia nazwy użytkownika, za pomocą której ma być wysyłane zapytanie o zasady bezpieczeństwa.

Więc:

  1. Używany jest rzeczywisty (nieefektywny) identyfikator użytkownika wywołującego ...
  2. Tak, każdy ( dozwolony ) użytkownik może uzyskać superużytkownika (lub inne) dodatkowe uprawnienia, uruchamiając sudo, a następnie zapewniając wymagane ( skonfigurowane ) uwierzytelnienie. Zarówno dozwolone, jak i skonfigurowane są ustawione w plikach sudoers.

  3. Czy Linux może to ograniczyć niektórym użytkownikom?
    Tak, ale nie. Linux jest skonfigurowany tak, aby pozwolić plikowi sudo na podejmowanie decyzji na podstawie zestawu reguł (zasad bezpieczeństwa) wewnątrz programu sudo i wewnątrz pliku /etc/sudoers. Zwykle można użyć innych plików (również / zamiast).

Od man setresuid:

OPIS
setresuid () ustawia rzeczywisty identyfikator użytkownika, efektywny identyfikator użytkownika i zapisany set-user-ID procesu wywołującego.

  1. Jedynym sposobem na uzyskanie uprawnień administratora nadanych przez jądro jest uruchomienie suid programu. Nie może być inaczej. Jest to sposób, w jaki Linux wybrał udzielanie uprawnień administratora.

  2. Po załadowaniu jądra pliku wykonywalnego, który nie może być modyfikowany przez żadnego innego użytkownika (plik i katalog będący własnością root i zapisywalny tylko przez root), sam plik wykonywalny (sudo) uwierzytelnia użytkownika, prosząc o hasło (lub coś innego, jak skonfigurowano) i decyduje, czy i jakie uprawnienia udzielić.

Izaak
źródło
-1

Oprócz innych dobrych odpowiedzi na temat sudo:

supozwala skutecznie stać się innym użytkownikiem. Na własnym komputerze nie działam jako administrator do codziennego użytku - co oznacza między innymi, że nie mogę (bezpośrednio) korzystać sudo. Jeśli chcę użyć sudo, mogę użyć, suaby „zostać” użytkownikiem Administratora, a następnie użyć tej roli sudo. W takiej sytuacji dwukrotnie wpisuję hasło do konta administratora - raz, kiedy uruchamiam su, i raz, kiedy uruchamiam sudo.

Stephen R.
źródło