ACL разрешает запись, но файл недоступен: проверяем mask
Для аналитика добавили ACL с rw, однако редактор продолжает сообщать Permission denied. Владелец показывает строку user:anna:rw- как доказательство разрешения. В расширенной ACL этого недостаточно: именованные пользователи и группы ограничиваются общей маской. Поэтому в записи может быть одно разрешение, а реально действовать более узкое.
Прочитать эффективный доступ
getfacl /srv/reports/result.csv id anna ls -l /srv/reports/result.csv
Учебный фрагмент вывода может выглядеть так:
user::rw-
user:anna:rw- #effective:r--
group::r--
mask::r--
other::---Здесь для anna запись rw- пересекается с mask r--, поэтому остаётся только чтение. Это объясняет отказ без предположений о редакторе. Права владельца и other действуют по своим правилам; mask ограничивает класс групповых прав и именованные записи. Полный алгоритм проверки приведён в acl(5).
Почему маска могла измениться
Посмотрите недавние операции chmod и команды доставки файлов. При расширенной ACL групповые биты, показанные ls, соответствуют маске, а не просто записи group::. Поэтому привычная команда chmod g-w может ограничить и именованного пользователя. Программа, которая восстанавливает режим файла после записи, тоже способна изменить ожидаемый доступ.
Проверьте, редактирует ли приложение существующий файл или создаёт новый и переименовывает поверх старого. Во втором случае ACL старого inode не объясняет права нового объекта. Сравните номер inode и способ сохранения. Иначе администратор будет снова исправлять mask после каждого сохранения, не устранив источник.
Исправить только нужную границу
setfacl -m u:anna:rw-,m::rw- /srv/reports/result.csv getfacl /srv/reports/result.csv
Это пример изменения конкретного файла после проверки текущих записей. Расширение mask до rw- может активировать запись и для других записей, у которых она уже присутствовала, но была скрыта маской. До команды просмотрите всю ACL. Если другой группе запись не нужна, скорректируйте её запись отдельно, сохраняя принцип минимального доступа.
У setfacl есть автоматический пересчёт mask; явная маска в примере делает ожидаемый результат видимым. Не применяйте рекурсивную замену ко всему дереву ради одного файла: права каталогов и файлов имеют разный смысл, а в дереве могут лежать чужие данные.
Проверить тем же способом доступа
Повторите операцию от имени anna в той же среде, где был отказ. Успех touch в соседнем каталоге не доказывает возможность записи в result.csv. Если маска уже разрешает нужное, проверьте проход по родительским каталогам, readonly-монтирование и дополнительные механизмы безопасности. ACL отвечает только за свой слой решения.
В курсе Linux и Bash для DevOps-инженеров работа с правами и пользователями включена в настройку учебного сервиса. Откройте программу, чтобы отработать доступ как проверяемое поведение конкретного пользователя и процесса.
Ещё по теме
Продолжить на практике
- Linux и Bash для DevOps-инженеров ↗
Linux для работы с серверами: процессы, права, systemd, сеть, диски и логи. Автоматизируйте повседневные задачи на Bash и разберите типичные сбои сервиса — от занятого порта до переполненного диска.
