user2
Необходимо выйти и снова войти. Разрешения группы работают следующим образом:
- Когда вы входите в систему, ваши процессы получают членство в группе, указанной в вашей основной группе
/etc/passwd
, плюс все группы, в которых упоминается ваш пользователь /etc/group
. (Более точно, pw_gid
поле getpw(your_uid)
, плюс все группы которых ваш пользователь является явным членом . За /etc/passwd
и /etc/group
, информация может поступать из других видов пользовательских баз данных , таких как NIS или LDAP.) Основная группа становится процессом в эффективный идентификатор группы и другие группы становятся его дополнительными идентификаторами групп .
- Когда процесс выполняет операцию, которая требует членства в определенной группе, например, для доступа к файлу , эта группа должна быть либо действующим идентификатором группы, либо одним из идентификаторов дополнительных групп процесса.
Как вы можете видеть, ваше изменение членства в группе пользователя вступает в силу только тогда, когда пользователь входит в систему. Для запущенных процессов это слишком поздно. Таким образом, пользователь должен выйти из системы и снова войти в нее. Если это слишком сложно, пользователь может войти в отдельный сеанс (например, на другой консоли или с помощью ssh localhost
).
В рамках процесса процесс может только потерять привилегии (идентификаторы пользователей, идентификаторы групп, возможности). Ядро запускает init
процесс (первый процесс после загрузки), выполняющийся от имени пользователя root, и каждый процесс в конечном итоге происходит от этого процесса¹. login
Процесс (или sshd
, или часть вашего рабочего стола менеджера , который регистрирует вас) все еще работает как корень. Частью его работы является удаление привилегий root и переключение на соответствующих пользователей и группы.
Есть одно исключение: выполнение программы setuid или setgid . Эта программа получает дополнительные разрешения: она может действовать в различных подмножествах членства родительского процесса плюс дополнительное членство в пользователе или группе, которой принадлежит исполняемый файл setxid. В частности, корневая программа setuid имеет root-права, поэтому может делать все²; Вот как программы любят su
и sudo
могут делать свою работу.
Occasion
Иногда возникают процессы, которые не являются производными от init (initrd, udev), но принцип тот же: запускайте с правами root и со временем теряйте привилегии.
²
Запрет многоуровневых сред безопасности, таких как SELinux.