什麼是檔案權限

在 Linux 等系統中,針對每個檔案或目錄,分別對擁有者(user)、群組(group)、其他人(others)決定是否允許讀取(r)、寫入(w)、執行(x)的設定。ls -l 以 rwxr-xr-- 的形式顯示,chmod 也可以用 754 這樣的八進位(r = 4、w = 2、x = 1 的總和)表示。新建立檔案的權限由 umask 決定。root(超級使用者)一般不受此限制,可以讀寫檔案。

日文名稱: パーミッション

「檔案權限」出現在1領域的3道練習題中(Linux與命令列基礎等)。

這個名詞所屬的領域: Linux與命令列基礎

表示法的讀法

ls -l 開頭的10個字元中,第1個字元是檔案的種類(- 為一般檔案,d 為目錄,l 為符號連結),接著每3個字元依序是擁有者、群組、其他人的權限。八進位的每一位數是 r = 4、w = 2、x = 1 的總和,所以 rwxr-xr-- 是 754,rw-r--r-- 是 644。除了像 chmod 754 file 這樣以數字指定,也可以像 chmod g+w file、chmod o-r file 這樣用符號只改變一部分。

目錄的權限

對目錄而言,r 是讀取其中名稱清單的權限,w 是在其中建立或刪除檔案的權限,x 是進入其中、依名稱到達檔案的權限。因此能否刪除檔案,不是由檔案本身,而是由目錄的 w 與 x 決定。像 /tmp 這種任何人都能寫入的目錄,會設定黏滯位元(t),讓人無法刪除別人的檔案。

特殊位元與 umask

有讓程式執行時以擁有者權限運作的 setuid(擁有者的 x 位置為 s)、以群組權限運作的 setgid,以及前述的黏滯位元,以八進位分別表示在 4000、2000、1000 的位數。新檔案以 666、新目錄以 777 去掉 umask 的位元作為權限,umask 為 022 時,檔案為 644,目錄為 755。

練習檔案權限的題目

在家目錄執行「ls」只顯示 notes.txt,執行「ls -a」則顯示「.」「..」「.bashrc」「notes.txt」。下列哪一個是對此結果的正確說明?

  1. A「.」表示目前目錄,「..」表示上層目錄;名稱以「.」開頭的 .bashrc 是隱藏檔,不加 -a 就不會顯示
  2. B「.」表示目前目錄,「..」表示上層目錄;.bashrc 是禁止寫入的檔案,不加 -a 就不會顯示
  3. C「.」表示根目錄,「..」表示家目錄;名稱以「.」開頭的 .bashrc 是隱藏檔,不加 -a 就不會顯示
查看答案與解析

正確答案:A. 「.」表示目前目錄,「..」表示上層目錄;名稱以「.」開頭的 .bashrc 是隱藏檔,不加 -a 就不會顯示

每個目錄中都有代表該目錄本身的「.」與代表上層目錄的「..」這兩個項目。名稱以「.」開頭的檔案或目錄會被當作隱藏檔,ls 不加選項時不顯示,加上 -a(all)才會顯示。.bashrc 這類 shell 或工具的設定檔,常取隱藏檔的名稱,以免在平常的清單中顯得雜亂。是否顯示只由名稱決定,與檔案權限無關。

touch 以 666、mkdir 以 777 去掉 umask 的位元,作為新檔案與新目錄的權限。在 umask 為 027 的 shell 中建立新檔案與新目錄時,兩者權限的組合何者正確?

  1. A檔案 637、目錄 750
  2. B檔案 640、目錄 750
  3. C檔案 750、目錄 750
查看答案與解析

正確答案:B. 檔案 640、目錄 750

umask 表示從新建立的檔案或目錄「去掉」的權限位元。027 從群組去掉寫入(2),從其他人去掉讀取、寫入、執行(7),因此檔案從 666 成為 rw-r-----(640),目錄從 777 成為 rwxr-x---(750)。這不是八進位的減法,而是逐位元去掉的計算(666 AND NOT 027)。常用的 umask 022 以同樣的計算,檔案為 644,目錄為 755。

常見問題

設成 chmod 777 就能解決問題嗎?

「Permission denied」或許會消失,但任何人都能修改或執行該檔案,內容可能被其他使用者或程式更改。基本做法是先確認哪些使用者需要進行哪些操作,用 chown、chgrp 調整擁有者與群組後,只給予必要的權限。

在共用伺服器上,如何只讓團隊成員讀取檔案?

建立團隊用的群組並加入成員,把檔案與目錄的群組設為該群組,給群組 r(目錄為 r 與 x),其他人則不給任何權限(例如檔案 640、目錄 750)。若想依個人細部設定,也可以使用 ACL(setfacl、getfacl)。

解析中的「檔案權限」

出現「檔案權限」的題目(3題)

  1. 在家目錄執行「ls」只顯示 notes.txt,執行「ls -a」則顯示「.」「..」「.bashrc」「notes.txt」。下列哪一個是對此結果的正確說明?
  2. touch 以 666、mkdir 以 777 去掉 umask 的位元,作為新檔案與新目錄的權限。在 umask 為 027 的 shell 中建立新檔案與新目錄時,兩者權限的組合何者正確?
  3. 關於 Linux 的 sudo 指令,下列敘述何者正確?

相關名詞

Shell(命令解譯器) 超級使用者 最小權限原則 正規表示式 訊號(Unix) 符號連結 硬連結 管線(|) 輸入輸出重新導向 環境變數

前往名詞解釋列表