Я пытаюсь понять, как пользовательские разрешения работают в Linux. Ядро загружается и запускается initкак root, верно? Затем Init запускает сценарии запуска и запускает getty( agetty), снова как root. Agetty просто читает имя пользователя и работает login, все еще как root, я думаю. Ничего интересного пока нет. Но что делает логин ? Я не смог найти ничего лучше, чем «он пытается войти». Предположим, логин обнаружил, что пароль совпадает (и мы пытаемся войти как обычный пользователь), как он меняет идентификатор пользователя? Я думал, что для этого должен быть системный вызов, но я не смог его найти (может, я просто слепой?)
Тоже о su. suимеет бит setuid, поэтому когда мы его запускаем, он всегда запускается от имени root. Но когда мы говорим, чтобы войти как обычный пользователь, он снова должен изменить идентификатор пользователя. Правильно ли я понимаю, что одна и та же «магия» случается suи loginкогда им нужно сменить пользователя? Если так, то почему две разные программы? Существуют ли какие-либо дополнительные виды серьезного бизнеса при входе в систему?