linux / setfacl - устанавливает все текущие / будущие файлы / каталоги в родительском каталоге на 775 с указанным владельцем / группой

42

У меня есть каталог под названием "члены", и под ним есть папки / файлы. Как я могу рекурсивно установить все текущие папки / файлы и любые будущие созданные там файлы по умолчанию с разрешениями 775 и принадлежать соответственно владельцу / группе nobody / admin? Я включил ACL, смонтировал, но не могу получить команду setfacl, чтобы сделать это правильно. Есть идеи, как этого добиться?

инакомыслящий
источник

Ответы:

62

На самом деле я нашел кое-что, что до сих пор делает то, что я просил, поделившись здесь, чтобы любой, кто сталкивается с этой проблемой, мог попробовать это решение:

sudo setfacl -Rdm g:groupnamehere:rwx /base/path/members/
sudo setfacl -Rm g:groupnamehere:rwx /base/path/members/

R является рекурсивным, что означает, что ко всему в этом каталоге будет применено правило.
По умолчанию d означает, что для всех будущих элементов, созданных в этом каталоге, эти правила применяются по умолчанию. м необходимо добавить / изменить правила.

Первая команда предназначена для новых элементов (отсюда d), вторая команда предназначена для старых / существующих элементов в папке. Надеюсь, это поможет кому-то, потому что это немного сложно и не очень интуитивно понятно.

инакомыслящий
источник
2
Это как раз то, что мне нужно, чтобы владелец каталога прародителя мог правильно изменять содержимое каталогов новых внуков.
Joost
Если вы единственный пользователь вашего Rpi, вы можете заменить g: groupname на pi: pi или просто pi
SDsolar
Вы можете указать для пользователя, групп и других в одной строке, например -Rdm g:groupnamehere:rwx, -Rdm u:groupnamehere:rwx.
user2340939
18

Чтобы пойти с вашим принятым ответом ...

Вы можете объединить эти команды вместе как:

sudo setfacl -Rm d:g:groupnamehere:rwx,g:groupnamehere:rwx /base/path/members/
Джошуа
источник
Это круто. Почему вы поставили d:на первый пункт, а не -Rmd? Я могу сказать, что второй параметр не должен иметь default- просто странно, как Linux принимает его мне.
JREAM
1
@JREAM: Linux ( на самом деле getopt_long) отправляет весь аргумент опцию-m , который анализируется вручную путем setfacl, разделяя их запятыми передаваемых аргументов. Они добавляются в связанный список, который проходит в конце при фактическом изменении ACL.
Бенуа Даффес
2

setfacl на Linux имеет -dи -kвозможности для манипулирования разрешения по умолчанию , которые, вероятно , то , что вы ищете (см человека для получения дополнительной информации).

peterph
источник
1

Легко рекурсивно устанавливать простые разрешения UNIX по требованию соответствующим образом авторизованного пользователя, разрешений каталогов и файлов. Невозможно автоматически навязать это.

Вы можете указать пользователям использовать набор umask 0002, и это помогает создавать новые файлы в 0775 (в зависимости от приложения). Но это не подлежит исполнению.

Насколько я понимаю, ACL не наследуются в системах UNIX / Linux. Они устанавливаются по требованию.

Что касается владения файлами / каталогами, вам здесь не повезло.

Что касается владения файлом / группой каталогов, то при установке бита set-gid каталога (т. Е. G + s в DIRECTORIES) это приводит к наследованию владения группой.

В таких ситуациях я выполняю периодический скрипт корневого cron, который сбрасывает несоответствующие права / права доступа в стандарт в таких каталогах.

Другой (НЕ РЕКОМЕНДУЕМЫЙ) процесс должен иметь тот же идентификатор пользователя, который будет использоваться при работе с этими файлами. Это может быть достигнуто путем входа пользователя в систему под своим собственным UID, а затем с помощью sudo или su для запуска в качестве идентификатора. Это все еще не на 100%, особенно в отношении ACL и битов разрешений.

Якорь,
источник