Arch Linux 文檔目錄上的 x 位

Arch Linux 文檔目錄上的 x 位

我指的是以下內容Arch Linux Access_Control_Lists 文檔

它指出:

向 Web 伺服器授予私有檔案的執行權限

以下技術說明如何向 Web 伺服器等進程授予對駐留在使用者主目錄中的檔案的存取權限,而不會因授予全世界存取權限而損害安全性。

下面我們假設 Web 伺服器以 http 使用者身分執行,並授予其存取 geoffrey 的主目錄 /home/geoffrey 的權限。

第一步是為使用者http授予執行權限:

setfacl -m "u:http:--x" /home/geoffrey

注意:進程需要目錄的執行權限才能列出目錄的內容。

因此,在上面的範例中,他們為 http 使用者設定 /home/geoffrey 目錄的執行權限。根據我的理解,僅授予目錄上的執行位將不允許您列出目錄的內容,但它允許您訪問文件(如果您知道它們的名稱+目錄中給定文件的權限將擁有正確的權限)套)。那麼,http 使用者(或他們所指的進程)如何setfacl -m "u:http:--x" /home/geoffrey能夠列出目錄的內容呢?我缺什麼?

先感謝您!

答案1

您需要-x目錄的權限才能存取該目錄及其中的任何檔案。但是,您對目錄下檔案的存取取決於檔案的權限,而不是目錄本身。只要您對父目錄(目錄)具有執行權限,就不需要任何其他內容來存取它所包含的檔案。透過一個例子可以很容易地證明這一點:

$ sudo mkdir dir1 && echo "Hello world!" | sudo tee dir1/file1 && sudo chmod 700 dir1
Hello world!
$ ls -ld dir1/
drwx------ 2 root root 4096 Apr 12 16:09 dir1/
$ sudo ls -l dir1/
total 4
-rw-r--r-- 1 root root 13 Apr 12 16:09 file1

只有root存取權限,因此如果我們嘗試列出目錄的內容或 cat 文件,它將失敗:

$ ls dir1/
ls: cannot open directory 'dir1/': Permission denied
$ cat dir1/file1
cat: dir1/file1: Permission denied

cat請注意,即使我具有對該文件的讀取存取權限,該操作也會失敗。現在,如果我授予使用者對該目錄的執行存取權限,然後重試,我可以讀取該檔案:

$ sudo chmod 711 dir1/
$ ls -l
total 4
drwx--x--x 2 root root 4096 Apr 12 16:09 dir1
$ cat dir1/file1
Hello world!

我仍然無法列出目錄的內容,因為這需要對該目錄的讀取存取權限,但現在只要我知道其路徑,我就可以讀取該目錄中的任何檔案。

所以,這裡的基本想法是合理的,只是最後的註釋令人困惑。您需要讀取存取權限才能列出內容,但如果您只需要授予使用者http對路徑已知的特定檔案的存取權限,則執行存取權限就足夠了。

雖然措辭很糟糕,但該註釋並不完全錯誤,只是不完整。您確實需要執行權限才能完全列出目錄的內容。如果沒有它們,您可以看到檔案名稱但看不到屬性:

$ ls -l
total 4
drwxr--r-- 2 root root 4096 Apr 12 16:09 dir1
$ ls -l dir1/
ls: cannot access 'dir1/file1': Permission denied
total 0
-????????? ? ? ? ?            ? file1

答案2

您沒有遺漏任何內容:雖然本文檔的大部分內容都是正確的,但註釋是錯誤的。

它可以跨越您的主目錄,進入另一個目錄。該其他目錄可能是可讀且可交叉的,因此列出了其內容。

我認為讓你的家只能交叉是一個好主意,但我也認為你是對的,對其功能的描述是錯誤的。

  • 您需要讀取權限才能列出目錄中的檔案名稱。
  • 您需要對該文件的交叉權限stat(找出有關該文件的任何信息,或打開它)。

您提交了錯誤報告嗎?

相關內容