Например, я хочу дать моим коллегам доступ для записи в определенный каталог. Предположим, что подкаталоги в нем имели права доступа 775, файлы 664, а также было несколько исполняемых файлов в каталоге - 775.
Теперь я хочу добавить разрешения на запись. С chmod я мог бы попробовать что-то вроде
chmod o+w -R mydir/
Но это не круто, так как я не хочу делать dir доступным для записи в мире - я хочу предоставить доступ только определенным пользователям, поэтому я хочу использовать ACL. Но есть ли простой способ установить эти разрешения? На мой взгляд, мне нужно рассмотреть как минимум три случая (каталоги, файлы, исполняемые файлы) отдельно:
find -type d -exec setfacl -m u:colleague:rwx {} \;
find -type f -executable -exec setfacl -m u:colleague:rwx {} \;
find -type f \! -executable -exec setfacl -m u:colleague:rw {} \;
Кажется, довольно много строк кода для такой простой задачи. Есть ли способ лучше?
источник
-X
не работает, как ожидается, включена вsetfacl 2.2.49
.Как упоминалось umläute, команда
setfacl -R
с заглавной буквой «X» - это путь, например:Тем не менее, для тех, кому нужно повторно применять ACL рекурсивно (то есть, например, «повторно применить разрешения для подкаталогов» в Windows).
Эта команда может быть разделена, чтобы избежать ошибки, как
setfacl: foobar: Only directories can have default ACLs
.Обратите внимание , что синтаксис
<( something )
является Подстановкой процессов , который является специфичным для Баша. Вам может понадобиться создать временный файл, если вы используете другую оболочку.источник
источник
for i in $(find …)
.find /data -mindepth 0 -type d -exec setfacl -m u:zabbix:r-X {} \;
$(find /data -mindepth 0 -type d)
не будет возвращать результаты построчно, он будет буферизовать результаты целиком. Если в строке есть пробел, вы получите неверную запись в$i
переменной.