更新:我终于知道我到底想做什么了。请参见此处: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/*/
但我真的不明白他在说什么。请有人帮帮我。以下是我目前得到的信息,其中一些问题以粗体显示:
在全:
- 创建新用户被称为“客人”:
sudo adduser guest
- 创建一个名为“不受信任”的新组:
sudo groupadd untrusted
- 将用户“guest”添加到组“untrusted”:
sudo usermod -a -G untrusted guest
确保用户“guest”现在属于组“untrusted”的一部分:
groups guest
输出为:
客人 :客人不受信任
这意味着用户“guest”是组“guest”和“untrusted”的一部分。很好。
- 获取您希望“guest”有权访问的任何目录的所有权。请注意,由于我们
adduser
上面使用了,guest 已经可以访问他的“/home/guest”主文件夹。但是,将其他目录的访问权限授予用户“guest”可以按如下方式进行:sudo chown -hR guest /any/directory/you/want/guest/to/own
- ???(到目前为止我做的对吗?)——我仍然希望其他超级用户能够看到来宾的文件。创建“不受信任”组有什么意义呢?我看不出它有什么变化任何事物。
- 撤销读取、写入和执行 (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 添加新用户的默认特性是:
- 使用匹配的主要组 ID 创建的新用户。
- 新用户会收到一个主文件夹,通常是 /home/USERNAME/,该用户对该文件夹具有 rwx 权限。
- 默认情况下,不授予任何其他权限,也不为用户分配任何补充组(我听说有些配置会这样做,但这不是“原始”行为)。
- 因此,只需创建用户即可实现您想要实现的所有目标。换句话说,从删除用户和用户的主目录开始,不要更改任何内容,直到您知道需要更改什么为止。创建帐户后,您可以使用查看帐户的组
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