如何为每个用户授予不同的权限?

如何为每个用户授予不同的权限?

所以,我已经使用 Linux 几年了,我真的应该知道这个答案,但我很难找到它。具体来说,我一直在使用基于 Debian 的发行版......主要是 Ubuntu。

如果我有一台拥有三个以上用户的服务器,如何为每个用户设置一组不同的文件权限。

例如:

如果我有一个具有这些权限和所有权的文件:

rwx rw_ r__ user1:group1 file1.txt

我有 3 个用户拥有这些所需的权限......

  • 用户1读写
  • 用户2RW_
  • 用户3r__

我所要做的就是拥有用户1拥有该文件,用户2处于组1, 和用户3都不能——对吗?

但是,如果我有一个用户4用户5

  • 用户4_wx
  • 用户5__X

我该如何设置呢?

我以前不需要这样做,但 Windows 管理员问我这个问题,老实说我无法回答。

答案1

传统的 UNIX 权限只允许用户、组以及您发现的其他权限。这些可能会导致需要创建一些尴尬的组组合......

因此,添加了一种新形式的 ACL(访问控制列表)。这允许您指定具有不同权限的多个用户和多个组。这些是用setfacl命令设置的,并用getfacl

$ setfacl -m u:root:r-- file.txt
$ setfacl -m u:bin:-wx file.txt 
$ setfacl -m u:lp:--x file.txt 
$ getfacl file.txt
# file: file.txt
# owner: sweh
# group: sweh
user::rw-
user:root:r--
user:bin:-wx
user:lp:--x
group::r--
mask::rwx
other::r--

您可以通过查看输出轻松判断文件是否具有 ACL ls

$ ls -l file.txt
-rw-rwxr--+ 1 sweh sweh 0 Jul 26 10:33 file.txt

+权限末尾的 表示 ACL 。

答案2

是的,ACL:允许为不同的用户或组自由设置不同的权限。 IIRC 通常的组权限限制组和用户可以通过 ACL:s 拥有的权限集(如mask中所示getfacl),但setfacl如果您添加权限,则应处理该问题。

但在某些情况下,您需要询问权限集是否有意义。

我有 3 个具有这些所需权限的用户...
- user1 rwx
- user2 rw_
- user3 r__

您可以使用 ACL:s 来实现此操作,或者(大约)使用通常的 Unix 权限,将 user1 设为文件的所有者,将 user2 设为组的成员,并让其他人(包括 user3)具有读取访问权限。尽管如此,每个人(有权访问该目录)也将具有读取访问权限。

让我们考虑一下这些权限的含义。您有一个可以读取的用户,另一个可以读取和写入。这完全是平常的事。这些用户都无权执行该文件,但第三个用户也应该能够执行该文件。

这在我看来没有多大意义。任何可以读取该文件的用户都可以制作副本 (*)、将其标记为可执行并运行它,而无需执行原始文件。对某些用户具有执行访问权限但对其他人不具有执行访问权限的唯一情况是可执行文件通过 suid 提升了权限。但如果是这种情况,您也不应该让其他用户拥有该文件的写入权限。

同样的道理, user4 with-wx和 user5 with--x对我来说没有意义。如果有可能只允许,则只写访问可能有意义追加,但是权限系统并不是那么细粒度。

(*除非他们不能在任何地方写)


不过,如果我们删除对该位的奇怪要求x,我们将得到一个文件,其中 user1 和 user2 应具有写入权限,而 user3 应具有读取权限。使用传统模型,一个写入者和多个读取者很容易,但这种情况需要一些技巧来将文件权限与包含目录的权限结合起来。幸运的是,在许多情况下,一个拥有更多权限的用户就足够了。

如果不需要执行位,这看起来像是使用 ACL:s 的情况。但有了它,这个特殊的例子对我来说似乎相当复杂。

相关内容