Модель прав в Linux
Вопрос
Расскажи, как Linux решает, можно ли процессу открыть файл на запись. Какие механизмы есть кроме rwx?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Проверяется эффективный UID процесса: владелец, затем группа (включая дополнительные), затем остальные, срабатывает первый подходящий класс
Root (UID 0) обходит проверки rwx, его сила разбита на capabilities
Для удаления и создания важны права на каталог, а не на файл
SUID/SGID меняют эффективные UID/GID при запуске программы
ACL (`getfacl`/`setfacl`) дают права отдельным пользователям и группам сверх трёх классов
Поверх могут стоять MAC-системы (SELinux, AppArmor) и атрибуты вроде `chattr +i`
Что могут спросить следом
- Если владелец имеет
---, а остальныеrw-, может ли владелец писать? - Что такое capabilities и пример полезной?
- Чем ACL лучше добавления пользователя в группу?
Разбор
Ядро берёт эффективный UID и GID процесса и смотрит классы по очереди. Если процесс владелец, применяются права владельца, и всё, дальше не смотрим. Иначе, если процесс в группе файла (основной или дополнительной), применяются права группы. Иначе права остальных. Отсюда неочевидное: владелец с --- не сможет писать, даже если остальным разрешено. Root проходит проверки rwx, но в современном ядре его полномочия разбиты на capabilities, например CAP_DAC_OVERRIDE или CAP_NET_BIND_SERVICE, и их можно выдавать по одной. Создание и удаление зависят от прав на каталог. SUID и SGID меняют эффективные идентификаторы при запуске. Когда трёх классов мало, есть ACL: setfacl -m u:deploy:rw file. А поверх DAC работают SELinux или AppArmor, которые могут запретить доступ даже root, и атрибут immutable chattr +i.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.