我在Mac上。我要这样做,以便在特定文件夹内创建的任何新文件/文件夹都具有与父目录相同的权限(不是组,已经处理过)。在Linux上,我通常会使用setfacl,但在Mac上看起来像chmod也许可以满足我的需求。我已经阅读了chmod的手册页,但是仍然无法弄清楚如何正确格式化命令以获取所需的内容。
我在Mac上。我要这样做,以便在特定文件夹内创建的任何新文件/文件夹都具有与父目录相同的权限(不是组,已经处理过)。在Linux上,我通常会使用setfacl,但在Mac上看起来像chmod也许可以满足我的需求。我已经阅读了chmod的手册页,但是仍然无法弄清楚如何正确格式化命令以获取所需的内容。
Answers:
首先,有一些背景信息来说明正在发生的情况:OS X中的文件可以应用两种截然不同的权限设置:POSIX和ACL。
始终(几乎几乎总是)对文件应用POSIX权限,该权限包括所有者,组和其他文件(具有对每个文件的读取,写入和执行的某种组合)。无法控制POSIX权限的继承:新项目始终由创建它们的任何用户拥有,组分配是从它们所在的文件夹继承的,而访问权限则由umask决定(这几乎总是这样:拥有者拥有完全访问权限,而组和其他则具有只读权限+对文件夹执行)。因此,POSIX权限对您要执行的操作无效。
文件也可以应用访问控制列表(ACL)。这是访问控制项(ACE)的列表,每个访问控制项都适用于用户或组,详细说明访问类型,允许或拒绝访问以及是否还应将ACE复制到在文件夹内创建的项目。最后一点是使这一点对您有用的部分;您需要在文件夹上创建一个ACE,以指定所需的组,所需的访问类型以及完全继承。
OS X上的chmod可以使用+ a,-a等权限选项操作ACE。如果我了解您想要的内容,则可以使用它(替换您的组名和文件夹路径)来创建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
请注意,继承不是“实时的”,即,它不适用于分配ACE之前创建的项目,也不适用于在其他位置创建然后移入文件夹的项目。您可以使用-R(chmod -R +a ...)将其应用于现有内容。我不知道有一种方法(除Apple的服务器管理工具外)强制继承移入文件夹的项目。
ls -l仅显示POSIX权限(尽管该权限后的“ +”表示存在ACL)。也ls -le用于显示ACL。
chmod +a ...命令,然后在文件夹中创建了一个abc.txt。切换到另一个用户并使用TextEdit进行编辑,该文件显示为“已锁定”,并且不可编辑。
尝试添加-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选项(如注意这里):
递归:更改植根于文件中而不是仅文件本身的文件层次结构的模式。
更改文件层次结构似乎是您所要的(对于新文件,目录等)。
您也可以查看此Apple.SE帖子,该帖子涉及的情况与您的情况有些类似(与共享目录有关的情况除外),这需要sudo附加在最前面。
(-R)不是大多数人想要做的。大多数情况下,他们希望更改最顶层目录上的ACL,并执行一些魔术操作,以强制所有包含的对象根据在该子树的根上指定的ACL继承标志。这更加优雅,因为对象上的ACL将根据策略对这些继承的ACE进行排序。
是的,我必须编写一个python脚本来执行此操作,我也没有找到任何合适的方法。
在Mac上,尝试使用PathFinder,可以轻松设置ACL和POSIX。如果您要在Mac Server上托管WordPress,则还需要define('FS_METHOD', 'direct');在wp-config.php中进行设置,以便安装插件和升级不会要求您提供FTP详细信息。
因此,基本上,您将保留默认的POSIX权限,并将用户_www(而非组)添加到ACL,然后在ACL窗口中单击“传播权限”。