如何使用 chmod 为多个组授予完全访问权限?需要使用 ACL 吗?

如何使用 chmod 为多个组授予完全访问权限?需要使用 ACL 吗?

首先,感谢您的阅读。我成功运行了 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 开关,但这会弄乱文件和目录权限。

相关内容