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.