我已使用该命令格式化了图像文件mkfs
,现在我想将文件复制到该图像文件,而无需 root 权限。
我已经尝试将图像挂载到本地目录,由于某种原因,该目录确实需要 root 权限。 (欢迎评论原因)
是否有一种广泛支持的方法可以将文件复制到格式化图像中,而无需 root 权限。
编辑:映像格式为 FAT-32。
答案1
除此之外,挂载可能会阻碍/覆盖文件系统结构,因此通常不允许您在没有 root 权限的情况下在任何地方挂载任何内容。在完成此操作(或似乎完成此操作)的情况下,通常会涉及一个以 root 身份运行的挂载帮助程序(如 fusermount、udisks 等)。
如果由于某种原因无法使用挂载助手,则“将文件复制到格式化映像的一种广泛支持的方法”是使用mkisofs
它创建包含文件的映像,并且在任何地方都不涉及根。
完全有可能mkisofs
在用户空间程序中实现(以及更多)功能,但由于大多数人对安装没有问题,所以我不确定大多数文件系统是否存在这样的程序。
因为ext*
有debugfs
它的一部分。
$ echo Hello World > hello.txt
$ truncate -s 100M foobar
$ /sbin/mkfs.ext4 foobar
$ /sbin/debugfs -w foobar
debugfs 1.42.11 (09-Jul-2014)
debugfs: ls
2 (12) . 2 (12) .. 11 (20) lost+found
debugfs: mkdir hey
debugfs: mkdir what
debugfs: mkdir up
debugfs: ls
2 (12) . 2 (12) .. 11 (20) lost+found 12 (12) hey
13 (12) what 14 (956) up
debugfs: write hello.txt hello.txt
Allocated inode: 15
debugfs: cat hello.txt
Hello World
所以这看起来很有效。自动化是可能的(-f cmdfile
选项),但听起来像是家庭作业。
答案2
默认情况下,挂载文件系统保留给root,因为许多文件系统允许用户在控制磁盘映像时获得特权(例如,通过创建setuid 文件)。
寻找一个保险丝支持映像中的文件系统的文件系统实现。与内核文件系统驱动程序不同,FUSE 文件系统驱动程序在用户空间中运行,没有任何权限。不幸的是,并非所有文件系统都有 FUSE 实现;特别是,我不知道任何读写 ext4 FUSE 实现。
阻力最小的路径通常是通过虚拟机访问文件系统映像。