странности во взаимодействии расширенных списков контроля доступа Linux и «обычных» разрешений

странности во взаимодействии расширенных списков контроля доступа Linux и «обычных» разрешений

У меня есть устаревший код, который проверяет, что некоторый файл доступен только для чтения и может читать только его владелец, т. е. разрешения установлены на 0400. Мне также нужно предоставить доступ только для чтения к этому файлу какому-то другому пользователю в системе. Я пытаюсь установить расширенные ACL, но это также изменяет «обычные» биты разрешений странным образом:

$ ls -l hostkey.pem 
-r-------- 1 root root 0 Jun  7 23:34 hostkey.pem
$ setfacl -m user:apache:r hostkey.pem 
$ getfacl hostkey.pem 
# file: hostkey.pem
# owner: root
# group: root
user::r--
user:apache:r--
group::---
mask::r--
other::---

$ ls -l hostkey.pem 
-r--r-----+ 1 root root 0 Jun  7 23:34 hostkey.pem

И после этого устаревший код начинает жаловаться, что файл доступен для чтения группой (хотя на самом деле это не так!)

Можно ли настроить расширенные списки контроля доступа таким образом, чтобы какой-то другой пользователь также имел доступ только для чтения, в то время как файл будет иметь только «обычные» разрешения 0400?

решение1

Мы видели что-то подобное в наших экспериментах с ACL Linux, особенно через Samba. Но в большинстве случаев, даже если обычные биты разрешения/режима файла изменяются странным образом, система по-прежнему работает в целом так, как и предполагалось.

Я помню, как где-то читал (не помню где, извините), что при создании файлов (возможно, через Samba) разрешения ACL не были правильно отражены в битах режима, пока данные не были записаны в файл. Это могло повлиять на файлы, созданные с помощью, например, touch.

Еще один вопрос, который следует рассмотреть, — это необходимость установки списков контроля доступа по умолчанию.

Мы используем что-то подобное при создании нового каталога с файлами, защищенными ACL; последняя команда, с getfacl, подключенным к setfacl, копирует текущие установленные ACL, которые будут использоваться в качестве ACL по умолчанию для новых файлов, создаваемых в этом каталоге:

chown --recursive $username:$userrole /home/data/private/$datadir
chmod --recursive u=rwx,g=,o= /home/data/private/$datadir

# remove previous ACLs
setfacl --recursive --remove-all /home/data/private/$datadir

# User/group access for owner, group leader and web server
setfacl --recursive -m u:$username:rwx /home/data/private/$datadir
setfacl --recursive -m g:RGLeader:rx /home/data/private/$datadir
setfacl --recursive -m u:www-data:rwx /home/data/private/$datadir

# Copy access modes to default access modes
getfacl --access /home/data/private/$datadir | setfacl --recursive -d -M- /home/data/private/$datadir

Связанный контент