Пользователи, группы и 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-demoSetgid-бит на каталоге помогает новым объектам наследовать группу каталога, но итоговые права всё равно зависят от umask и программы.
Что делает sudo
sudo запускает конкретную команду с другой identity согласно policy. Оно не превращает весь текущий shell в root и не обязано сохранять пользовательское окружение. Всегда передавайте минимальную команду, а не открывайте долгоживущий привилегированный shell.
sudo -l
sudo -- id
sudo -- systemctl status example.servicesudo -l показывает разрешённые правила. Наличие sudo не означает, что любое действие безопасно или предусмотрено эксплуатационным процессом.
Ошибка и диагностика
При Permission denied не начинайте с sudo. Зафиксируйте id, владельца и режим через stat, права родителей и точную операцию. Если процесс запускает systemd, его User/Group могут отличаться от интерактивного пользователя. Повтор команды с sudo иногда скрывает неверное место хранения файла и создаёт root-owned артефакты, которые позже ломают обычный запуск.
Практика
Исследуйте собственный uid и группы, найдите запись через getent. В каталоге /tmp/team-demo включите setgid, создайте вложенный файл и сравните его группу и mode. Не меняя системных пользователей, письменно определите минимальные права для чтения участниками группы без записи остальными.
Что важно запомнить
- Решение о доступе принимает ядро по identity процесса, владельцу, группе и режиму объекта.
- Старый процесс не обязан увидеть новое членство в группе.
- sudo — контролируемый запуск одной команды, а не универсальное исправление Permission denied.