全面介紹 Linux 權限

全面介紹 Linux 權限

知道如何控制用戶對文件的訪問是一項基本的系統管理技能。-- Alex Juarez(作者)

本文將介紹標準 Linux 文件系統權限,並進一步研究特殊權限,以及使用 umask 來解釋默認權限作為文章的結束。

理解 ls 命令的輸出

在討論如何修改權限之前,我們需要知道如何查看權限。通過 ls 命令的長列表參數(-l)為我們提供了有關文件的許多信息。

為了理解這些是什麼意思,讓我們將關於權限的輸出分解為各個部分。單獨理解每個部分會更容易。

讓我們看看在上面的輸出中的最後一行的每個組件:

全面介紹 Linux 權限

第 1 節(左側)顯示文件的類型。

全面介紹 Linux 權限

ls 的 info 頁面 完整列出了不同的文件類型。

每個文件都有三種訪問方式:

  • 屬主
  • 所有其他人 第 2、3 和 4 節涉及用戶(屬主)、組和“其他用戶”權限。每個部分都可以包含 r(讀取)、w(寫入)和 x(執行)權限的組合。

每個權限還分配了一個數值,這在以八進制表示形式討論權限時很重要。

全面介紹 Linux 權限

第 5 節描述了其他替代訪問方法,例如 SELinux 或文件訪問控制列表(FACL)。

全面介紹 Linux 權限

第 6 節和第 7 節分別是屬主和組的名稱。

使用 chown 和 chmod

chown 命令

chown(更改所有權)命令用於更改文件的用戶和組的所有權。

要將文件 foo 的用戶和組的所有權更改為 root,我們可以使用以下命令:

在用戶名後跟冒號(:)運行該命令將同時設置用戶和組所有權。

要僅將文件 foo 的用戶所有權設置為 root 用戶,請輸入:

要僅更改文件 foo 的組所有權,請在組之前加冒號:

chmod 命令

chmod(更改模式)命令控制屬主、組以及既不是屬主也不屬於與文件關聯的組的所有其他用戶的文件許可權。

chmod 命令可以以八進制(例如 755、644 等)和符號(例如 u+rwx、g-rwx、o=rw)格式設置權限。

八進制表示法將 4 個“點”分配給“讀取”,將 2 個“點”分配給“寫入”,將 1 個點分配給“執行”。如果要給用戶(屬主)分配“讀取”權限,則將 4 分配給第一個插槽,但是如果要添加“寫入”權限,則必須添加 2。如果要添加“執行”,則要添加 1。我們對每種權限類型執行此操作:屬主、組和其他。

例如,如果我們想將“讀取”、“寫入”和“執行”分配給文件的屬主,但僅將“讀取”和“執行”分配給組成員和所有其他用戶,則我們應使用 755(八進制格式)。這是屬主的所有權限位(4+2+1),但組和其他權限的所有權限位只有 4 和 1(4+1)。

細分為:4+2+1=7,4+1=5 和 4+1=5。

如果我們想將“讀取”和“寫入”分配給文件的屬主,而只將“讀取”分配給組的成員和所有其他用戶,則可以如下使用 chmod:

在下面的示例中,我們在不同的分組中使用符號表示法。注意字母 u、g 和 o 分別代表“用戶”(屬主)、“組”和“其他”。我們將 u、g 和 o 與 +、- 或 = 結合使用來添加、刪除或設置權限位。

要將“執行”位添加到所有權權限集中:

要從組成員中刪除“讀取”、“寫入”和“執行”:

要將所有其他用戶的所有權設置為“讀取”和“寫入”:

特殊位:設置 UID、設置 GID 和粘滯位

除了標準權限外,還有一些特殊的權限位,它們具有一些別的用處。

設置用戶 ID(suid)

當在文件上設置 suid 時,將以文件的屬主的身份而不是運行該文件的用戶身份執行操作。一個 好的例子 是 passwd 命令。它需要設置 suid 位,以便更改密碼的操作具有 root 權限。

設置 suid 位的示例:

設置組 ID(sgid)

sgid 位與 suid 位類似,操作是在目錄的組所有權下完成的,而不是以運行命令的用戶身份。

一個使用 sgid 的例子是,如果多個用戶正在同一個目錄中工作,並且目錄中創建的每個文件都需要具有相同的組權限。下面的示例創建一個名為 collab_dir 的目錄,設置 sgid 位,並將組所有權更改為 webdev。

現在,在該目錄中創建的任何文件都將具有 webdev 的組所有權,而不是創建該文件的用戶的組。

“粘滯”位

粘滯位表示,只有文件所有者才能刪除該文件,即使組權限允許該文件可以刪除。通常,在 /tmp 這樣的通用或協作目錄上,此設置最有意義。在下面的示例中,“所有其他人”權限集的“執行”列中的 t 表示已應用粘滯位。

請記住,這不會阻止某個人編輯該文件,它只是阻止他們刪除該目錄的內容(LCTT 譯註:即刪除目錄下文件)。

我們將粘滯位設置為:

你可以自己嘗試在目錄上設置粘滯位並賦予其完整的組權限,以便多個屬於同一組的用戶可以在目錄上進行讀取、寫入和執行。

接著,以每個用戶的身份創建文件,然後嘗試以另一個用戶的身份刪除它們。

如果一切配置正確,則一個用戶應該不能從另一用戶那裡刪除文件。

請注意,這些位中的每個位也可以用八進制格式設置:SUID = 4、SGID = 2 和 粘滯位 = 1。(LCTT 譯註:這裡是四位八進制數字)

大寫還是小寫?

如果要設置特殊位時看到大寫的 S 或 T 而不是小寫的字符(如我們之前所見),那是因為不存在(對應的)底層的執行位。為了說明這一點,下面的示例創建一個設置了粘滯位的文件。然後,我們可以添加和刪除執行位以演示大小寫更改。

有條件地設置執行位

至此,我們使用小寫的 x 設置了執行位,而無需詢問任何問題即可對其進行設置。我們還有另一種選擇:使用大寫的 X 而不是小寫的,它將僅在權限組中某個位置已經有執行位時才設置執行位。這可能是一個很難解釋的概念,但是下面的演示將幫助說明它。請注意,在嘗試將執行位添加到組特權之後,該位沒有被設置上。

在這個類似的例子中,我們首先使用小寫的 x 將執行位添加到組權限,然後使用大寫的 X 為所有其他用戶添加權限。這次,大寫的 X設置了該權限。

理解 umask

umask 會屏蔽(或“阻止”)默認權限集中的位,以定義文件或目錄的權限。例如,umask輸出中的 2 表示它至少在默認情況下阻止了文件的“寫入”位。

使用不帶任何參數的 umask 命令可以使我們看到當前的 umask 設置。共有四列:第一列為特殊的suid、sgid 或粘滯位而保留,其餘三列代表屬主、組和其他人的權限。

為了理解這意味著什麼,我們可以用 -S 標誌來執行 umask(如下所示)以解釋屏蔽位的結果。例如,由於第三列中的值為 2,因此將“寫入”位從組和其他部分中屏蔽掉了;只能為它們分配“讀取”和“執行”。

要查看文件和目錄的默認權限集是什麼,讓我們將 umask 設置為全零。這意味著我們在創建文件時不會掩蓋任何位。

現在,當我們創建文件時,我們看到所有部分的默認權限分別為“讀取”(4)和“寫入”(2),相當於八進制表示 666。

我們可以對目錄執行相同的操作,並看到其默認權限為 777。我們需要在目錄上使用“執行”位,以便可以遍歷它們。

總結

管理員還有許多其他方法可以控制對系統文件的訪問。這些權限是 Linux 的基本權限,我們可以在這些基礎上進行構建。如果你的工作為你引入了 FACL 或 SELinux,你會發現它們也建立在這些文件訪問的首要規則之上。


via: https://opensource.com/article/19/8/linux-permissions-101

作者: Alex Juarez 選題: lujun9972 譯者: wxy 校對: wxy

本文由 LCTT 原創編譯, Linux中國 榮譽推出


分享到:


相關文章: