首先,感谢您的阅读。我成功运行了 LaunchAgents 文件夹中的 plist launchd 作业。它基本上调用了一个小型 shell 脚本来修改文件夹的权限。然后我又执行了另一项作业,该作业调用了另一个脚本,将其改回之前的状态。
现在,我正在尝试弄清楚如何为特定组更改文件夹/文件的权限。我意识到每个文件夹/文件都有一个属于某个组的所有者。是的,但是我如何通过 shell 脚本明确地向另一组用户授予权限?这可能吗?我也一直在阅读有关 ACL 的文章,这是我应该走的路吗?
我的脚本现在很简单:
chmod -R 777 <FOLDERNAME>
然后返回:
chmod -R 000 <FOLDERNAME>
以管理员身份登录时运行此操作。
但理论上我想授予另一个组访问权限:
chmod -R 777 <FOLDERNAME> <GROUPNAME>
<-- 是的,我也是这么想的
答案1
您需要 ACL。首先,您的文件系统必须使用该选项挂载。您可以使用该选项重新挂载它:
# mount -o remount,acl /mount/point
如果您希望此选项静态(每次重启后可用):
# vi /etc/fstab
#...
/dev/partition /mount/point fstype defaults,acl 1 2
这里最重要的部分是选项栏中的“,acl”。其他部分都可以忽略。
您需要安装acl
包并使用setfacl
。要设置目录的默认值(创建的每个新文件和子目录都将具有这些 acl):
# setfacl -d -m u::rwx,u:user1:rx,g::rx,g:group1:rwx,g:group2:rx,o::- directory
- 创建用户拥有全部权限
- user1 仅读取并执行
- 与默认组相同
- group1 具有读取、执行和写入访问权限
- group2 读取并执行
- 其他人在这里没有机会
您现在应该设置此目录的权限(是的,只需剥离 -d 选项):
# setfacl -m u::rwx,u:user1:rx,g::rx,g:group1:rwx,g:group2:rx,o::- directory
请注意,如果此目录中有任何内容,则必须明确设置权限。您可以使用 find 正确设置权限(请记住,目录必须具有读取和执行权限,人们才能访问/列出它们)。首先,find ./ -type d 为您提供当前位置的子目录,以下内容将为每个子目录设置默认权限:
# find ./ -type d -exec setfacl -d -m <acl> \{} \;
<acl>
应该是所需的 acl\{} \;
是 find 的转义序列。
如果要检查创建的文件和目录继承的权限,请使用getfacl
您也可以使用 -R|--recursive 开关,但这会弄乱文件和目录权限。