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

Как по-разному настроить ACL Linux по умолчанию для каталогов и файлов

У меня есть некоторые ACL, определенные в каталоге так:

# owner: root
# group: root
user::rwx
group::r--
mask::r-x
other::r--
default:user::r--
default:group::r--
default:mask::r-x
default:other::r--

Я хотел бы, чтобы все новые файлы, созданные в этой папке, были u: apache: r--, а все новые каталоги были u: apache: r-x. Как мне указать это намерение с помощью ACL?

Я пробовал -dm u:apache:rX и, похоже, он не делает ничего другого по сравнению с просто rx

overt htdocs # getfacl .
# file: .
# owner: root
# group: root
user::rwx
user:apache:r--
group::r--
mask::r-x
other::r--
default:user::r--
default:user:apache:r--
default:group::r--
default:mask::r--
default:other::r--

overt htdocs # setfacl -dm u:apache:rx .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

overt htdocs # rm blah.txt
overt htdocs # setfacl -dm u:apache:rX .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

Разрешение с заглавной буквы X кажется полезным только для установки текущих разрешений, а не для настройки разрешений по умолчанию:

overt htdocs # setfacl -x u:apache blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
group::r--
mask::r--
other::r--

overt htdocs # setfacl -m u:apache:rX blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r--
group::r--
mask::r--
other::r--

Что ж, но ваш пример делает именно то, что вы хотите;)

Посмотрите на вторую:

overt htdocs # setfacl -dm u:apache:rx .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

Важная строка:

user:apache:r-x #effective:r--

Несмотря на то, что для acl установлено значение r-x, для файлов это фактически r--. Это из-за маски.

И маска всегда будет только rw- для файлов, если пользователь создал ее с правами rw- для пользователя. (Я не уверен на 100%, но маска не может быть менее строгой, чем базовые разрешения).

Таким образом, вы получаете r-- для файлов и r-x для каталогов.
Поскольку созданные каталоги будут иметь user: r-x -> маска будет r-x -> эффективное разрешение будет r-x.
Для файлов: у них будет r - поэтому маска будет r - и эффективные разрешения для ACL также будут r--. (Если вы создадите файл и предоставите ему права доступа user :: r-x, тогда маска будет изменена, и пользователи из acl также получат x)

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

С таким же успехом вы можете просто смириться с тем, что все файлы в ACL будут исполняемыми. На самом деле это просто удобство, а не функция безопасности, и пока вы не помещаете эти папки в свой $ PATH, это не должно быть проблемой. Если вас это по-прежнему беспокоит, единственный выбор - поместить папки, контролируемые ACL, в файловую систему, смонтированную без возможности выполнения.

-d (или --default) используется для установки значений по умолчанию в каталоге, чтобы все, что создано в нем, наследовало перма (как вы, кажется, делаете).

Вот краткий обзор. http://www.vanemery.com/Linux/ACL/linux-acl.html#default

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

Вы можете запустить сценарий из cron, который каждую минуту выполняет setfacl для всех каталогов, хотя это далеко не идеальное решение.

найти / путь / к / верх / каталог -тип d -exec setfacl -dm u: apache: rx {} \;

или

найти / путь / к / верх / каталог -тип d | xargs setfacl -dm u: apache: rx

это сообщение о ACL и масках действительно помогло мне понять, как делать то, что я хочу, и почему.

Недостаток моего понимания заключался в том, что при создании файла ядро ​​использует набор разрешений по умолчанию 0666 и для новых каталогов 0777. Таким образом, по умолчанию для каталогов будет установлен бит выполнения (перемещения).

Маска ACL - это, по сути, способ установить umask на уровне каталога / файла / пользователя.