Linux 中的權限(chown、chmod、SUID、GUID、粘滯位、ACL、umask)

大家好。 這是《RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 和 EX300》一書中文章的翻譯。

推: 我希望這篇文章不僅對初學者有用,而且還能幫助更有經驗的管理員簡化他們的知識。

那麼我們走吧。

Linux 中的權限(chown、chmod、SUID、GUID、粘滯位、ACL、umask)

要訪問 Linux 中的文件,需要使用權限。 這些權限分配給三個對象:文件所有者、組所有者和另一個對象(即其他人)。 在本文中,您將了解如何應用權限。

本文首先概述基本概念,然後討論特殊權限和訪問控制列表 (ACL)。 在本文的最後,我們將介紹通過 umask 設置默認權限以及管理擴展用戶屬性。

文件所有權管理

在討論權限之前,您應該了解文件和目錄所有者的角色。 文件和目錄的所有權對於處理權限至關重要。 在本節中,您將首先了解如何查看所有者。 然後,您將了解如何更改文件和目錄的組所有者和用戶。

顯示文件或目錄的所有者

在 Linux 中,每個文件和每個目錄都有兩個所有者:用戶和組所有者。

這些所有者是在創建文件或目錄時設置的。 創建文件的用戶成為該文件的所有者,並且同一用戶所屬的主要組也成為該文件的所有者。 為了確定您作為用戶是否有權訪問文件或目錄,shell 會檢查所有權。

這按以下順序發生:

  1. shell 會檢查您是否是要訪問的文件的所有者。 如果您是所有者,您將獲得權限並且 shell 會停止檢查。
  2. 如果您不是文件的所有者,shell 將檢查您是否是對該文件具有權限的組的成員。 如果您是該組的成員,您將使用該組設置的權限訪問該文件,並且 shell 將停止檢查。
  3. 如果您既不是用戶也不是組的所有者,您將被授予其他用戶(其他)的權利。

要查看當前所有者分配,您可以使用以下命令 ls -l。 此命令顯示組的用戶和所有者。 下面您可以看到 /home 目錄中目錄的所有者設置。

[root@server1 home]# ls -l
total 8
drwx------. 3  bob            bob            74     Feb   6   10:13 bob
drwx------. 3  caroline       caroline       74     Feb   6   10:13 caroline
drwx------. 3  fozia          fozia          74     Feb   6   10:13 fozia
drwx------. 3  lara           lara           74     Feb   6   10:13 lara
drwx------. 5  lisa           lisa           4096   Feb   6   10:12 lisa
drwx------. 14 user           user           4096   Feb   5   10:35 user

使用命令 ls 您可以顯示給定目錄中文件的所有者。 有時,獲取系統上以給定用戶或組為所有者的所有文件的列表可能很有用。 為此,您可以使用 。 爭論 查找用戶 可以用於此目的。 例如,以下命令列出用戶 linda 擁有的所有文件:

find / -user linda

你也可以使用 搜索具有特定組作為其所有者的文件。

例如,以下命令搜索屬於該組的所有文件 用戶:

find / -group users

業主變更

要應用適當的權限,首先要考慮的是所有權。 有一個命令可以做到這一點 喬敦。 該命令的語法很容易理解:

chown кто что

例如,以下命令將 /home/account 目錄的所有者更改為用戶 linda:

chown linda /home/account

團隊 喬敦 有幾個選項,其中之一特別有用: -R。 您可以猜測它的作用,因為此選項也可用於許多其他命令。 這允許您遞歸地設置所有者,從而允許您設置當前目錄及其下面所有內容的所有者。 以下命令將 /home 目錄及其下面所有內容的所有權更改為 linda 用戶:

現在業主看起來像這樣:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 account account 62 Sep 25 21:41 account
drwx------. 2 lisa    lisa    62 Sep 25 21:42 lisa

讓我們做:

[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#

現在用戶lisa已成為帳戶目錄的所有者:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 lisa account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa    62 Sep 25 21:42 lisa

更改群組的所有者

有兩種方法可以更改組的所有權。 您可以使用以下方法執行此操作 喬敦,但是有一個特殊的命令名為 chgrp就可以了。 如果你想使用命令 喬敦, 使用 .: 在組名稱前面。

以下命令將 /home/account 組的任何所有者更改為該帳戶組:

chown .account /home/account

您可以使用 喬敦 以多種方式更改用戶和/或組的所有者。 這裡有些例子:

  • chown 麗莎 myfile1 將用戶 lisa 設置為 myfile1 的所有者。
  • chown lisa.sales myfile 將用戶 lisa 設置為 myfile 文件的所有者,並將 sales 組設置為同一文件的所有者。
  • chown 麗莎:銷售我的文件 與之前的命令相同。
  • chown .sales myfile 將 sales 組設置為 myfile 的所有者,而不更改用戶的所有者。
  • chown :銷售我的文件 與之前的命令相同。

你可以使用命令 chgrp更改組的所有者。 考慮以下示例,您可以在其中使用 chgrp 將帳戶目錄的所有者設置為 sales 組:

chgrp .sales /home/account

喬敦,您可以使用該選項 -R с chgrp,以及遞歸地更改組的所有者。

了解默認所有者

您可能已經註意到,當用戶創建文件時,將應用默認所有權。
創建該文件的用戶自動成為該文件的所有者,並且該用戶的主要組自動成為該文件的所有者。 這通常是 /etc/passwd 文件中作為用戶的主要組列出的組。 然而,如果用戶是多個組的成員,則用戶可以更改有效的主要組。

要顯示當前有效的主要組,用戶可以使用命令 團體:

[root@server1 ~]# groups lisa
lisa : lisa account sales

如果當前linda用戶想要更改有效的主要組,他將使用命令 新組接下來是他想要設置為新的有效主要組的組的名稱。 使用命令後 新組 主組將處於活動狀態,直到用戶輸入命令 出口 或不退出。

下面顯示了用戶 linda 如何使用此命令,其中 sales 作為主要組:

lisa@server1 ~]$ groups
lisa account sales
[lisa@server1 ~]$ newgrp sales
[lisa@server1 ~]$ groups
sales lisa account
[lisa@server1 ~]$ touch file1
[lisa@server1 ~]$ ls -l
total 0
-rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1

更改有效的主要組後,用戶創建的所有新文件都將以該組作為組所有者。要恢復到原始主要組設置,請使用 出口.

為了能夠使用命令 新組,用戶必須是他們想要用作主要組的組的成員。 另外,可以使用命令為組設置組密碼 密碼。 如果用戶使用命令 新組但不是目標組的成員,shell 會提示輸入該組的密碼。 輸入正確的組密碼後,將建立一個新的有效主組。

基本權限管理

Linux 權限系統發明於 1970 世紀 XNUMX 年代。 由於當年計算需求有限,基礎權限系統相當有限。 該權限系統使用可應用於文件和目錄的三種權限。 在本節中,您將了解如何使用和更改這些權限。

了解讀、寫和執行權限

三種基本權限允許您讀取、寫入和執行文件。 當這些權限應用於文件或目錄時,其效果會有所不同。 對於文件來說,讀權限賦予您打開該文件進行讀取的權限。 因此,您可以讀取其內容,但這意味著您的計算機可以打開該文件以對其執行某些操作。

例如,需要訪問庫的程序文件必須具有對該庫的讀取訪問權限。 由此可見,讀取權限是處理文件所需的最基本權限。

當應用於目錄時,讀取允許您顯示該目錄的內容。 您應該注意,此權限不允許您讀取目錄中的文件。 Linux 權限系統不知道繼承,讀取文件的唯一方法是使用該文件的讀取權限。

您可能會猜到,寫入權限如果應用於文件,則允許寫入該文件。 換句話說,它允許您更改現有文件的內容。 但是,它不允許您創建或刪除新文件或更改文件權限。 為此,您需要向要在其中創建文件的目錄授予寫入權限。 在目錄中,此權限還允許您創建和刪除新的子目錄。

執行權限是執行該文件所需的權限。 它永遠不會被默認安裝,這使得 Linux 幾乎完全不受病毒的影響。 只有對該目錄具有寫權限的人才能應用執行權限。

下面總結一下基本權限的使用:

Linux 中的權限(chown、chmod、SUID、GUID、粘滯位、ACL、umask)

使用 chmod

該命令用於管理權限。 CHMOD。 使用 CHMOD 你可以為用戶(user)、組(group)和其他(other)設置權限。 您可以在兩種模式下使用此命令:相對模式和絕對模式。 在絕對模式下,使用三位數字來設置基本權限。

Linux 中的權限(chown、chmod、SUID、GUID、粘滯位、ACL、umask)

設置權限時,計算您需要的值。 如果您想在 /somefile 中為用戶設置讀/寫/執行,為組設置讀/執行,為其他人設置讀/執行,那麼您可以使用以下命令 CHMOD:

chmod 755 /somefile

當你使用 CHMOD 這樣,當前的所有權限都會被您設置的權限替換。

如果要更改相對於當前權限的權限,可以使用 CHMOD 在相對模式下。 使用 CHMOD 在相對模式下,您可以使用三個指示器來指示您想要執行的操作:

  1. 首先,您指定要更改權限的人員。 為此,您可以選擇用戶 (u), 團體 (g) 和別的 (o).
  2. 然後,您可以使用語句在當前模式中添加或刪除權限,或絕對設置它們。
  3. 最後你使用 r, w и x來指定您要設置的權限。

在相對模式下更改權限時,您可以跳過“to”部分來添加或刪除所有對象的權限。 例如,此命令為所有用戶添加執行權限:

chmod +x somefile

在相對模式下工作時,您還可以使用更複雜的命令。 例如,此命令向一個組添加寫入權限並刪除其他組的讀取權限:

chmod g+w,o-r somefile

當使用 chmod -R o+rx /數據 您為 /data 目錄中的所有目錄以及文件設置執行權限。 要僅設置目錄而不是文件的執行權限,請使用 chmod -R o+ rX /數據.

大寫的 X 確保文件不會獲得執行權限,除非文件已經為某些對象設置了執行權限。 這使得 X 成為處理執行權限的更智能的方式; 這將避免在不需要的文件上設置此權限。

擴展權利

除了您剛剛讀到的基本權限之外,Linux 還具有一組高級權限。 這些不是您默認設置的權限,但有時它們提供了有用的補充。 在本節中,您將了解它們是什麼以及如何設置它們。

了解 SUID、GUID 和粘性位擴展權限

共有三種高級權限。 第一個是設置用戶標識符 (SUID) 的權限。 在某些特殊情況下,您可以將此權限應用於可執行文件。 默認情況下,運行可執行文件的用戶使用自己的權限運行該文件。

對於普通用戶來說,這通常意味著該程序的使用受到限制。 但是,在某些情況下,用戶需要特殊權限才能執行特定任務。

例如,考慮用戶需要更改密碼的情況。 為此,用戶必須將新密碼寫入 /etc/shadow 文件。 但是,非 root 用戶無法寫入該文件:

root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Apr 30 16:54 /etc/shadow

SUID權限為這個問題提供了一個解決方案。 /usr/bin/passwd 實用程序默認使用此權限。 這意味著在更改密碼時,用戶暫時成為 root,這允許他寫入 /etc/shadow 文件。 您可以使用以下命令查看 SUID 權限 ls -l 作為 s 在您通常期望看到的位置 x 對於自定義權限:

[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 Jan 28 2010 /usr/bin/passwd

SUID 權限可能看起來很有用(在某些情況下確實有用),但同時它也有潛在的危險。 如果應用不當,您可能會意外放棄 root 權限。 因此,我建議您謹慎使用它。

大多數管理員永遠不需要使用它; 您只會在操作系統默認設置它的某些文件中看到它。

第二個特殊權限是組標識符(SGID)。 該權限有兩個作用。 當應用於可執行文件時,它為執行該文件的用戶提供該文件的組所有者的權限。 因此SGID 可以做與SUID 或多或少相同的事情。 然而,SGID 實際上並不用於此目的。

與 SUID 權限一樣,SGID 作為默認設置應用於某些系統文件。

當應用於目錄時,SGID 會很有用,因為您可以使用它來設置在該目錄中創建的文件和子目錄的默認組所有者。 默認情況下,當用戶創建文件時,其有效主要組將設置為該文件的組所有者。

這並不總是很有用,特別是因為 Red Hat/CentOS 用戶將其主要組設置為與用戶同名的組,並且用戶是該組的唯一成員。 因此,默認情況下,用戶創建的文件將批量共享。

想像這樣一種情況:用戶 linda 和 lori 從事會計工作,並且是某個組的成員 帳戶。 默認情況下,這些用戶是私有組的成員,並且他們是該組的唯一成員。 然而,這兩個用戶都是帳戶組的成員,而且還作為輔助組參數。

默認情況是,當這些用戶中的任何一個創建文件時,主要組將成為所有者。 因此,默認情況下,linda 無法訪問 lori 創建的文件,反之亦然。 但是,如果您創建共享組目錄(例如 /groups/account)並確保 SGID 權限應用於該目錄,並且組帳戶設置為該目錄的組所有者,則在該目錄中創建的所有文件以及所有其子目錄,也默認獲取群組帳戶作為群組所有者。

因此,SGID 權限是在公共組目錄上設置的非常有用的權限。

輸出中顯示 SGID 權限 ls -l 作為 s 在您通常會獲得執行組權限的位置:

[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account

第三個特殊權限是粘性位。 在多個用戶對同一目錄具有寫訪問權限的環境中,此權限對於保護文件免遭意外刪除非常有用。 如果使用粘滯位,則只有當用戶是文件或包含該文件的目錄的用戶所有者時才能刪除該文件。 因此,它被用作 /tmp 目錄的默認權限,並且對於公共組目錄也很有用。

如果沒有粘滯位,如果用戶可以在目錄中創建文件,他們也可以從該目錄中刪除文件。 在公共團體環境中,這可能會很煩人。 想像一下用戶 linda 和 lori,他們都擁有 /data/account 目錄的寫入權限,並通過成為帳戶組的成員來獲得這些權限。 因此,linda 可以刪除 lori 創建的文件,反之亦然。

當您應用粘滯位時,如果滿足以下條件之一,用戶只能刪除文件:

  • 用戶是文件的所有者;
  • 用戶是文件所在目錄的所有者。

當使用 ls -l,你可以看到粘性位為 t 在您通常會看到其他人的執行權限的位置:

[root@hnl data]# ls -ld account/
drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/

應用擴展權利

要應用 SUID、SGID 和粘性位,您還可以使用 CHMOD。 SUID 的數值為 4,SGID 的數值為 2,粘性位的數值為 1。

如果要應用這些權限,則需要添加一個四位數字參數 CHMOD,其第一位數字表示特殊權限。 例如,以下行將為目錄添加 SGID 權限,並為用戶設置 rwx,為組和其他設置 rx:

chmod 2755 /somedir

如果您需要在使用之前查看當前設置的權限,那麼這是相當不切實際的 CHMOD 在絕對模式下。 (如果不這樣做,您將面臨覆蓋權限的風險。)因此,如果您需要應用任何特殊權限,我建議以相對模式運行:

  1. 用於 SUID 使用 chmod u+s.
  2. 供 SGID 使用 chmod g+s.
  3. 用於粘性位使用 chmod+t,後跟要為其設置權限的文件或目錄的名稱。

該表總結了您需要了解的有關管理特殊權限的所有信息。

Linux 中的權限(chown、chmod、SUID、GUID、粘滯位、ACL、umask)

使用特殊權利的示例

在此示例中,您使用特殊權限使組成員可以更輕鬆地共享共享組目錄中的文件。 您將 ID 位和粘性位分配給設置的組 ID,您會發現一旦設置了它們,就會添加功能以使組成員更輕鬆地一起工作。

  1. 打開您作為 linda 用戶的終端。 您可以使用以下命令創建用戶 用戶添加琳達,添加密碼 密碼琳達.
  2. 使用以下命令在根目錄中創建 /data 目錄和 /data/sales 子目錄 mkdir -p /數據/銷售。 完全的 cd /數據/銷售轉至銷售目錄。 完全的 觸摸琳達1 и 觸摸琳達2創建 linda 擁有的兩個空文件。
  3. 執行 蘇麗莎 將當前用戶切換為用戶 lisa,該用戶也是 sales 組的成員。
  4. 執行 cd /數據/銷售 並從該目錄執行 ls -l。 您將看到由 linda 用戶創建且屬於 linda 組的兩個文件。 完全的 rm -f 琳達*。 這將刪除這兩個文件。
  5. 執行 觸摸麗莎1 и 觸摸麗莎2創建用戶 lisa 擁有的兩個文件。
  6. 執行 蘇- 將您的權限提升為root。
  7. 執行 chmod g+s,o+t /數據/銷售設置組標識符 (GUID) 位以及共享組目錄中的粘性位。
  8. 執行 蘇琳達。 然後做 觸摸琳達3 и 觸摸琳達4。 您現在應該看到您創建的兩個文件歸 sales 組所有,該組是 /data/sales 目錄的組所有者。
  9. 執行 rm -rf 麗莎*。 粘滯位可防止代表 linda 用戶刪除這些文件,因為您不是這些文件的所有者。 請注意,如果 linda 用戶是 /data/sales 目錄的所有者,他們無論如何都可以刪除這些文件!

Linux 中的 ACL 管理(setfacl、getfacl)

儘管上面討論的擴展權限為 Linux 處理權限的方式添加了有用的功能,但它不允許您向同一文件中的多個用戶或組授予權限。

訪問控制列表提供了此功能。 此外,它們允許管理員以復雜的方式設置默認權限,其中設置的權限可能因目錄而異。

了解 ACL

儘管 ACL 子系統為您的服務器添加了強大的功能,但它有一個缺點:並非所有實用程序都支持它。 因此,當您複製或移動文件時,您可能會丟失 ACL 設置,並且您的備份軟件可能無法備份您的 ACL 設置。

tar 實用程序不支持 ACL。 要確保創建備份時 ACL 設置不會丟失,請使用 明星 而不是焦油。 明星 使用與 tar 相同的選項; 它只是添加了對 ACL 設置的支持。

您還可以使用以下命令備份 ACL 獲取方法,可以使用 setfacl 命令恢復。 要創建備份,請使用 getfacl -R /目錄 > file.acls。 要從備份文件恢復設置,請使用 setfacl --restore=file.acl.

某些工具缺乏支持應該不是問題。 ACL 通常作為一種結構措施應用於目錄,而不是應用於單個文件。
因此,它們不會太多,而只會很少,應用於文件系統中的智能地方。 因此,恢復您使用的原始 ACL 相對容易,即使您的備份軟件不支持它們。

為 ACL 準備文件系統

在開始使用 ACL 之前,您可能需要準備文件系統以支持 ACL。 由於文件系統元數據需要擴展,因此文件系統中並不總是默認支持 ACL。 如果在為文件系統設置 ACL 時收到“操作不受支持”消息,則您的文件系統可能不支持 ACL。

要解決此問題,您需要添加選項 acl掛載 在 /etc/fstab 中,以便默認情況下使用 ACL 支持掛載文件系統。

使用 setfacl 和 getfacl 更改和查看 ACL 設置

要設置 ACL,您需要命令 Setfacl。 要查看當前 ACL 設置,您需要 獲取方法. 團隊 ls -l 不顯示任何現有的 ACL; 它只是在權限列表後面顯示一個 +,這表明 ACL 也適用於該文件。

在設置 ACL 之前,最好使用以下命令顯示當前 ACL 設置: 獲取方法。 在下面的示例中,您可以看到當前的權限,如下所示 ls -l,也如圖所示 獲取方法。 如果你仔細觀察,你會發現顯示的信息是完全相同的。

[root@server1 /]# ls -ld /dir
drwxr-xr-x. 2 root root 6 Feb 6 11:28 /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

執行命令的結果 獲取方法 下面您可以看到顯示了三個不同對象的權限:用戶、組和其他。 現在讓我們添加一個 ACL 以向銷售組授予讀取和執行權限。 為此命令 setfacl -mg:銷售:rx /dir。 在這個團隊中 -m 表示當前ACL設置需要更改。 在那之後 g:銷售:rx 告訴命令設置讀取執行 ACL (rx)對於組(g) 銷售量。 您可以在下面看到該命令的外觀,以及更改當前 ACL 設置後 getfacl 命令的輸出。

[root@server1 /]# setfacl -m g:sales:rx /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
group:sales:r-x
mask::r-x
other::r-x

既然您了解瞭如何設置組 ACL,那麼理解用戶和其他用戶的 ACL 就很容易了。 例如,命令 setfacl -mu:li​​nda:rwx /數據 向 /data 目錄中的用戶 linda 授予權限,而不使他成為所有者或更改當前所有者的分配。

團隊 Setfacl 有很多功能和選項。 其中一個選項尤為重要,即參數 -R。 如果使用,該選項將為當前存在於設置 ACL 的目錄中的所有文件和子目錄設置 ACL。 建議您在更改現有目錄的 ACL 時始終使用此選項。

使用默認 ACL

使用 ACL 的好處之一是您可以向目錄中的多個用戶或組授予權限。 另一個好處是您可以通過使用默認 ACL 來啟用繼承。

通過設置默認 ACL,您可以確定將為目錄中創建的所有新項目設置的權限。 請注意,默認 ACL 不會更改現有文件和子目錄的權限。 要更改它們,您還需要添加普通的 ACL!

了解這一點很重要。 如果要使用ACL配置多個用戶或組訪問同一目錄,則必須設置兩次ACL。 首次使用 setfacl-R-m更改當前文件的 ACL。 然後使用 setfacl-md:照顧所有將要創建的新元素。

要設置默認 ACL,您只需添加選項 d 選項後 -m (順序很重要!)。 所以使用 setfacl -md:g:銷售:rx /數據如果您希望團體銷售讀取並執行 /data 目錄中創建的任何內容。

使用默認 ACL 時,為其他人設置 ACL 也可能很有用。 這通常沒有多大意義,因為您還可以使用以下命令更改其他人的權限 CHMOD。 然而,你不能做什麼 CHMOD,是指定必須為創建的每個新文件授予其他用戶的權限。 如果您想阻止其他人獲得對 /data 中創建的任何內容的任何權限,例如使用 setfacl -md:o::- /data.

ACL 和普通權限並不總是能夠很好地集成。 如果您將默認 ACL 應用於目錄,然後將項目添加到該目錄,然後嘗試更改正常權限,則可能會出現問題。 適用於普通權限的更改不會很好地反映在 ACL 概述中。 為避免出現問題,請先設置普通權限,然後設置默認 ACL(此後儘量不要再次更改它們)。

使用 ACL 提升權限管理的示例

在此示例中,您將繼續使用之前創建的 /data/account 和 /data/sales 目錄。 在前面的示例中,您確保銷售組具有 /data/sales 的權限,並且帳戶組具有 /data/account 的權限。

首先,確保帳戶組獲得對 /data/sales 目錄的讀取權限,並且銷售組獲得對 /data/account 目錄的讀取權限。

然後,您設置默認 ACL 以確保所有新文件都為所有新項目設置了正確的權限。

  1. 打開終端。
  2. 執行 setfacl -mg:帳戶:rx /數據/銷售 и setfacl -mg:銷售:rx /數據/帳戶.
  3. 執行 獲取方法以確保按照您想要的方式設置權限。
  4. 執行 setfacl -md:g:帳戶:rwx,g:銷售:rx /數據/銷售設置銷售目錄的默認 ACL。
  5. 使用以下命令為 /data/account 目錄添加默認 ACL setfacl -md:g:銷售:rwx,g:帳戶:rx /數據/帳戶.
  6. 通過將新文件添加到 /data/sales 來驗證 ACL 設置是否有效。 完全的 觸摸/數據/銷售/新文件 並做 getfacl /數據/銷售/newfile 檢查當前權限。

使用 umask 設置默認權限

在上面,您學習瞭如何使用默認 ACL。 如果您不使用 ACL,則有一個 shell 選項可以確定您將獲得的默認權限: 遮罩 (反向掩碼)。 在本節中,您將學習如何更改默認權限 遮罩.

您可能已經註意到,當您創建新文件時,會設置一些默認權限。 這些權限由設置決定 遮罩。 此 shell 設置適用於登錄時的所有用戶。 在參數中 遮罩 使用一個數值,該數值是從可以為文件自動設置的最大權限中減去的; 文件的最大設置為 666,目錄的最大設置為 777。

但是,該規則有一些例外情況。 您可以找到完整的設置概述 遮罩 在下表中。

使用的數字中 遮罩,就像命令的數字參數的情況一樣 CHMOD,第一個數字是指用戶的權限,第二個數字是指組的權限,最後一個是指為其他人設置的默認權限。 意義 遮罩 默認值 022 為所有新文件提供 644,為服務器上創建的所有新目錄提供 755。

所有數值的完整概述 遮罩 及其結果如下表所示。

Linux 中的權限(chown、chmod、SUID、GUID、粘滯位、ACL、umask)

查看 umask 設置如何工作的一個簡單方法如下:從文件的默認權限設置為 666 開始,然後減去 umask 以獲得有效權限。 對目錄執行相同操作,其默認權限為 777。

有兩種方法可以更改 umask 設置:針對所有用戶和針對個人用戶。 如果要為所有用戶設置 umask,則必須確保在啟動 shell 環境文件時考慮 umask 設置(如 /etc/profile 中指定)。 正確的方法是在 /etc/profile.d 目錄中創建一個名為 umask.sh 的 shell 腳本,並指定要在該 shell 腳本中使用的 umask。 如果在此文件中更改 umask,則會在登錄服務器後應用於所有用戶。

通過 /etc/profile 和相關文件設置 umask 的另一種方法(適用於所有登錄用戶)是更改在每個用戶的主目錄中創建的名為 .profile 的文件中的 umask 設置。

此文件中應用的設置僅適用於個人用戶; 因此,如果您需要更多細節,這是一個很好的方法。 我個人喜歡這個功能,將 root 用戶的默認 umask 更改為 027,而普通用戶則使用默認 umask 022 運行。

使用擴展用戶屬性

這是有關 Linux 權限的最後一部分。

使用權限時,用戶或組對象與用戶或組對像對文件或目錄具有的權限之間始終存在關係。 保護 Linux 服務器上的文件的另一種方法是使用屬性。
無論用戶如何訪問文件,屬性都會發揮作用。

與 ACL 一樣,文件屬性可能需要包含選項 安裝.

這是一個選項 用戶屬性。 如果在使用擴展用戶屬性時收到“不支持操作”消息,請務必設置參數 安裝 在 /etc/fstab.

許多屬性都有記錄。 有些屬性可用但尚未實現。 不要使用它們; 他們不會給你帶來任何東西。

以下是您可以應用的最有用的屬性:

A 該屬性確保文件的文件訪問時間不會改變。
通常,每次打開文件時,文件的訪問時間都必須記錄在文件的元數據中。 這會對性能產生負面影響; 因此對於經常訪問的文件,該屬性 A 可用於禁用此功能。

a 此屬性允許您添加但不能刪除文件。

c 如果您使用的文件系統支持卷級壓縮,則此文件屬性可確保在第一次啟用壓縮機制時對文件進行壓縮。

D 此屬性確保對文件的更改立即寫入磁盤而不是先緩存。 這是重要數據庫文件的一個有用屬性,可確保它們不會在文件緩存和硬盤驅動器之間丟失。

d 此屬性可確保文件不會保存在使用轉儲實用程序的備份中。

I 此屬性啟用對其啟用的目錄的索引。 這為 Ext3 等不使用 B 樹數據庫進行快速文件訪問的原始文件系統提供了更快的文件訪問。

i 此屬性使文件不可變。 因此,無法對文件進行任何更改,這對於需要額外保護的文件很有用。

j 此屬性確保在 ext3 文件系統上,文件首先寫入日誌,然後寫入硬盤上的數據塊。

s 刪除文件後將保存文件的塊覆蓋為0。 這可確保文件一旦被刪除就無法恢復。

u 該屬性存儲有關刪除的信息。 這使您可以開發一個實用程序來使用此信息來挽救已刪除的文件。

如果要應用屬性,可以使用命令 聊天室。 例如,使用 chattr +s 某個文件將屬性應用於某個文件。 需要刪除屬性嗎? 然後使用 chattr -s 某個文件並且它將被刪除。 要獲取當前應用的所有屬性的概述,請使用命令 薩特.

總結

在本文中,您學習瞭如何使用權限。 您了解了三種基本權限、高級權限以及如何在文件系統上應用 ACL。 您還學習瞭如何使用 umask 選項來應用默認權限。 在本文末尾,您了解瞭如何使用用戶擴展屬性來應用額外的文件系統安全層。

如果您喜歡這個翻譯,請在評論中留言。 會有更多的動力去進行有用的翻譯。

糾正了文章中的一些拼寫錯誤和語法錯誤。 將一些大的段落縮減為較小的段落,以提高可讀性。

而不是“只有擁有目錄管理權限的人才能應用執行權限”。 固定為“只有對該目錄具有寫權限的人才能應用執行權限。”,這會更正確。

感謝您的評論 別雷斯.

替換:
如果您不是用戶的所有者,shell 將檢查您是否是某個組(也稱為文件組)的成員。

在:
如果您不是文件的所有者,shell 將檢查您是否是對該文件具有權限的組的成員。 如果您是該組的成員,您將使用該組設置的權限訪問該文件,並且 shell 將停止檢查。

感謝您的評論 加密海盜

來源: www.habr.com

添加評論