У меня есть некоторые списки 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: rx. Как мне указать это намерение, используя 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--
источник
#effective
текст! Спасибо за объяснение того, как маски влияют на эффективные разрешения.К сожалению, с Linux ACL просто невозможно это сделать. Это правда, что маска будет делать именно то, что вы хотите, насколько эффективные разрешения. Но в следующий раз, когда вы выполните операцию, которая пересчитывает маску прав, bam , все ваши файлы станут исполняемыми.
Вы также можете смириться с тем, что все файлы в ACL будут исполняемыми. Это на самом деле просто удобство, а не функция безопасности, и до тех пор, пока вы не поместите эти папки в $ PATH, это не должно быть проблемой. Если это по-прежнему вас беспокоит, единственный вариант - поместить управляемые ACL папки в файловую систему, смонтированную без опции execute.
источник
-d (или --default) используется для установки значений по умолчанию в каталоге, чтобы созданные в нем объекты наследовали привилегии (как вы, похоже, делаете).
Вот краткий обзор. http://www.vanemery.com/Linux/ACL/linux-acl.html#default
Невозможно, чтобы файлы имели одно значение по умолчанию, а каталоги имеют другое значение по умолчанию.
Вы можете запустить скрипт из cron, который выполняет setfacl для всех папок каждую минуту - хотя это не идеальное решение.
find / path / to / top / dir -type d -exec setfacl -dm u: apache: rx {} \;
или
find / path / to / top / dir -type d | xargs setfacl -dm u: apache: rx
источник
Этот пост о ACL и Масках действительно помог мне понять, как делать то, что я хотел, и почему.
Недостающая часть моего понимания состояла в том, что при создании файла ядро использует набор разрешений по умолчанию 0666 и для новых каталогов 0777. Таким образом, по умолчанию в каталогах будет установлен бит выполнения (traverse).
Маска ACL - это в основном способ установки
umask
на уровне каталога / файла / пользователя.источник