如何在Mac OS X上复制ACL?


13

大多数unix派生可以使用以下命令将ACL从一个文件复制到另一个文件:

getfacl filename1 | setfacl -f - filename2

不幸的是,Mac OS X没有getfacl和setfacl命令,因为它们已将ACL处理滚动到chmod中。chmod -E在stdin上接受ACL的列表,但是我还没有找到可以在stdout上以适当格式吐出ACL的命令。我想出的最好的是:

ls -led filename1 | tail +2 | sed 's/^ *[0-9][0-9]*: *//' | chmod -E filename2

有没有更强大的解决方案?

额外的问题:是否有一个不错的方法可以在Python中完成,而无需使用10.6随附的任何模块?


所以现在是2020年,而macOS仍然没有getfacl/ setfacl。非常了不起。github.com/jvscode/getfacl已经10岁了,我无法使其工作。serverfault.com/a/303752/104173看起来很复杂,目前尚不清楚它是否尝试替换get/setfacl功能。我知道macOS不是服务器平台,但是它仍然会遇到安全漏洞。是否值得在apple.stackexchange.com上重新开始此对话?
约翰尼·犹他州

Answers:


8

ls -e 以长(-l)输出打印与文件关联的访问控制列表(ACL)(如果存在)。

这给出了如下结果:

drwxr-xr-x@ 19 localadmin   646B Aug  4 00:21  APPBUNDLE
0: user:localadmin allow add_file,add_subdirectory,writeattr,writeextattr,writesecurity
                   ⬆    ⇧                      ⇶                                     ⬆

就个人而言,我有“出口” ~/.bash_profile

export FILE_ALL="read,write,append,execute,delete,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown"
export DIR_ALL="list,search,add_file,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown"

使得这种chmod可能性成为可能...

sudo chmod + a“允许localadmin $ DIR_ALL” / APPBUNDLE

chmod手册页上,有一些信息……暗示您确实有可能做您所描述的事情。

“ ACL使用符号模式语法的扩展名进行操作。每个文件都有一个ACL,其中包含一个有序的条目列表。每个条目都引用一个用户或组,并授予或拒绝一组权限。组名称相同,用户/组名称可以以“ user:”或“ group:”为前缀,以指定名称的类型。

chmod -E 从stdin读取ACL信息,作为ACE的顺序列表,由换行符分隔。如果信息正确解析,则替换现有信息。

另外,我还要大声疾呼BatchMod,这是一部老歌,但对ACL来说是好东西,以及TinkerToolSystem


这对我有用,但是我必须将chmod命令更改为:(sudo chmod +a "localadmin allow $DIR_ALL" /APPBUNDLE切换用户名和allow
E. Moffat


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.