在 Linux 中,檔案權限、屬性和所有權控制系統程序和使用者對檔案的通路級别。這確定隻有授權的使用者和程序才能通路特定的檔案和目錄。
Linux 檔案權限
基本的 Linux 權限模型通過将每個系統檔案與所有者群組相關聯并為三個不同類别的使用者配置設定權限通路權限來工作:
- 檔案所有者。
- 小組成員。
- 其他人(其他所有人)。
可以使用chown 和chgrp 指令更改檔案所有權。
三種檔案權限類型适用于每一類使用者:
- 讀取權限。
- 寫權限。
- 執行權限。
此概念允許您控制哪些使用者可以讀取檔案、寫入檔案或執行檔案。
要檢視檔案權限,請使用以下ls 指令:
ls -l file_name
-rw-r--r-- 12 linuxize users 12.0K Apr 28 10:10 file_name
|[-][-][-]- [------] [---]
| | | | | | |
| | | | | | +-----------> 7. Group
| | | | | +-------------------> 6. Owner
| | | | +--------------------------> 5. Alternate Access Method
| | | +----------------------------> 4. Others Permissions
| | +-------------------------------> 3. Group Permissions
| +----------------------------------> 2. Owner Permissions
+------------------------------------> 1. File Type
第一個字元表示檔案類型。它可以是正常檔案 ( -)、目錄 ( d)、符号連結 ( l) 或其他特殊類型的檔案。以下九個字元代表檔案權限,三個三元組,每個字元三個字元。第一個三元組顯示所有者權限,第二個組權限,最後一個三元組顯示其他所有人權限。
上例中(rw-r–r--)表示檔案所有者有讀寫權限(rw-),組和其他人隻有讀權限(r–)。
檔案權限根據檔案類型有不同的含義。
三個權限三元組中的每一個都可以由以下字元構成并具有不同的效果,具體取決于它們是設定為檔案還是目錄:
權限對檔案的影響
權限對目錄(檔案夾)的影響
目錄是可以包含其他檔案和目錄的特殊類型的檔案。
更改檔案權限
可以使用chmod指令更改檔案權限。隻有 root、檔案所有者或具有 sudo 權限的使用者可以更改檔案的權限。使用時要格外小心chmod,尤其是在遞歸更改權限時。該指令可以接受一個或多個以空格分隔的檔案和/或目錄作為參數。
可以使用符号模式、數字模式或參考檔案指定權限。
符号(文本)方法
chmod使用符号模式時的指令文法格式如下:
chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE...
第一組标志 ( [ugoa…]),使用者标志,定義了更改檔案權限的使用者類。
- u:檔案所有者。
- g:作為組成員的使用者。
- o:所有其他使用者。
- a:所有使用者,等同于ugo.
省略使用者标志時,預設為a.
第二組标志 ( [-+=]),操作标志,定義是否要删除、添加或設定權限:
- -:删除指定的權限。
- +:添加指定的權限。
- =:将目前權限更改為指定權限。如果符号後沒有給出=權限,則删除指定使用者類的所有權限。
權限 ( perms…) 使用以下零個或一個或多個字母顯式設定:r、w、x、X、s和t。使用集合中的單個字母u, g, 并将o權限從一個使用者類複制到另一個使用者的類。
為多個使用者類 ( [,…]) 設定權限時,使用逗号(不帶空格)分隔符号模式。
以下是如何chmod在符号模式下使用指令的一些示例:
授予組成員執行檔案的權限,但不能對其進行讀寫:
chmod g=x filename
删除所有使用者的寫權限:
chmod a-w filename
遞歸删除其他使用者的執行權限:
chmod -R o-x dirname
删除檔案所有者以外的所有使用者的讀、寫和執行權限:
chmod og-rwx filename
同樣的事情也可以通過使用以下形式來完成:
chmod og= filename
授予檔案所有者讀取、寫入和執行權限,授予檔案組讀取權限,不授予所有其他使用者權限:
chmod u=rwx,g=r,o= filename
數值方法
chmod使用符号模式時的指令文法格式如下:
chmod [OPTIONS] NUMBER FILE...
使用數字模式時,您可以同時為所有三個使用者類别(所有者、組和所有其他)設定權限。
權限編号可以是 3 位或 4 位數字。當使用3位數字時,第一位代表檔案所有者的權限,第二位代表檔案組,最後一位代表所有其他使用者。
每個寫入、讀取和執行權限都有以下數值:
- r(讀取)= 4
- w(寫)= 2
- x(執行)= 1
- 沒有權限= 0
特定使用者類的權限編号由該組的權限值的總和表示。
要在數字模式下找出檔案的權限,隻需計算所有使用者類的總數。例如,要授予檔案所有者讀取、寫入和執行權限,授予檔案組讀取和執行權限以及僅授予所有其他使用者讀取權限,您可以執行以下操作:
- 所有者:rwx=4+2+1=7
- 組:rx=4+0+1=5
- 其他:rx=4+0+0=4
使用上面的方法,我們得到了754代表所需權限的數字。
要設定setuid、setgid和sticky bit标志,請使用四位數字。
當使用 4 位數字時,第一個數字的含義如下:
- setuid=4
- setgid=2
- sticky=1
- no changes= 0
接下來的三位數字與使用 3 位數字時的含義相同。
如果第一個數字是 0 可以省略,模式可以用 3 位表示。數字模式0755與 相同755。
要計算數值模式,也可以使用另一種方法(二進制方法),但稍微複雜一些。對于大多數使用者來說,知道如何使用 4、2 和 1 計算數值模式就足夠了。
stat 您可以使用以下指令以數字表示法檢查檔案的權限:
stat -c "%a" file_name
以下是如何chmod在數字模式下使用指令的一些示例:
授予檔案所有者讀取和寫入權限,并且隻授予組成員和所有其他使用者的讀取權限:
chmod 644 dirname
授予檔案所有者讀取、寫入和執行權限,授予組成員讀取和執行權限,不授予所有其他使用者權限:
chmod 750 dirname
為給定目錄授予讀取、寫入和執行權限以及粘性位:
chmod 1777 dirname
遞歸地設定檔案所有者的讀取、寫入和執行權限,并且對給定目錄上的所有其他使用者沒有權限:
chmod -R 700 dirname
結論
在 Linux 中,使用檔案權限、屬性和所有權來限制對檔案的通路,要更改檔案的權限,請使用該chmod指令。