Пользователи, группы и sudo: кому разрешена операция

Linux связывает процесс с идентификаторами пользователя и групп. Файловые права, сигналы, сокеты и запуск service проверяются относительно этих идентификаторов, а не относительно…

Linux связывает процесс с идентификаторами пользователя и групп. Файловые права, сигналы, сокеты и запуск service проверяются относительно этих идентификаторов, а не относительно имени, которое человек видит в приглашении shell.

Узнать действующий контекст

id показывает uid, основную и дополнительные группы. getent passwd и getent group используют настроенные источники учётных записей, поэтому работают не только с локальными файлами /etc/passwd и /etc/group.

id
id -un
getent passwd "$(id -un)"
getent group | head

Новый group membership обычно попадает в процесс при входе в сессию. Если администратора добавили в группу, старый терминал может продолжать работать с прежним списком. Сравните id в проблемной сессии и после нового входа.

Владение и совместная работа

chown owner:group path меняет владельца и группу, chgrp — только группу. Рекурсивное изменение нужно применять к точно проверенному дереву: симлинки, mount points и вновь создаваемые файлы могут нарушить ожидания.

mkdir -p /tmp/team-demo
stat -c '%U:%G %a %n' /tmp/team-demo
chmod g+rwx /tmp/team-demo
chmod g+s /tmp/team-demo

Setgid-бит на каталоге помогает новым объектам наследовать группу каталога, но итоговые права всё равно зависят от umask и программы.

Что делает sudo

sudo запускает конкретную команду с другой identity согласно policy. Оно не превращает весь текущий shell в root и не обязано сохранять пользовательское окружение. Всегда передавайте минимальную команду, а не открывайте долгоживущий привилегированный shell.

sudo -l
sudo -- id
sudo -- systemctl status example.service

sudo -l показывает разрешённые правила. Наличие sudo не означает, что любое действие безопасно или предусмотрено эксплуатационным процессом.

Ошибка и диагностика

При Permission denied не начинайте с sudo. Зафиксируйте id, владельца и режим через stat, права родителей и точную операцию. Если процесс запускает systemd, его User/Group могут отличаться от интерактивного пользователя. Повтор команды с sudo иногда скрывает неверное место хранения файла и создаёт root-owned артефакты, которые позже ломают обычный запуск.

Практика

Исследуйте собственный uid и группы, найдите запись через getent. В каталоге /tmp/team-demo включите setgid, создайте вложенный файл и сравните его группу и mode. Не меняя системных пользователей, письменно определите минимальные права для чтения участниками группы без записи остальными.

Что важно запомнить

Источники