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 и разберите типичные сбои сервиса — от занятого порта до переполненного диска.