[英]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.