На МакОС . Я хочу сделать так, чтобы любые новые файлы/папки, создаваемые в определенной папке, имели те же разрешения ( а не группу , о которых уже позаботились), как и права родительского каталога.
В Linux я бы обычно использовал setfacl
, но похоже, что chmod
в MacOS можно делать то, что я ищу. Я прочитал man
страницу, chmod
но до сих пор не могу понять, как правильно отформатировать команду, чтобы получить то, что я хочу.
Во-первых, немного предыстории, чтобы объяснить, что происходит: файлы в OS X могут иметь два совершенно разных типа настроек разрешений, применяемых к ним: POSIX и ACL.
К файлам всегда (ну, почти всегда) применяются разрешения POSIX, состоящие из владельца, группы и других (с некоторой комбинацией чтения, записи и выполнения для каждого из них). Невозможно контролировать наследование разрешений POSIX: новые элементы всегда принадлежат тому пользователю, который их создал, групповое назначение наследуется от папки, в которой они находятся, а доступ определяется umask (что почти всегда: владелец получает полный доступ, группа и другие только чтение + выполнение для папок). Таким образом, разрешения POSIX не будут работать для того, что вы пытаетесь сделать.
К файлам также может применяться список управления доступом (ACL). Это список записей управления доступом (ACE), каждая из которых относится к пользователю или группе, определяет типы доступа (подробно), разрешены они или запрещены, а также следует ли копировать ACE в элементы, созданные внутри папки. Эта последняя часть — та часть, которая делает это полезным для вас; вам нужно создать ACE для папки, в которой указаны нужная группа, типы доступа, которые вы хотите, и полное наследование.
chmod
в OS X можно манипулировать ACE с параметрами разрешений +a
, -a
, и т.д. Если я понимаю, что вы хотите, вы должны использовать это (с заменой имени вашей группы и пути к папке) для создания ACE:
chmod +a "group:examplegroup allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" /path/to/folder
Примечание : наследование не является «живым», т.е.:
Вы можете применить его к существующему содержимому, используя -R
(т.е.: chmod -R +a ...
). Я не знаю способа (кроме инструментов администрирования сервера Apple) принудительно наследовать элементы, перемещенные в папку.
Попробуйте добавить -R
к команде @gordon, например:
chmod -R +a "group:_www allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" outdoors
Опция -R
будет (как указано здесь ):
Recurse: измените режим файловых иерархий, основанных на файлах, а не только на самих файлах.
Изменение иерархии файлов, кажется, то, что вы ищете (для новых файлов, каталогов и т. д.).
Вы также можете ознакомиться с этой публикацией Apple.SE , в которой описана ситуация, несколько похожая на вашу (за исключением общего каталога), которая требовала sudo
прикрепления на передний план.
Это (-R) не то, к чему стремится большинство людей; в большинстве случаев они предпочли бы изменить ACL в самом верхнем каталоге и сделать что-то волшебное, чтобы заставить все содержащиеся объекты наследовать флаги в соответствии с ACL, который они указали в корне этого поддерева. Это намного элегантнее, так как ACL для объектов сортируют эти унаследованные ACE в соответствии с политикой.
И да, для этого мне пришлось написать скрипт на питоне, я тоже ничего подходящего не нашел.
На Mac попробуйте использовать PathFinder , это упрощает настройку ACL и POSIX. Если вы размещаете WordPress на Mac Server, вам также необходимо установить define('FS_METHOD', 'direct');
в wp-config.php, чтобы установка плагинов и обновление не запрашивали у вас данные FTP.
Таким образом, в основном вы сохраняете разрешения POSIX по умолчанию и добавляете пользователя _www (не группу) в ACL, затем нажимаете «Распространить разрешение» в окне ACL.
chmod +ai, i = наследовать правила ACL
Джереми Хикс
Гордон Дэвиссон
ls -l
показывает только разрешения POSIX (хотя «+» после разрешений указывает на наличие ACL). Используйтеls -le
также для отображения ACL.Дуг Ричардсон
охо
chmod +a ...
команду, я создал в папке файл abc.txt . Переключился на другого пользователя и отредактировал с помощью TextEdit, файл указан как заблокированный и не редактируемый.Робин