Общий каталог работает только со старыми файлами: задаём default ACL
В общей папке текущие отчёты доступны команде, а завтрашние снова оказываются закрыты. Разовое setfacl на файлах исправило только существующие объекты. Для новых файлов нужен отдельный контракт создания: default ACL каталога, подходящий режим приложения и понятные правила появления данных.
Разделить текущие и наследуемые права
getfacl /srv/team-reports getfacl /srv/team-reports/today.csv
В выводе каталога ищите строки default:. Обычные user, group и mask управляют доступом к самому каталогу. Записи default используются при создании внутри него новых объектов. Наличие разрешения на каталог ещё не означает, что новый файл унаследует его в подходящем виде.
Например, access ACL уже содержит group:analysts:rwx, но default-записей нет. Члены группы входят в каталог и видят старые файлы, однако режим новых определяется обычным созданием. Значит, исправление нужно в наследовании, а не в очередной рекурсивной обработке вчерашних файлов.
Задать правило на учебном каталоге
setfacl -m g:analysts:rwx,m::rwx /srv/team-reports setfacl -m d:u::rwx,d:g::r-x,d:g:analysts:rwx,d:m::rwx,d:o::--- /srv/team-reports getfacl /srv/team-reports
Пример предполагает существующую группу analysts и согласованную политику доступа. Для файла, создаваемого с обычным mode 0666, executable-биты не появятся только потому, что в default ACL указано x. Режим создания ограничивает унаследованные права. Для каталога право прохода необходимо, поэтому проверяют и файл, и вложенную папку.
Механизм описан в acl(5). Практическое следствие: программа, создающая файл с 0600, не станет автоматически делиться им с группой через default ACL. Тогда потребуется менять поддерживаемую настройку приложения или организовать отдельный этап выдачи доступа.
Проверить настоящий способ доставки
Создайте новый отчёт тем же приложением и под тем же пользователем, который будет работать в production. Проверьте ACL результата. Затем повторите создание вложенного каталога и файла в нём. Так видно, продолжает ли действовать правило на следующем уровне дерева.
Перемещение существующего файла внутри одной файловой системы обычно сохраняет его inode и прежние ACL. Оно не является новым созданием в целевом каталоге, поэтому ожидать применения default ACL нельзя. Копирование и перенос между файловыми системами могут вести себя по-разному в зависимости от программы и параметров сохранения атрибутов. Разберите именно ваш путь публикации отчёта.
Не забыть существующие данные
Default ACL не исправляет вчерашние файлы. Для них отдельно согласуйте access ACL и объём изменения. Перед массовой операцией сохраните getfacl существующего дерева и проверьте выборку файлов разных типов. Особенно внимательно относитесь к приватным файлам, которые случайно лежат рядом с общими.
Критерий готовности — участник группы читает и редактирует новый результат после реального запуска приложения, а посторонний пользователь доступа не получает. В программе Linux и Bash для DevOps-инженеров есть практика с правами и пользователями. Откройте её, чтобы связывать настройки каталогов с фактической работой сервиса и команды.
Ещё по теме
Продолжить на практике
- Linux и Bash для DevOps-инженеров ↗
Linux для работы с серверами: процессы, права, systemd, сеть, диски и логи. Автоматизируйте повседневные задачи на Bash и разберите типичные сбои сервиса — от занятого порта до переполненного диска.
