[英]test -x in Mounted Filesystem
在将图像放入 SD 卡之前,我正在使用 QEMU 来测试 Raspberry Pi。 我正在设置一个自动脚本,将一些文件放到 Pi 上,除其他外,这样当我将 SD 卡放入 Pi 时,它可以立即使用。 我想我在权限的工作方式上遇到了一个怪癖,但我不确定。
当您运行test -x
时,该文件应该是可执行的。 基本上, x
位应该为您的用户打开。 但是,这似乎不适用于已挂载文件系统中的文件。
主机是 Ubuntu,来宾背景是 Raspberry Pi Buster。 我用guestmount
创建了挂载点,因为我挂载的是快照,而不是原始快照,这似乎是唯一/最好的方法。 基本流程是:
qemu-img convert -Oqcow2 raspberry-pi.img raspberry-pi.qcow
qemu-img create -f qcow2 snapshot.qcow -b raspberry-pi.qcow
sudo guestmount -a 'snapshot.qcow' -i 'mountpoint/'
例如,我在存储库之外有一个文件。 我在挂载点内测试的文件是由 root 创建的,因此我将此文件chmod
编辑到 root 以进行比较:
$ sudo ls -l --author ~/test/file
-rw-r--r-- 1 root root root 1133 Oct 8 21:43 /home/me/test/file
$ sudo test -x ~/test/file && echo 'exists' || echo 'doesn\'t exist'
doesn't exist
但是,对于挂载点内的文件,具有相同的权限,测试成功:
$ sudo ls -l --author mountpoint/home/pi/test/file
-rw-r--r-- 1 root root root 0 Oct 8 22:41 mountpoint/home/pi/test/file
$ sudo test -x ~/test/file && echo 'exists' || echo 'doesn\'t exist'
exists
为什么挂载点里面的文件是可执行的,而外面的文件是不可执行的? 这是因为挂载的文件系统是不同的体系结构(x86 与 ARM)吗? 是不是因为我使用的是guestmount
,文件系统不是真正的文件系统,而是快照和原始文件的合并? 或者这只是安装的方式? 我在哪里可以找到更多关于这种特殊行为的资源,就像我可能遇到的其他权限问题一样?
如果您需要有关房东或房客的更多信息,请询问。
这是libguestfs
使用的guestmount
中的错误。 你可以在这里看到它:
/* Root user should be able to access everything, so only bother
* with these fine-grained tests for non-root. (RHBZ#1106548).
*/
if (fuse->uid != 0) {
[...]
if (mask & X_OK)
ok = ok &&
( fuse->uid == statbuf.st_uid ? statbuf.st_mode & S_IXUSR
: fuse->gid == statbuf.st_gid ? statbuf.st_mode & S_IXGRP
: statbuf.st_mode & S_IXOTH);
}
FS 走捷径说因为你是 root 你有完全访问权限,所以没有必要检查权限。
正如您所证明的,这不是真的。 Root 应该只对目录和至少设置了一个执行位的文件具有执行权限。
我无法构建项目以提交补丁,但您可以提交错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.