不同组的Linux目录权限

时间:2012-11-12 21:11:48

标签: linux permissions

我有两个目录:“public”和“private”。 我有三个用户:“chris”,“john”,“dan”。我有两个小组:“pub”,“priv”和“god”。

  • “上帝”组应该可以完全访问“公共”和“私人”。
  • 群组“pub”应该是唯一拥有“public”
  • 权限的群组
  • “priv”组应该是唯一拥有“private”权限的组。

以root身份:

useradd chris

useradd john

useradd dan

usermod -g god chris

usermod -g pub john

usermod -g priv dan

chgrp god public private

chgrp pub public

chgrp priv private

su chris

作为“克里斯”:

cd public/

touch test =许可被拒绝


其他用户也一样......在“dan”下我对“private”目录没有权限,“dan”是“priv”组的成员。

你知道吗?

4 个答案:

答案 0 :(得分:15)

嗯,我知道这是相对陈旧的,但twalberg是正确的:实际上有一种相对简单的方法来实现POSIX ACL。它们自90年代末/ 2000年初就存在,所以我不知道为什么更多的人不使用它们。

如何操作:按照您已经完成的操作,然后只需执行以下命令:

# setfacl -m g:god:rwx public private

在一个命令中,你得到了你想要的东西。你将花费永远的努力来弄清楚如何使用传统的unix权限来做到这一点。

Mikic的建议可能仍然很好(取决于你想要完成的事情),并且可能更直接地在你的权限中引用尽可能少的组(或者你可能希望它显而易见“chris “不是常规用户,而是管理用户,同样取决于你想要构建的用户”。

我提供的内容更接近您要完成的内容,因为在某些情况下您可能尝试为辅助用户/组提供对目录的访问权限,但您不希望在“chris”之间进行选择访问这两个目录和“chris”访问所有其他文件和目录“pub”和“priv”可能有权访问。使用ACL,您无需做出这些选择,这就是为什么它们被添加并且现在是大多数Unix(以及BSD和Linux)平台的核心部分。

答案 1 :(得分:4)

你说组“pub”应该是唯一拥有“public”权限的组。但在此之前,你说“上帝”也应该有机会。所以“pub”不可能是唯一有访问权限的人。同意“私人”。

你也说:

我有两组:“pub”,“priv”和“god”。

嗯,这是三组。 (让我想起那句名言:“这个世界上有三种人;那些可以算数的人和那些不能的人。”:-P)

你的基本概念似乎错了。这种方式很简单。创建两个组,“pub”和“priv”。放置所有需要访问目录的用户。需要访问这两个目录的用户应该属于这两个组。

在这种情况下,“chris”应该同时放在“pub”和“priv”组中。 “john”应该放在“pub”组中。 “dan”应该放在“priv”组中。

您要做的是让目录由两个组拥有。那是不可能的。它的用户可以是多个组的一部分,而不是文件或目录。你只是倒退了: - )

答案 2 :(得分:2)

您的方法中有两个有问题的事情。第一个是:

chgrp god public private
chgrp pub public

使用第二个命令,您放弃了第一个命令的效果。目录public现在属于pub群组,而不属于god

第二件事是您可能没有将目录public的写权限授予拥有它的组(执行命令touch的用户属于目录组的事实无关紧要) )。

试试这个:

chmod 770 public

并与其他目录类似。但是,您最初尝试实现的是不可能的,因为该目录只能属于一个组。 Nikos在他的回答中详细说明了这一点 - 将用户放在更多的小组中。

答案 3 :(得分:2)

您需要使用支持ACL的文件系统。如其他答案中所述,pubpriv组所有权可以使用基本的Linux权限,但是可以授予对god组的访问权限,因为文件/目录只能有一个组标记,需要ACL。大多数当前文件系统都应支持此功能 - 请参阅getfaclsetfacl的手册页。