我可以在没有 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 映像,请尝试使用fuseiso和UMfuse 的 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)
小智 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)
可能的方法是/etc/fstab
使用“user”参数为 ISO 添加一个条目,例如
/test.iso /mnt/iso auto defaults,user 0 1
但无论如何,您通常都需要 root 访问权限才能编辑此文件,因此它不是很有帮助。
归档时间: |
|
查看次数: |
85401 次 |
最近记录: |