讓你10分鐘就能看懂Linux檔案許可權(超級詳細、超級簡單!!!)

慄砸發表於2020-12-23

引言

如果你遇到了修復web伺服器的檔案許可權問題,在網上搜尋後,有大佬告訴你需要遞迴地chmod 777 你的web目錄!

在這樣做之前,你很有必要了解chmod -R 777 到底做了什麼?

為什麼你永遠不應該將許可權設定為777?

本文解釋基本的Linux許可權模型以及與許可權對應的數字的含義


檔案許可權

在Linux中,對檔案的訪問由作業系統使用檔案許可權屬性所有權進行控制。

通過了解Linux檔案系統許可權模型,可以將對檔案和目錄的訪問限制為僅由授權使用者和程式訪問,從而使系統更加安全。

每個檔案由特定使用者和組擁有,併為三種不同類別的使用者分配許可權訪問權


一、不同類別

  • 檔案所有者
  • 群組成員
  • 其他人(其他所有人)

有三種檔案許可權型別適用於每個使用者類,並允許指定允許哪些使用者讀取檔案、寫入檔案或執行檔案

二、相同的許可權屬性適用於含義不同的檔案和目錄

讀許可權
  • 該檔案是可讀的。例如,設定讀取許可權後,使用者可以在文字編輯器中開啟檔案
  • 可以檢視目錄的內容。使用者可以使用ls命令列出目錄中的檔案
寫許可權
  • 可以更改或修改該檔案
  • 可以更改目錄的內容。使用者可以建立新檔案、刪除現有檔案、移動檔案、重新命名檔案等
執行許可權
  • 可以執行該檔案
  • 可以使用cd命令進入該目錄
可以使用 ls 命令檢視檔案許可權

例:

[root@localhost ~]# ls -l test.txt

輸出內容如下:

-rw-r--r--. 1 root root 465 Dec 22 17:46 fstab

三、詳細許可權引數含義

在這裡插入圖片描述

第一個字元顯示檔案型別

它可以是常規檔案(-)、目錄(D)、符號連結(L)或任何其他特殊型別的檔案
在這裡插入圖片描述

接下來的9個字元表示檔案許可權

三個三元組,每個三個字元。

第一個三元組顯示所有者許可權

第二個三元組顯示組許可權

最後一個三元組顯示所有其他許可權

四、許可權數字:

在這裡插入圖片描述
檔案許可權可以用數字或符號格式表示。

在本文中,我們將重點介紹數字格式。

許可權可以由三位或四位數字組成,範圍從0到7。

當使用3位數字時,第一位代表檔案所有者的許可權,第二位代表檔案組的許可權,最後一位代表所有其他使用者的許可權。

寫入、讀取和執行許可權具有以下數字值
  • r (讀) = 4

  • w (寫) = 2

  • x (可執行) = 1

  • 無許可權 = 0

特定使用者類的許可權數字是該類的許可權值之和。
許可權的每個數字可以是4、2、1 和 0 的和
  • 0(0+0+0)-沒有許可權

  • 1(0+0+1)-僅執行許可權

  • 2(0+2+0)-僅寫入許可權

  • 3(0+2+1)-寫入和執行許可權

  • 4(4+0+0)-只讀許可權

  • 5(4+0+1)-讀取和執行許可權

  • 6(4+2+0)-讀寫許可權

  • 7(4+2+1)-讀取、寫入和執行許可權

例如,如果許可權設定為750,則表示檔案所有者有讀、寫、執行許可權,檔案組有讀、執行許可權,其他使用者沒有許可權
  • 屬主:rwx=4+2+1=7

  • 屬組:r-x=4+0+1=5。

  • 其他:—=0+0+0=0

當許可權使用4位數字時,第一個數字的含義如下
  • setuid = 4

  • setgid = 2

  • sticky = 1

  • no changes = 0

接下來的三位數的含義與使用三位數時相同。

如果第一位數字為0,則可以省略,模式可以用3位數字表示,例如0755與755相同。

要以數字(八進位制)表示法檢視檔案的許可權,請使用stat命令:
[root@localhost ~]# stat -c "%a" test.txt
755

輸出數字:755

注意:永遠不要 chmod 777對檔案或目錄設定777許可權意味著它將對所有使用者都是可讀、可寫和可執行的,並且可能會帶來巨大的安全風險

五、例如

如果你以遞迴方式將 /var/www目錄下所有檔案和子目錄的許可權更改為777

則系統上的任何使用者都可以建立刪除修改該目錄中的檔案。

如果你的Web伺服器遇到許可權問題,請將檔案的所有權更改為執行應用程式的使用者,並將檔案的許可權設定為644,將目錄的許可權設定為755,而不是遞迴地將許可權設定為777

六、chmod和chown

1、使用chmod命令更改許可權在這裡插入圖片描述
建立一個檔案,查詢其許可權,分別用兩種方式修改許可權後再次檢視(chmod)

[root@localhost ~]# touch xxgc.txt
[root@localhost ~]# ll xxgc.txt 
-rw-r--r--. 1 root root 0 Dec 22 19:03 xxgc.txt
[root@localhost ~]# chmod a+x xxgc.txt 
[root@localhost ~]# ll xxgc.txt 
-rwxr-xr-x. 1 root root 0 Dec 22 19:03 xxgc.txt
[root@localhost ~]# 
[root@localhost ~]# chmod 777 xxgc.txt 
[root@localhost ~]# ll xxgc.txt 
-rwxrwxrwx. 1 root root 0 Dec 22 19:03 xxgc.txt
[root@localhost ~]# 

2、使用chown命令更改檔案所有權
在這裡插入圖片描述
將剛剛的 xxgc.txt 檔案的所有者和所有組都改為edc(chown)

[root@localhost ~]# ll xxgc.txt 
-rwxrwxrwx. 1 root root 0 Dec 22 19:03 xxgc.txt
[root@localhost ~]# chown edc:edc xxgc.txt 
[root@localhost ~]# ll xxgc.txt 
-rwxrwxrwx. 1 edc edc 0 Dec 22 19:03 xxgc.txt
[root@localhost ~]# 

假設您的伺服器上有一個PHP應用程式以使用者“harry”身份執行

要設定要執行的正確許可權,請執行以下操作

[root@localhost ~]# chown -R harry: /var/www/
[root@localhost ~]# find /var/www/ -type d -exec chmod 755 {} \;
[root@localhost ~]# find /var/www/ -type f -exec chmod 644 {} \;
[root@localhost ~]# 

七、注意

只有root使用者檔案所有者或具有sudo許可權的使用者才能更改檔案的許可權

使用chmod時要格外小心,特別是在遞迴更改許可權的時候

八、最後

如果你管理的是Linux系統,瞭解Linux許可權是如何工作的非常重要

永遠不要設定777(rwx rwx rwx)許可權、檔案和目錄許可權

777意味著任何人都可以對這些檔案做任何事情

相關文章