循环设备(即用于安装原始磁盘映像)可以使用 udisk 进行管理,无需 root 权限。
出于测试目的,可以像这样创建和格式化图像:
dd if=/dev/urandom of=img.img bs=1M count=16
mkfs.ext4 img.img
然后使用udisks进行设置
udisksctl loop-setup -f img.img
这会为映像创建一个循环设备,并将其安装到 下的新目录/run/$USER
,就像 udisk 管理的任何本地硬盘驱动器一样。只是权限不是我所期望的。
# ls -l /run/media/$USER/
drwxr-xr-x 3 root root 1024 Apr 10 11:19 [some id]
drwx------ 1 auser auser 12288 Oct 30 2012 [a device label]
列出的第一个是循环设备,由 root 拥有,其他任何人都不可写。第二个是挂载的本地硬盘或USB笔设备,用于比较,属于挂载的用户。我知道我可以通过简单地chmod
以 root 身份执行来解决这个问题。
但为什么 udisk 会分配不同的权限和所有者呢?可以将其配置为其他用途吗?
答案1
我详细查看了udisks2源代码并在那里找到了解决方案。
在用户权限下正确安装的设备使用旧文件系统进行格式化,例如fat
.这些接受uid=
并gid=
安装选项来设置所有者。 Udisks 自动将这些选项设置为发出挂载请求的用户的用户和组 ID。
现代文件系统,如 ext 系列,没有这样的选项,而是记住根节点的所有者和模式。所以chown auser /run/media/auser/[some id]
确实是坚持不懈地工作。另一种方法是将新创建的文件系统的 uid 和 gid 初始化给其创建者-E root_user
。mkfs.ext4