Я намагаюся зрозуміти, як працюють дозволи користувачів у Linux. Ядро завантажується і починається init
як root, правда? Потім Init запускає сценарії запуску і запускає getty
( agetty
), знову як root. Agetty просто читає ім’я користувача і працює login
, все ще як root, я думаю. Ще нічого цікавого. Але що робить логін ? Я не зміг знайти нічого кращого, ніж "це спроби увійти". Припустимо, логін виявляє, що пароль відповідає (і ми намагаємось увійти як звичайний користувач), як це змінює ідентифікатор користувача? Я думав, що для цього повинен бути системний виклик, але я не зміг його знайти (можливо, я просто сліпий?)
Також о su
. su
встановлений біт 'setuid', тому коли ми запускаємо його, він завжди працює як root. Але коли ми кажемо йому увійти як звичайний користувач, йому знову потрібно змінити ідентифікатор користувача. Чи правильно я розумію, що та ж сама "магія" відбувається su
і login
коли їм потрібно змінити користувача? Якщо так, то навіщо дві різні програми? Чи є якісь додаткові види серйозного бізнесу, коли відбувається вхід у систему?