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