9

我有两个目录:“公共”和“私人”。我有三个用户:“chris”、“john”、“dan”。我有两个组:“pub”、“priv”和“god”。

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

作为根:

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

4 回答 4

15

好吧,我知道这相对较旧,但 twalberg 是正确的:实际上有一种相对简单的方法可以使用 POSIX ACL 完成此操作。它们自 90 年代末/2000 年代初就已经存在,所以我不知道为什么更多的人不使用它们。

怎么做:像你已经做的那样做,然后简单地执行这个命令:

# setfacl -m g:god:rwx public private

并且在一个命令中你得到你想要的。您将永远尝试仅使用传统的 unix 权限来弄清楚如何做到这一点。

Mikic 的建议可能仍然很好(取决于您要完成的工作),并且在您的权限中引用尽可能少的组可能更直接(或者您可能希望“克里斯”不是t 一个普通用户,但一个管理用户,这又取决于您要构建的内容)。

我提供了更接近您想要完成的内容,因为在某些情况下您可能会尝试授予辅助用户/组对目录的访问权限,但您不想在“克里斯”无法访问这两个目录和“chris”可以访问所有其他文件和目录“pub”和“priv”可能有权访问。使用 ACL,您不必做出这些选择,这就是添加它们的原因,现在它们已成为大多数 Unix(以及 BSD 和 Linux)平台的核心部分。

于 2013-03-14T17:58:42.553 回答
4

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

你还说:

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

嗯,就是三组。(让我想起那句名言:“世界上有三种人;会数的人和不会数的人。”:-P)

您的基本概念似乎是错误的。其工作方式相当简单。创建两个组,“pub”和“priv”。相应地放置所有需要访问目录的用户。需要访问这两个目录的用户应该属于这两个组。

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

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

于 2012-11-12T22:01:47.577 回答
2

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

chgrp god public private
chgrp pub public

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

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

尝试这个:

chmod 770 public

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

于 2012-11-12T21:48:21.597 回答
2

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

于 2012-11-12T22:17:55.873 回答