如何使用 Linux 组来限制其他用户对目录的读、写、执行访问?

如何使用 Linux 组来限制其他用户对目录的读、写、执行访问?

更新:我终于知道我到底想做什么了。请参见此处:https://raspberrypi.stackexchange.com/questions/13401/locking-down-raspbian-to-only-allow-limited-features/58778#58778

我对这个答案感到非常困惑:https://stackoverflow.com/a/527976/4561887

它说:

用户需要读取/执行权限才能执行任何命令(ls、登录 shell 等),因此您不能轻易剥夺所有权限。

通常,确保他们不能干扰其他用户的主目录就足够了。为此,将用户放入一个新组(如“不受信任”),chown 他的主目录并撤销该组和所有主目录上的其他权限:chmod go-rwx /home/*/

但我真的不明白他在说什么。请有人帮帮我。以下是我目前得到的信息,其中一些问题以粗体显示:

在全:

  1. 创建新用户被称为“客人”:sudo adduser guest
  2. 创建一个名为“不受信任”的新组:sudo groupadd untrusted
  3. 将用户“guest”添加到组“untrusted”:sudo usermod -a -G untrusted guest
  4. 确保用户“guest”现在属于组“untrusted”的一部分:groups guest

    • 输出为:

      客人 :客人不受信任

    • 这意味着用户“guest”是组“guest”和“untrusted”的一部分。很好。

  5. 获取您希望“guest”有权访问的任何目录的所有权。请注意,由于我们adduser上面使用了,guest 已经可以访问他的“/home/guest”主文件夹。但是,将其他目录的访问权限授予用户“guest”可以按如下方式进行sudo chown -hR guest /any/directory/you/want/guest/to/own
  6. ???(到目前为止我做的对吗?)——我仍然希望其他超级用户能够看到来宾的文件。创建“不受信任”组有什么意义呢?我看不出它有什么变化任何事物。
  7. 撤销读取、写入和执行 (rwx)团体及其他所有其他主目录的权限:??? 如果我这样做chmod go-rwx /home/*/,那么其他 sudoers 甚至无法读取 guest 的目录 - 这不是我想要的! - 我只是希望 guest 不能读取其他人的目录,而不是相反,但如果我创建 guest2,他也不应该能够看到 guest1 的目录,guest1 也不应该能够看到 guest2 的目录,但 sudoers 应该能够看到 guest1 的guest2的目录。

答案1

我不知道为什么如果你只有一个“来宾” (通常你应该只有一个来宾),你还需要一个“不受信任”的组。组“来宾”可以像“不受信任”一样使用。无论如何,我会尽量简短地解释一下,为你指明正确的方向:

???(到目前为止我所做的上述操作正确吗?)——我仍然希望其他超级用户能够看到客人的文件。

任何以“root”帐户登录的用户都可以执行此操作。使用su -c "do something"sudo do something。要以 root 身份登录,请使用su root(或 ,su因为它默认为 root,没有参数) 或sudo -i(但请注意,不鼓励新手用户以 root 身份登录)。

无论如何,创建“不受信任”组有什么意义?我看不出这有什么改变。

确实如此。但是,比如说,在文件服务器上,为特定访问目的设置特定组可能非常有用。开发和测试环境可能受益于运行具有较少权限的进程,测试不受信任的二进制文件(尽管监狱更适合这种情况)。通常,在企业中拥有不受信任的用户可能很有用,但对于普通桌面或工作站则不然。可能还有更多用例,所以在离题之前,我将就此打住,剩下的留给您阅读。

撤销所有其他主目录的读、写和执行 (rwx) 组和其他权限:??? 如果我执行 chmod go-rwx /home/*/,那么其他 sudoers 甚至无法读取来宾的目录 - 这不是我想要的! - 我只是希望来宾不能读取其他人的目录

不,当然你不需要。在这种情况下,撤销 g(组)访问权限会把事情搞得一团糟,无法实现你的目标(防止客人打扰其他用户的家)。请阅读以下简短说明:

通过 adduser 添加新用户的默认特性是:

  1. 使用匹配的主要组 ID 创建的新用户。
  2. 新用户会收到一个主文件夹,通常是 /home/USERNAME/,该用户对该文件夹具有 rwx 权限。
  3. 默认情况下,不授予任何其他权限,也不为用户分配任何补充组(我听说有些配置会这样做,但这不是“原始”行为)。
  4. 因此,只需创建用户即可实现您想要实现的所有目标。换句话说,从删除用户和用户的主目录开始,不要更改任何内容,直到您知道需要更改什么为止。创建帐户后,您可以使用查看帐户的组id USER。因此,如果您的系统有奇怪的默认行为,您可以删除任何您的客人不应该加入的组。

我只是希望客人无法读取其他人的目录

默认情况下,访客可以只读其他文件。如果要将文件设为私有(仅对所有者、组和根可见),则chmod -R o-rwx其目录。'o' 表示“其他”或“世界”。此标志指的是文件所有者或文件所有者组成员以外的任何人(根除外,根基本上是您的全能用户)。需要“ox”以确保无法生成目录列表,因为目录是可执行的(超出范围)

获取您希望“guest”有权访问的任何目录的所有权。请注意,由于我们上面使用了 adduser,guest 已经可以访问他的“/home/guest”主文件夹。但是,可以按如下方式授予用户“guest”其他目录的所有权:sudo chown -hR guest /any/directory/you/want/guest/to/own

不。如果您想要共享文件夹,请创建一个名为“shareful”的新组(这是个玩笑,因为您必须“小心”),并将所有将共享目录的用户添加到此组(usermod -aG shareful myuser)。然后将该文件夹的组所有权更改为 shareful 组(chown -R :shareful /this/path/)并修改权限,使组具有 rwx(chmod -R g+rwx /this/path)。此时,您将开始想要研究 umask,但这超出了本文的范围。

下面是 umask 信息的链接,但首先,我认为您需要重新阅读有关基本 *NIX 文件权限(前两个链接)的信息。

文件权限:(维基百科)https://en.wikipedia.org/wiki/File_system_permissions (UNIX.com)http://www.unix.com/tips-and-tutorials/19060-unix-file-permissions.html

Linux 和 umask:(不熟悉的来源)https://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html

希望这至少能澄清一些事情,足以实现您的目标。

答案2

看了你的问题,似乎你只对/home目录权限感兴趣,而不是限制用户权限的其他方式。在这种情况下,你很接近了。

Sudoers

首先,无需担心 sudoers。他们不遵守您看到的文件权限。以下是尝试方法:

mkdir test
touch test/test_file
ls test  # works!

chmod 000 test
ls test       # can't open directory, permission denied
sudo ls test  # works!

权限

现在让我们简要回顾一下文件权限。如果你这样做,ls -l你会发现大多数目录都有drwxr-xr-x权限。这意味着:

  • 用户-rwx权限
  • 组 - rx 权限
  • 其他 - rx 权限
  • d只是意味着这个“文件”是一个目录。请记住,您需要执行权限才能列出目录的内容。

如果这些权限已启用/home/guest,则“其他”权限允许任何人列出该目录的内容。因此,您需要这样做:

chown guest:guest /home/guest  # Change owner and group of directory to guest
chmod 750 /home/guest

登录guest1和guest2账号尝试一下吧!

奇特的 chmod 数字

rwx每个都对应一位。将二进制数(基数为 2)转换为人类使用的数字(基数为 10),您将获得:

  • r-4
  • w - 2
  • x - 1

因此

  • rwx = 7
  • 接收 = 5

相关内容