如何在没有root权限的情况下挂载图像文件?

dai*_*isy 54 mount

我可以在没有 root 权限的情况下挂载文件系统映像吗?通常我会这样做:

mount -o loop DISK_IMAGE FOLDER
Run Code Online (Sandbox Code Playgroud)

不使用 sudo 或设置 suid on mount,有没有合适的方法来做到这一点?

我知道我可以使用fusermount一些 ISO 映像,但这非常有限,即使对于 ISO 映像,我的某些映像也无法安装,但mount始终有效。

Gil*_*il' 37

您不能挂载管理员未以某种方式授予您挂载权限的任何内容。只有 root 可以调用mount系统调用。这样做的原因是有很多方法可以通过挂载来提升权限,例如在系统位置挂载某些东西、使文件看起来属于另一个用户以及利用依赖于文件所有权的程序、创建 setuid 文件或利用漏洞在文件系统驱动程序中。

mount命令是 setuid root。但是如果你不是 root,它只能让你挂载fstab.

fusermount命令是 setuid root。它只允许您通过 FUSE 驱动程序挂载事物,并限制您以这种方式提供具有任意所有权或权限的文件的能力(在大多数设置下,FUSE 挂载上的所有文件都属于您)。

最好的办法是找到一个能够读取磁盘映像的FUSE 文件系统。对于 ISO 9660 映像,请尝试使用fuseisoUMfuse 的 ISO 9660 支持(在 Debian 下作为fuseiso9660软件包提供)。


Nic*_*ell 32

Debian的维基表明这样做的几种方法。这是一种方法。(这需要udisks2安装包。

首先,创建一个“循环设备”。这将允许我们挂载图像文件。

$ udisksctl loop-setup -f $PATH_TO_IMAGE
Mapped file $PATH_TO_IMAGE as /dev/loop0.
Run Code Online (Sandbox Code Playgroud)

请注意,它将图像映射到/dev/loop0。但是,如果先前的命令返回了/dev/loop1,那么你将取代/dev/loop0/dev/loop1在以下所有命令。

如果我们创建的块设备没有使用上一个命令自动挂载,您可能需要运行此命令:

$ udisksctl mount -b /dev/loop0
Mounted /dev/loop0 at /media/$USER/$IMAGE_NAME
Run Code Online (Sandbox Code Playgroud)

您可以查看磁盘上的文件:

$ ls -l /media/$USER/$IMAGE_NAME/
Run Code Online (Sandbox Code Playgroud)

完成后,您可以卸载它:

$ udisksctl unmount -b /dev/loop0
$ udisksctl loop-delete -b /dev/loop0
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,“udisksctl Loop-setup”需要在 RHEL7 上进行系统管理员身份验证。不知道这是否是 RHEL 的默认配置,或者我的组织的强化配置。 (2认同)

小智 17

您可以使用 FUSE 模块 guestmount 挂载多种类型的磁盘映像。它是 guestfs 生态系统的一部分,不需要 root 权限。

查看手册页以获取更多详细信息。

例子

1.对于典型的 Windows 客户机,其主文件系统位于第一个分区:

guestmount -a windows.img -m /dev/sda1 --ro /mnt
Run Code Online (Sandbox Code Playgroud)

2.对于一个典型的 Linux 客户机,它在第一个分区上有一个 /boot 文件系统,在一个逻辑卷上有一个根文件系统:

guestmount -a linux.img -m /dev/VG/LV -m /dev/sda1:/boot --ro /mnt
Run Code Online (Sandbox Code Playgroud)

  • 令人烦恼的是,在 Ubuntu 上运行 guestmount 现在需要一些 root 访问权限才能读取内核映像:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725 (3认同)
  • @CiroSantilli新疆改造中心六四事件法轮功,因为libguestfs通过在qemu虚拟机内启动一个最小的Linux系统来避免需要root(任何人都可以在没有root权限的情况下启动qemu虚拟机)。要启动该机器,它需要一些内核和 initrd。 (2认同)

Ren*_*nan 5

可能的方法是/etc/fstab使用“user”参数为 ISO 添加一个条目,例如

/test.iso /mnt/iso auto defaults,user 0 1

但无论如何,您通常都需要 root 访问权限才能编辑此文件,因此它不是很有帮助。