如何在Mac上使用chmod来使新文件继承父目录权限?


23

我在Mac上。我要这样做,以便在特定文件夹内创建的任何新文件/文件夹都具有与父目录相同的权限(不是组,已经处理过)。在Linux上,我通常会使用setfacl,但在Mac上看起来像chmod也许可以满足我的需求。我已经阅读了chmod的手册页,但是仍然无法弄清楚如何正确格式化命令以获取所需的内容。


我希望新文件/文件夹可以组可读和可写。

Answers:


33

首先,有一些背景信息来说明正在发生的情况: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的服务器管理工​​具外)强制继承移入文件夹的项目。


感谢您的出色解释。我只是尝试了一下,它仍然只是创建了一个具有用户读/写权限的新文件,其他人都具有读取权限。父文件夹(室外)设置为775权限,我的用户(jhicks)为所有者,_www为组。我已将自己添加到_www组。drwxrwxr-x + 13个街拍_www 442B 11月16日09:47在户外我按如下方式运行您的命令:chmod + a“ group:_www允许列表,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,目录“在户外”
杰里米·希克斯

ls -l仅显示POSIX权限(尽管该权限后的“ +”表示存在ACL)。也ls -le用于显示ACL。
Gordon Davisson

如果组名中有空格,则可以使用:作为分隔符。例如,“ group:my group with a space:allow”
Doug Richardson

遵循chmod +a ...命令,然后在文件夹中创建了一个abc.txt。切换到另一个用户并使用TextEdit进行编辑,该文件显示为“已锁定”,并且不可编辑。
哦,

我一直在玩这个游戏,我想你是通过+ ai强制继承的
Robin

4

尝试添加-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附加在最前面。


4

(-R)不是大多数人想要做的。大多数情况下,他们希望更改最顶层目录上的ACL,并执行一些魔术操作,以强制所有包含的对象根据在该子树的根上指定的ACL继承标志。这更加优雅,因为对象上的ACL将根据策略对这些继承的ACE进行排序。

是的,我必须编写一个python脚本来执行此操作,我也没有找到任何合适的方法。


2
您是否愿意分享(例如,要点?如果您不介意的话,我认为这是一个很好的手势。)
Myhd 2012年


0

在Mac上,尝试使用PathFinder,可以轻松设置ACL和POSIX。如果您要在Mac Server上托管WordPress,则还需要define('FS_METHOD', 'direct');在wp-config.php中进行设置,以便安装插件和升级不会要求您提供FTP详细信息。

因此,基本上,您将保留默认的POSIX权限,并将用户_www(而非组)添加到ACL,然后在ACL窗口中单击“传播权限”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.