簡體   English   中英

在已掛載的文件系統中測試 -x

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM