user2
потрібно вийти з системи та знову ввійти. Групові дозволи працюють таким чином:
- Коли ви входите в систему, ваші процеси отримують членство у вашій основній групі, про яке йдеться
/etc/passwd
, а також усі групи, в яких згадується ваш користувач /etc/group
. (Більш точно, pw_gid
поле getpw(your_uid)
, плюс все групи яких ваш користувач є явним членом . За /etc/passwd
і /etc/group
, інформація може надходити з інших видів користувальницьких баз даних , таких як NIS або LDAP.) Основна група стає процесом в ефективний ідентифікатор групи а інші групи стають її додатковими ідентифікаторами групи .
- Коли процес виконує операцію, яка вимагає членства в певній групі, наприклад, доступ до файлу , ця група повинна бути або ефективним ідентифікатором групи, або одним із додаткових ідентифікаторів групи процесу.
Як бачимо, ваша зміна членства в групі користувача набирає чинності лише тоді, коли користувач увійде в систему. Для запущених процесів уже пізно. Таким чином, користувачеві потрібно вийти та знову увійти. Якщо це занадто багато проблем, він може увійти в окремий сеанс (наприклад, на іншій консолі чи за допомогою ssh localhost
).
Під кришкою процес може втрачати лише будь-коли привілеї (ідентифікатори користувачів, ідентифікатори групи, можливості). Ядро запускає init
процес (перший процес після завантаження), виконуючись як корінь, і кожен процес в кінцевому рахунку походить від цього процесу¹. login
Процес (або sshd
, або частина вашого робочого столу менеджера , який реєструє вас) все ще працює як корінь. Частина його роботи - скинути кореневі привілеї та перейти на належного користувача та групи.
Є один єдиний виняток: виконання встановленої програми або setgid програми. Ця програма отримує додаткові дозволи: вона може вибрати, щоб діяти під різними підмножинами членства батьківського процесу плюс додаткове членство в користувачеві або групі, яка належить виконуваному файлу setxid. Зокрема, встановлена коренева програма має кореневі дозволи, отже, може робити все²; ось як програми люблять su
і sudo
можуть виконувати свою роботу.
Ly
Іноді трапляються процеси, які не виводяться з init (initrd, udev), але принцип той же: почати з root і втратити привілеї з часом.
²
Обмеження багаторівневих систем безпеки, таких як SELinux.