Linux 权限:用户、组、其他、白名单还是黑名单?并帮助共享具有完全、部分和无权限的目录

Linux 权限:用户、组、其他、白名单还是黑名单?并帮助共享具有完全、部分和无权限的目录

更新:就我的一般目的而言,我在这里找到的已经足够了:更新:https://raspberrypi.stackexchange.com/questions/13401/locking-down-raspbian-to-only-allow-limited-features/58778#58778


因此,在我看来,Linux 权限的作用是白名单(强制允许单个指定用户或单个指定组执行某项操作),而不是黑名单(强制拒绝单个指定用户或单个指定组执行某项操作)。这样对吗?如果对,我如何将某人列入黑名单,禁止其在特定目录或一组文件中进行读取、写入或执行?

例如:ls -l显示目录的权限意味着drwxr-xr-x它是一个目录,用户具有读、写、执行 (rwx) 权限,群组拥有 rx 权限,并且其他的具有 rx 权限。假设用户为“user0”,组为“user0”。

我如何明确允许“user1”和“user2”对此“user0”目录拥有所有权限,“user3”和“user4”没有任何权限,而“user5”和“user6”拥有部分权限?

在我看来,我需要将用户 3 和用户 4 列入黑名单,将用户 1 和用户 2 列入白名单,并将用户 5 和用户 6 列入部分白名单或部分黑名单。

由于(我认为)Linux 的权限仅限于白名单,那么实现这一点的最佳方法是什么?

请注意,我的困惑部分在于以下事实:

  1. 一个目录或文件一次只能属于一个用户或组(而不是授予多个组访问特定目录或文件的权限)
  2. 一个用户可以属于多个组

我想我只需要一些这方面的好例子。


部分的解决方案有助于说明我遇到的问题,如下所示:

假设我想要设置这些权限的 user0 目录是“/home/user0”

sudo adduser user0首先,将目录用户设为“user0”,将组设为“user0”(一开始使用时已默认完成)。接下来,将权限设置为“drwxrwx---”(用户和组均为 rwx,但其他用户无权)

通过将用户 1 和用户 2 分别添加到 user0 组,授予他们目录的所有权限

不给予用户 3 和用户 4 任何权限:已经完成,因为其他人具有“---”访问权限,并且用户 3 和用户 4 不属于用户 0 组的一部分。

授予用户 5 和用户 6 部分权限(例如:“rx”):-无法完成???--因为如果我将其他权限设为“rx”,那么它也会将该权限授予用户 3 和用户 4,但我希望将他们列入黑名单(通过拥有“---”权限)。


我已经阅读的背景资料包括:

答案1

是的,如果您喜欢这样说,标准的 unix 权限是“白名单”。

处理权限的常用方法是创建一个新组,该组抽象出所有应具有类似行为的文件,为这些文件赋予相应的组 ID,并使所有应获得这些权限的用户成为该组的一部分。这就是为什么用户可以成为许多组的成员。

使用设备的权限以相同的方式处理,这就是为什么在许多发行版中都有诸如等input组。disk

因此,从这个意义上讲,您可以将组视为“权限规则集”中的一条特定“规则”。限制是,rwx除了“用户”和“其他”权限之外,每个文件只能拥有一条规则,其中包含一个权限组合。

因此,一组用户需要拥有一组权限,而另一组用户需要对同一个文件或目录拥有一组不同的权限,这样的场景是无法用标准的 unix 权限来实现的。

然而,标准 unix 权限有一个扩展,称为访问控制列表(ACL)。man acl详情请参阅。对于许多文件系统,在挂载时必须指定一个选项来激活 acl。

答案2

对于这种粒度,您需要使用 ACL。使用 ALC,您可以为多个用户或组分配不同的权限。要完成您的要求,您需要运行以下命令(假设您的目录名为 dir):

setfacl -m u:user1:rwx dir
setfacl -m u:user2:rwx dir
setfacl -m u:user3:- dir
setfacl -m u:user4:- dir
setfacl -m u:user5:rx dir
setfacl -m u:user6:rx dir

ls -ld这将授予用户 1 和 2 完全访问权限,不授予用户 3 和 4 访问权限,并授予用户 5 和 6 读取/执行权限。如果您在目录上执行,您会注意到它现在+在权限位中附加了。

$ ls -ld dir
drwxrwxr-x+ 2 user0 users 40 Dec  7 11:42 dir

表示+它有一个或多个与之关联的 ACL。您可以使用以下getfacl命令查看 ACL:

$ getfacl dir
# file: dir
# owner: user0
# group: users
user::rwx
user:user1:rwx
user:user2:rwx
user:user3:---
user:user4:---
user:user5:r-x
user:user6:r-x
group::r-x
mask::rwx
other::r-x

还值得注意的是,该ls命令似乎显示目录是组可写的,但命令getfacl显示不是。这里的 ACL 是正确的,这意味着如果组中的用户users(但在 ACL 或文件所有权中未以其他方式命名)尝试在目录中创建文件,则会失败。

相关内容