Bit Setuid wydaje się nie mieć wpływu na uderzenie


14

Trochę eksperymentowałem i zauważyłem coś dziwnego: ustawienie setuidu na kopii basha znajdującego się w miejscu /usr/bin/bash-testwydawało się nie mieć żadnego efektu. Kiedy uruchomiłem instancję bash-test, mój katalog domowy nie był ustawiony na, /roota kiedy uruchomiłem whoamipolecenie z bash-test, moja nazwa użytkownika nie została zgłoszona jako root, co sugeruje, że bash-testnie działała jako root. Jednak jeśli włączę bit setuid whoami, zgłoszono mnie jako root w dowolnej powłoce, zgodnie z oczekiwaniami.

Próbowałem również ustawić bit setuida /usr/bin/bashi obserwowałem to samo zachowanie.

Dlaczego bash nie działa jako root, kiedy ustawiam na nim bit setuid? Czy selinux może mieć z tym coś wspólnego?

linux  bash  setuid 

1
w tym pytaniu znajdziesz dodatkowe informacje o setuidzie .
Anthon

Zobacz także Setuid Demystified by Chen, Dean and Wagner. To stara gazeta, ale nadal obowiązuje.

Odpowiedzi:


21

Wyjaśnienie jest trochę denerwujące: sam bash jest tego powodem. stracejest naszym przyjacielem (musi to być sam root SUID, aby to działało):

getuid()                                = 1000
getgid()                                = 1001
geteuid()                               = 0
getegid()                               = 1001
setuid(1000)                            = 0
setgid(1001)                            = 0

bash wykrywa, że ​​został uruchomiony root root SUID (UID! = EUID) i wykorzystuje swoją moc root do odrzucenia tej mocy, resetując EUID do UID. A później nawet FSUID, dla pewności ...:

getuid()                                = 1000
setfsuid(1000)                          = 1000
getgid()                                = 1001
setfsgid(1001)                          = 1001

W końcu: bez szans. Musisz rozpocząć bash z rootem UID (tj. Sudo).

Edytuj 1

Strona podręcznika mówi:

Jeśli powłoka zostanie uruchomiona z efektywnym identyfikatorem użytkownika (grupy) innym niż rzeczywisty identyfikator użytkownika (grupy), a opcja -p nie zostanie podana, nie zostaną odczytane żadne pliki startowe, funkcje powłoki nie zostaną odziedziczone ze środowiska, SHELLOPTS Zmienne BASHOPTS, CDPATH i GLOBIGNORE, jeśli występują w środowisku, są ignorowane, a efektywny identyfikator użytkownika jest ustawiany na rzeczywisty identyfikator użytkownika. Jeśli przy wywołaniu podano opcję -p, zachowanie podczas uruchamiania jest takie samo, ale efektywny identyfikator użytkownika nie jest resetowany.

Ale to mi nie działa. -pnie jest nawet wymieniany wśród opcji uruchamiania. Próbowałem też --posix; też nie działał.


2

W każdym razie program główny SUID nie działa w środowisku roota ( $HOMEkonfiguracja powłoki, cokolwiek), działa z uprawnieniami roota (tzn. Może usunąć dowolny plik, zmienić dowolne uprawnienia itp.).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.