在UNIX/Linux系統中,每個文件或目錄都與3種類型的許可權相關聯,這些許可權控制對它們的訪問許可權。這些許可權是讀、寫和執行。這允許或防止用戶讀取文件或寫入文件。執行許可權允許用戶將文件作為腳本或可執行文件運行。
什麼是chmod命令
Chmod命令用於更改Linux中文件系統對象(如文件和目錄)的訪問許可權。它還用於更改特殊標誌,例如SUID、SGID和粘附位。
您可以使用ls -l
命令來檢查由r、w和x表示的文件模式。
Linux文件許可權
在Linux/Unix類操作系統中,每個文件和目錄都由用戶和組擁有。當我們談論Linux文件許可權時,它涉及文件所有者、組所有者和許可權。
有三個基於用戶的許可權組:
- 所有者 - 擁有文件或目錄的用戶。默認情況下,當用戶創建文件或目錄時,同一用戶將成為其所有者。
- 組 - 擁有文件或目錄的組。組中的所有成員將在文件或目錄上具有相同的訪問許可權。
- 其他 - 不是文件或目錄所有者且不屬於組的用戶。這意味著「everyone」或另一種說法是「world」。
可以使用chown命令更改文件和目錄的所有權。要僅更改文件或目錄的組,請使用chgrp命令。默認的文件和目錄許可權基於umask設置。
每個文件或目錄有三種文件許可權類型:
- 讀
- 寫
- 執行
字元表示讀是r
,寫是w
,執行是x
。
讀許可權
文件的讀許可權表示可以打開並閱讀文件。
目錄(文件夾)的讀許可權表示用戶可以列出目錄的內容。
寫許可權
文件的寫許可權表示可以更改(修改或更改)文件。
目錄的寫許可權表示可以更改目錄內容。例如,用戶可以在目錄中創建新文件、刪除或重命名文件。
執行許可權
文件的執行許可權表示可以執行文件。例如,用戶可以執行程序或shell腳本文件。
目錄的執行許可權表示用戶可以更改(cd)到目錄。但是,這不允許用戶列出目錄內容。
特殊許可權模式
除了讀、寫和執行之外,您還可以在文件和目錄上分配幾個特殊許可權模式。特殊許可權模式是SUID(setUID)、SGID(setGID)和粘附位。
當在文件上設置SUID位時,該文件始終作為擁有該文件的用戶而不是啟動程序的用戶運行。使用SUID的Linux命令的一個示例是ls -l /usr/bin/passwd
,該命令在普通用戶運行時會給予提升的特權。
當在文件上設置SGID時,有效組設置為文件的組。在執行程序時,用戶將獲得文件組許可權。
粘附位通常設置為目錄。一旦在目錄上設置了粘附位,則只有文件所有者或root可以更改該目錄內的文件或目錄。
如何在Linux中執行chmod
Chmod使用符號模式或數字模式來指定許可權。您需要是root、文件所有者或sudo用戶特權才能更改文件許可權。
使用數字模式更改文件/目錄許可權
Chmod數字模式也稱為絕對模式。這是最常用的方法。
讀、寫和執行分配具有特定數字型大小碼。我們使用該數字或組合來設置文件和目錄的許可權。
Linux許可權數字(八進位值)為:
r(讀取)= 4 w(寫入)= 2 x(執行)= 1 沒有許可權 = 0
數字模式中chmod的語法:
chmod <permission-number> <file-name or directory-name>
許可權數字通常是一個3位數字(每個三位數字由一個八進位模式數字表示)。第一個數字表示所有者,下一個數字表示組,最後一個數字表示其他人。
例如,要設置文件夾的chmod許可權:
chmod 777 hello-programs
以下是關於Linux文件許可權和如何更改它們的介紹:
在文件許可權中,第一個數字代表文件所有者的讀、寫、執行許可權,用rwx表示,分別對應4、2、1,所以如果第一個數字是7,則代表文件所有者擁有讀、寫和執行許可權。第二個數字代表文件所屬組的讀、寫、執行許可權,第三個數字代表其他用戶的讀、寫、執行許可權。許可權數字可以通過每個用戶類別中八進位值的總和來計算。
例如,許可權 -rw-rw-r--
可以表示為:
- 用戶(u):
rw-
= 4+2+0=6 - 組(g):
rw-
= 4+2+0=6 - 其他(o):
r--
= 4+0+0=4
從上面的計算中,我們得到數字許可權為 664
。
再舉一個例子,文件許可權為 -rwxr-xr--
:
- 用戶(u):
rwx
= 4+2+1=7 - 組(g):
r-x
= 4+0+1=5 - 其他(o):
r-x
= 4+0+1=5
在這種情況下,數字許可權為 755
。
你可以同時為用戶、所有者和其他用戶設置許可權。如果要添加特殊許可權,如粘著位(sticky bit)、SUID或SGID,我們使用4位數字。第一個數字用於設置以下特殊許可權:
SUID = 4 SGID = 2 sticky bit = 1 zero effect = 0
例如,在/tmp目錄上設置特殊許可權粘著位:
chmod 1777 /tmp
當有許多文件和目錄時,你可以遞歸更改許可權:
chmod -R 755 directory-name
使用符號模式進行chmod更改文件/目錄許可權
chmod符號模式也稱為相對模式。當使用符號模式進行chmod操作時,使用字元u(所有者)、g(組)、o(其他)和a(所有用戶)。
基本語法:
chmod <ugoa><-+=><rwxst> file-name or directory-name
其中:
- "-" - 僅刪除指定許可權
- "+" - 添加到已有的其他許可權
- "=" - 忽略所有許可權並按指定的許可權更改許可權
例如,要在目錄上設置完全許可權:
chmod u=rwx,g=rwx,o=rwx directory-name
或者
chmod ugx+rwx directory-name
或者
chmod a+rwx directory-name
遞歸更改目錄和文件許可權
要遞歸更改目錄的文件許可權,請使用-R或--recursive標誌。以下是遞歸更改目錄許可權的語法:
chmod -R MODE filename
例如,要在/var/www目錄中為子目錄和文件分配數字許可權模式755,請運行以下命令:
sudo chmod -R 755 /var/www/html
在符號表示法中,可以表示為:
chmod -R u=rwx,og=rx /var/www/html
指定的目錄路徑中的所有文件和子目錄都將繼承分配給目錄的許可權。
更改多個文件的許可權
有時你想批量更改目錄或文件的許可權。
find /path/to/directory -type d -exec chmod mode {} \; find /path/to/directory -type f -exec chmod mode {} \;
例如,將/usr/share/nginx/html目錄路徑中的目錄許可權更改為755,請執行以下命令:
find /usr/share/nginx/html -type d -exec chmod 755 {} \;
符號表示法為:
find /usr/share/nginx/html -type d -exec chmod u=rwx,og=rx {} \;
使用參考文件更改許可權
使用--reference=reference_file選項,可以將文件許可權從一個文件轉移到另一個文件。在所示的語法中,filename最終具有與reference_file相同的文件許可權。
chmod --reference=reference_file filename
符號鏈接中的chmod
在大多數Linux系統中,符號鏈接許可權一般不太重要。通常,更改符號鏈接的文件許可權會更改它所指向的文件的文件許可權,而不是符號鏈接本身。但是在某些系統中,如果需要更改符號鏈接的許可權,則可以鍵入:
chmod 644 symlink
一些有用的chmod命令示例
chmod 755 directory-name
這等價於chmod u=rwx,go=rx。這為所有者設置讀、寫和執行許可權(完全許可權),為其他用戶設置讀和執行許可權。
chmod +x filename
這相當於chmod ugo+x或chmod u+x,g+x,o+x。這為所有者、組和其他用戶設置執行許可權。
chmod 750 directory-name
這等價於chmod u+rwx,g=rx,o=.這為所有者設置完全許可權,為組設置讀和執行許可權,為其他用戶設置無許可權。
chmod u+rwx directory-name
忽略所有許可權並為所有者設置讀、寫和執行許可權。
chmod -R 700 directory-name
遞歸為目錄的所有者設置完全許可權
chmod go-rwx filename
將組和其他用戶的讀、寫和執行許可權從文件中刪除。
chmod 644 filename
這為所有者分配讀和寫許可權,為文件的組和其他用戶分配只讀許可權。
chmod g+x filename
將組成員的執行許可權分配給文件
chmod go-rw filename
刪除文件的用戶和組類別的讀和寫許可權。
在本教程中,我們學習了Linux chmod命令以及如何更改它們的許可權。