Назад | Перейти на главную страницу

Расширенные ACL не всегда наследуются

У меня есть приложение, которое генерирует файлы отчетов в /opt/reports с файлами, принадлежащими root: root в 0600. Чтобы позволить внешней системе автоматически обрабатывать эти отчеты, я создал нового пользователя учетной записи службы с группой «report», изменил группу для /opt/reports чтобы сообщить и установить бит SUIG, затем установите ACL по умолчанию для/opt/reports каталог для включения группы отчетов с 400 и маски с 400.

Я заметил, что когда я вручную создаю файл, все разрешения устанавливаются должным образом, однако, когда приложение создает файл, значения по умолчанию не наследуются.

[root@reports1 ~]# getfacl /opt/reports
getfacl: Removing leading '/' from absolute path names
# file: opt/reports
# owner: root
# group: report
user::rwx
group::r-x
other::r-x

[root@reports1 ~]# setfacl -R -d -n -m g:report:r,m::r /opt/reports/
[root@reports1 ~]# getfacl /opt/reports
getfacl: Removing leading '/' from absolute path names
# file: opt/reports
# owner: root
# group: report
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x              #effective:r--
default:group:report:r--
default:mask::r--
default:other::r-x

Кажется, что создание файла вручную работает нормально

[root@reports1 ~]# echo "This is a test file" > /opt/reports/testfile.txt
[root@reports1 ~]# ls -l /opt/nessus_reports/testfile.txt
-rw-r--r--+ 1 root report 20 Apr 24 11:16 /opt/reports/testfile.txt
[root@reports1 ~]# getfacl /opt/reports/testfile.txt
getfacl: Removing leading '/' from absolute path names
# file: opt/reports/testfile.txt
# owner: root
# group: report
user::rw-
group::r-x                      #effective:r--
group:report:r--
mask::r--
other::r--

Однако при создании отчета с помощью приложения маска распространяется на новый файл.

[root@reports1 ~]# ls -l /opt/reports/018b274b-7c21-859d-6295-1af24b14da8451d8fe886e9c192d
-rw-------+ 1 root report 125952 Apr 24 11:18 /opt/reports/018b274b-7c21-859d-6295-1af24b14da8451d8fe886e9c192d
[root@reports1 ~]# getfacl /opt/reports/018b274b-7c21-859d-6295-1af24b14da8451d8fe886e9c192d
getfacl: Removing leading '/' from absolute path names
# file: opt/reports/018b274b-7c21-859d-6295-1af24b14da8451d8fe886e9c192d
# owner: root
# group: report
user::rw-
group::r-x                      #effective:---
group:report:r--                #effective:---
mask::---
other::---

Это ожидаемое поведение, и я просто неправильно понимаю используемую терминологию? Я где-то пропустил флаг или опцию? Я полностью подхожу к нему не с той стороны?

[Во-первых, похоже, что ваш бит SUIG потерян (я ожидал, что в выводе getfacl будет "flags: -s-"). Однако проблема здесь не в этом.]

Похоже, что генератор отчетов не только создает файл с umask 027, но и также выполняет явный chmod () для файла. Когда это происходит, маска ACL POSIX теряется.

Попробуйте следующее (как root):

touch /opt/reports/testfile.txt
getfacl /opt/reports/testfile.txt

chmod 640 /opt/reports/testfile.txt
getfacl /opt/reports/testfile.txt

Кажется, явный chmod () все портит.

Это поведение по умолчанию, потому что файлы при создании имеют ассоциацию пользователь: группа пользователя, который их создает. Однако надежда еще есть. Вам просто нужно убедиться, что при запуске приложения оно запускается пользователем, для которого группа отчетов является основной. Есть множество примеров того, как это сделать. Если вы посмотрите на некоторые сценарии в /etc/init.d, почти все они делают это при запуске службы. Удачи! (Кстати, это как бы показывает, что вы являетесь администратором Windows, поскольку все права наследования для дочерних объектов являются значениями по умолчанию для разрешений в стиле Windows, мысленный переход на acl в стиле Unix для файлов может быть немного сложным.)