$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul 4 2017 /usr/bin/sudo
więc sudo
może być uruchamiany przez dowolnego użytkownika, a każdy działający użytkownik sudo
będzie miał root jako efektywny identyfikator użytkownika procesu, ponieważ ustawiony /usr/bin/sudo
jest 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.
O jakie hasło użytkownika
sudo
prosi? 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,
sudo
a następnie podając własne hasło? Czy Linux może to ograniczyć niektórym użytkownikom?Czy jest prawdą, że
sudo
pyta o hasło poexecve()
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.
źródło
Odpowiedzi:
W swojej najczęstszej konfiguracji
sudo
pyta o hasło uruchomionego użytkownikasudo
(jak mówisz, użytkownika odpowiadającego rzeczywistemu identyfikatorowi użytkownika procesu). Chodzi osudo
to, aby przyznać dodatkowe uprawnienia określonym użytkownikom (zgodnie z konfiguracją wsudoers
), bez konieczności zapewnienia przez innych użytkowników uwierzytelnienia innego niż własne. Jednaksudo
nie sprawdzić, czy użytkownik pracujesudo
naprawdę jest kim oni twierdzą, że są, i to robi, że prosząc o ich hasło (lub cokolwiek uwierzytelniania mechanizm jest ustawiona nasudo
, zazwyczaj za pomocą PAM - więc może to wiązać się z odcisku palca lub dwuskładnikowego uwierzytelnianie itp.).sudo
niekoniecznie przyznaje prawo do rootowania, może przyznawać różne przywileje. Każdy użytkownik, któremu zezwolono na rootowanie,sudoers
może to zrobić tylko przy użyciu własnego uwierzytelnienia; ale użytkownik nie może, nie może (przynajmniej nie używającsudo
). Nie jest to wymuszane przez sam Linux, ale przezsudo
(i jego konfigurację uwierzytelniania).sudo
rzeczywiście pyta o hasło po uruchomieniu; nie może zrobić inaczej ( tzn. nie może nic zrobić, zanim zacznie działać). Punktemsudo
prośbą o podanie hasła, nawet jeśli jest to root, jest sprawdzenie tożsamości pracującym użytkownika (w jego typowej konfiguracji).źródło
sudo
zwykle pyta o hasło użytkownika, który go uruchomił, chociaż można to skonfigurować :Ustawienie
rootpw
jestsudo
zawsze poprosić o hasło roota,targetpw
pyta o hasło użytkownikasudo
w końcu uruchomić program jak irunaspw
pyta o hasło użytkownika w zestawierunas_default
.sudo
Binarny 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.źródło
Z pierwszej linii
man sudo
:Więc:
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.
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
: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.
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ć.
źródło
Oprócz innych dobrych odpowiedzi na temat
sudo
:su
pozwala 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ć,su
aby „zostać” użytkownikiem Administratora, a następnie użyć tej rolisudo
. W takiej sytuacji dwukrotnie wpisuję hasło do konta administratora - raz, kiedy uruchamiamsu
, i raz, kiedy uruchamiamsudo
.źródło