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

странности во вмешательстве расширенных ACL 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 «обычных» разрешений?

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

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

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

Мы используем что-то подобное при создании нового каталога с файлами, защищенными 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