为什么 Linux 要求用户必须是 root 用户/使用 sudo/每次挂载都经过专门授权才能挂载某些内容?似乎是否允许用户安装某些内容的决定应该基于他们对源卷/网络共享和安装点的访问权限。非根安装的几个用途是将文件系统映像安装到用户拥有的方向,并将网络共享安装到用户拥有的目录。看起来如果用户可以控制安装方程的两边,一切都会很酷。
访问限制的澄清:
我觉得我应该能够将用户有权访问的任何内容安装到用户所属的安装点。
例如,在我的计算机上 /dev/sda1 由用户 root 和具有权限的组 disk 拥有brw-rw----
。因此,非 root 用户不能乱用 /dev/sda1,并且显然 mount 不应该允许他们安装它。但是,如果用户拥有 /home/my_user/my_imagefile.img 和挂载点 /home/my_user/my_image/ 为什么他们不能使用以下命令将该映像文件挂载到该挂载点上:
mount /home/my_user/my_imagefile.img /home/my_user/my_image/ -o loop
正如 kormac 指出的那样,存在一个 suid 问题。因此,必须添加一些限制,以防止 suid 成为问题以及潜在的其他问题。也许一种方法是让操作系统将所有文件视为属于进行安装的用户。然而,对于简单的读/写/执行,我不明白为什么这会成为问题。
使用案例:
我在实验室有一个帐户,我的家庭空间限制为 8GB。这是很小而且非常烦人的。我想从我的个人服务器安装一个 nfs 卷,以从本质上增加我拥有的空间量。然而,由于 Linux 不允许这样的事情,我不得不来回 scp'ing 文件以保持在 8GB 限制以下。
答案1
这既是历史限制,也是安全限制。
从历史上看,大多数驱动器都是不可拆卸的。因此,将安装限制为具有合法物理访问权限的人员是有意义的,并且他们可能有权访问 root 帐户。 fstab 条目允许管理员将可移动驱动器的安装委托给其他用户。
从安全角度来看,允许任意用户在任意位置挂载任意块设备或文件系统映像存在三个主要问题。
- 安装到非拥有位置会隐藏该位置的文件。例如:在 上挂载您选择的文件系统
/etc
,其中/etc/shadow
包含您知道的 root 密码。通过允许用户仅在他拥有的目录上安装文件系统可以解决此问题。 - 文件系统驱动程序通常没有经过格式错误的文件系统的彻底测试。有缺陷的文件系统驱动程序可能允许提供格式错误的文件系统的用户将代码注入内核。
- 挂载文件系统可以允许挂载者显示一些他原本无权创建的文件。 Setuid 可执行文件和设备文件是最明显的示例,它们由
nosuid
和nodev
选项来固定,这些选项隐含user
在/etc/fstab
.
到目前为止,执行root 不调用的user
时间就足够了。mount
但更普遍的是,能够创建另一个用户拥有的文件是有问题的:该文件的内容有可能被声称的所有者而不是安装者归因。由 root 到不同文件系统的临时属性保留副本将生成一个由已声明但不涉及的所有者拥有的文件。某些程序通过检查文件是否属于特定用户来检查使用文件的请求是否合法,但这将不再安全(程序还必须检查访问路径上的目录是否属于该用户;如果允许任意挂载,他们还必须检查这些目录是否不是挂载点(其中挂载既不是由 root 也不是由所需用户创建的)。
出于实际目的,现在无需 root 即可挂载文件系统,通过保险丝。 FUSE 驱动程序作为安装用户运行,因此不存在利用内核代码中的错误进行权限升级的风险。 FUSE 文件系统只能公开用户有权创建的文件,这解决了上面的最后一个问题。
答案2
如果用户对块设备具有直接写访问权限,和可以挂载该块设备,然后他们可以将 suid 可执行文件写入该块设备,挂载它并执行该文件,从而获得系统的 root 访问权限。这就是为什么安装通常仅限于 root。
现在 root 可以允许普通用户在特定限制下挂载,但他需要确保如果用户对块设备具有写访问权限,则挂载不允许 suid 以及 devnodes,它们也有类似的问题(用户可以手工制作)一个 devnode,赋予他们对重要设备的写访问权,而他们不应该有写访问权)。
答案3
它并不总是需要超级权限。从man mount
The non-superuser mounts.
Normally, only the superuser can mount filesystems. However,
when fstab contains the user option on a line, anybody can mount
the corresponding system.
Thus, given a line
/dev/cdrom /cd iso9660 ro,user,noauto,unhide
any user can mount the iso9660 filesystem found on his CDROM
using the command
mount /dev/cdrom
or
mount /cd
For more details, see fstab(5). Only the user that mounted a
filesystem can unmount it again. If any user should be able to
unmount, then use users instead of user in the fstab line. The
owner option is similar to the user option, with the restriction
that the user must be the owner of the special file. This may be
useful e.g. for /dev/fd if a login script makes the console user
owner of this device. The group option is similar, with the
restriction that the user must be member of the group of the
special file.
答案4
仅供参考:最新的内核具有“命名空间”支持。普通用户可以创建一个命名空间,并在该命名空间内进行 root
一些有趣的事情,例如挂载文件系统。
但它并没有给你“真正的”超级用户权限——你只能做你已经被允许做的事情(即你只能安装你已经可以读取的设备)。
看运行中的命名空间,第 1 部分:命名空间概述,第 4 节。