Próbuję zrozumieć, w jaki sposób uprawnienia użytkownika działają w systemie Linux. Jądro uruchamia się i uruchamia init
jako root, prawda? Następnie Init uruchamia skrypty startowe i uruchamia getty
( agetty
), ponownie jako root. Agetty po prostu odczytuje nazwę użytkownika i działa login
, jak sądzę, nadal jako root. Nic ciekawego jeszcze. Ale co robi logowanie ? Nie mogłem znaleźć nic lepszego niż „próbuje się zalogować”. Załóżmy, że login stwierdza, że hasło jest zgodne (a my próbujemy zalogować się jak zwykły użytkownik), jak to zmienia identyfikator użytkownika? Myślałem, że powinno to być wywołanie systemowe, ale nie byłem w stanie go znaleźć (może jestem po prostu ślepy?)
Także około su
. su
ma ustawiony bit „setuid”, więc kiedy go uruchamiamy, zawsze działa jako root. Ale kiedy mówimy, aby logował się jak zwykły użytkownik, ponownie musi zmienić identyfikator użytkownika. Czy rozumiem poprawnie, że ta sama „magia” zachodzi su
i login
kiedy trzeba zmienić użytkownika? Jeśli tak, to dlaczego mają dwa różne programy? Czy podczas logowania się zdarzają się jakieś inne poważne interesy?