解密 Linux 文件系統權限

已發表: 2017-02-24

Linux 文件權限對某些人來說似乎是神秘的數論象形文字,這是可以理解的。 Linux 的文件系統權限模型源於 UNIX 的遺留問題。 但是,一旦您了解了它們背後的邏輯,它們就很容易掌握。

權限組和類型

使用以下信息在文件系統中定義所有文件和文件夾訪問控制:

  • 三個權限組: u代表所有者, g組, oa ,所有用戶。
  • 三種權限類型: r 、read、 x 、execute、 w 、write。

權限類型是字符“r”、“x”和“w”,稱為標誌,如果您以某種方式列出文件或文件夾的權限,就會顯示為這樣。 未設置的標誌用“-”字符表示。 權限組用於更改文件所有權和組的命令,我們將在稍後進行深入研究。

查看權限

您可以使用 GUI 文件管理器或通過在控制台終端中檢查ls命令的輸出來查看文件或文件夾的權限。

打開終端並輸入以下命令:

$觸摸測試

$ ls -la 測試

-rw-r–r– 1 yorgos 員工 0 Feb 23 17:07 測試

字符串“-rw-r–r–”包含我們感興趣的文件系統權限信息。其餘字段從左到右顯示以下信息:

  • 該文件有多少個鏈接 (1)
  • 所有者用戶 ID (yorgos)
  • 組 ID(員工)
  • 以字節為單位的文件長度 (0)
  • 創建日期(2 月 23 日)
  • 創建時間 (17:07)
  • 文件名(測試)

權限位

您會注意到有 9 種不同的權限組和類型組合,但有 10 個標誌位置。 第一個顯示文件類型標誌,而後者指示權限本身。 文件類型可以是:“-”代表文件,“l”代表符號鏈接(這些文件系統鏈接只指向另一個文件)和“d”代表目錄。 由於我們示例中的第一個字符/標誌是“-”,因此我們談論的是一個簡單的文件。 繼續,讓我們分解權限字段:

:文件類型(可以包含 l、- 或 d)

rw- :讀寫權限(不執行)。 這些權限是給所有者的。

r- : 讀權限,沒有寫和執行權限。 這些權限涉及屬於某個組的用戶。

r– :讀權限,不能寫和執行。 最後,這些權限關係到其他所有人。

所以實際上,這只是意味著“這個文件可以由所有者讀取和寫入,而其他人是只讀的”。 該組共享相同的權限。

修改權限

同樣,為了修改文件或文件夾的權限,您可以使用 GUI 命令(這超出了本文的範圍,因此我們不會去那裡)或在終端中使用某些 linux 命令。 我們將要使用的命令稱為chmod (更改文件模式)。 chmod命令接受以多種不同方式改變其行為的各種參數,但其一般用途如下:

$ chmod <模式> <文件>

<mode> 由以下符號指定:

r讀取標誌

w寫標誌

x執行標誌

u用戶/所有者權限標誌

g組權限標誌

o其他用戶權限標誌

還有一些其他的,但我們將在文章的最後部分討論這些。

因此,假設您想為屬於該組的用戶授予執行權限(但首先要確保您是文件的所有者!):

$ chown g+x 測試
$ ls -l 測試
-rwxrwxrwx 1 yorgos 員工 0 Feb 23 17:07 測試

或者,也許您需要完全鎖定其他所有人。 他們將無法讀取、寫入或執行文件:

$ chown o-rwx 測試
$ ls -l 測試
-rwxrwx— 1 yorgos 員工 0 Feb 23 17:07 測試

在這裡,我們看到最後一個標誌都未設置為“-”。
如果您想查看更多示例,請通過發出以下命令查閱 chmod 的手冊頁:

$ man chmod

所有者和組

您還可以使用chown命令更改文件的文件和組所有權。

chown命令接受以某種方式改變其行為各種參數,但最常見的用法如下:

# chown <所有者> <文件>

或者

# chown <所有者:組> <文件>

第一個示例用於將文件的所有者更改為另一個文件的所有者。 但請記住,您必須具有 root 訪問權限才能更改文件的所有權。 因此,通過執行以下操作:

# chown 沒有人測試

# ls -l 測試

-rwxrwxrwt 1 無人員工 0 Feb 23 17:07 測試

現在發現該文件歸用戶標識“nobody”所有,不再歸“yorgos”所有。

同樣的命令:

# chown none: 車輪測試

# ls -l 測試

-rwxrwxrwt 1 無人輪 0 Feb 23 17:07 測試


將文件的所有權更改為nobody並將組更改為wheel

如果您想了解有關該命令及其各種參數的更多信息,請通過發出以下命令查閱 chown 手冊頁:

$ man chown

特殊權限

除了我們已經在文章中提到的權限類型和組之外,還有一些其他的,稱為“特殊權限”。

這些是:

s       設置用戶 ID 和設置組 ID 標誌。

      粘性標誌。

第一個是通過在chmod命令中以通常的方式使用“s”標誌設置的,如下所示:

$ chmod u+s 測試
$ ls -l 測試
-rwsrwx—   1 約戈斯  職員  0 二月 23 17:07 測試

此標誌也稱為 SUID(設置用戶 ID)或 SGID(設置組 ID)標誌。 如果設置了該位,則文件繼承其所有者的訪問權限。 這意味著執行文件的任何人都以所有者身份執行此操作。 SGID 類似,但文件繼承了其組的訪問權限。 當然,這可能會導致安全問題,因此必須小心。

粘性位或“t”特別有用。 當設置在一個目錄中時,通常像 /tmp 一樣共享,在那裡創建的文件只能由它們各自的所有者重命名或刪除。 如果未設置粘性位,則目錄的所有者無法控制它們。

您可以通過發出以下命令使目錄“粘性”:

$ chmod +t /目錄

八進製表示

除了使用標誌來定義諸如“r”和“w”之類的權限之外,您還可以使用數值。 chmod命令將以下值分配給權限:

“r” = 4

“w” = 2

“x” = 1

因此,為了將文件設置為所有者可以讀/寫/執行,其他人可以讀/執行,意思是“-rwxr-xr-x”,我們這樣計算數值:

rwx = 4+2+1 = 7

rx = 4+1 = 5

我們最後發出命令:

$ chmod 755 測試
$ ls – 測試
-rwxr-xr-x   1 約戈斯  職員  24 年 2 月 21 日 02:08 測試

通過使用不同的權限和數值自行練習以掌握它!