Linux

ext4 外部驅動器上的權限問題

  • November 4, 2017

我在連接到伺服器的外部硬碟驅動器上遇到了一個奇怪的權限錯誤。我想啟用傳輸以將種子下載到其上的文件夾,但發現由於權限錯誤而無法創建目錄。

我自己對其進行了測試,並驗證了以 user 身份執行的守護程序transmission無法在它擁有的具有755權限的文件夾中創建目錄。

我認為這可能是一些奇怪的 inode 惡作劇,但fsck回來乾淨,一切看起來都很正常。

matoro@matoro-server ~ $ ls -i /run/media/matoro/drive-data
total 40
43253761 drwxr-xr-x  5 matoro       matoro        4096 Apr 11  2017 backup
11796481 drwxr-xr-x  3 matoro       matoro        4096 Oct 28 22:40 iso
37568568 drwxr-xr-x  2 matoro       matoro        4096 Apr 23  2017 pending
42336296 drwxr-xr-x  3 matoro       matoro        4096 Oct 25 01:26 podcasts
38141969 drwxr-xr-x 39 matoro       matoro       12288 Sep 18 22:05 reading
37519377 drwxr-xr-x  3 transmission transmission  4096 Oct 30 17:10 seeding
37490784 drwxr-xr-x  4 matoro       matoro        4096 Oct 30 17:09 videos
42336292 drwxr-xr-x  3 matoro       matoro        4096 Oct 25 01:23 youtube
matoro@matoro-server ~ $ ls -ia /run/media/matoro/drive-data/seeding
total 912160
37519377 drwxr-xr-x  3 transmission transmission      4096 Oct 30 17:10  .
      2 drwxr-xr-x 11 matoro       matoro            4096 Nov  3 14:56  ..
37584902 drwxr-xr-x  3 transmission transmission      4096 Aug 10  2016 'some directory'
37488367 -rw-r--r--  1 transmission transmission 430297088 Aug 14  2016  some_file
matoro@matoro-server ~ $ sudo -u transmission mkdir -v /run/media/matoro/drive-data/seeding/test
mkdir: cannot create directory ‘/run/media/matoro/drive-data/seeding/test’: Permission denied

以下是相關的掛載選項:

/dev/sdc3 on /run/media/matoro/drive-data type ext4 (rw,nosuid,nodev,noexec,noatime,data=ordered,uhelper=udisks2)

這可能是什麼原因造成的?它可能與ACL有關嗎?

mkdir命令必須遍歷目錄結構以查找現有目錄/run/media/matoro/drive-data/seeding,然後向其中添加條目。所需的權限是:

  1. x許可/
  2. x許可/run
  3. x許可/run/media
  4. x許可/run/media/matoro
  5. x許可/run/media/matoro/drive-data
  6. wx許可/run/media/matoro/drive-data/seeding

(當然,它們都必須是目錄,並且您創建的目錄必須不存在)

我敢打賭你錯過了其中之一(可能是#4或#5)如果程序已經/run/media/matoro/drive-data/seeding作為其目前目錄(如果在您進入目錄後祖先目錄權限發生更改,或者如果程序切換uid,則可能發生這種情況)然後它可以mkdir test並且僅使用權限#6(w並且x在目前目錄上)成功,而mkdir /run/media/matoro/drive-data/seeding/test需要所有x權限,即使它引用相同的位置。

當您使用絕對路徑或具有多個組件的相對路徑時,x將對您提到的每個祖先目錄進行權限檢查。

引用自:https://unix.stackexchange.com/questions/402434