Linux 中的 umask 是什麼,如何使用它?

已發表: 2022-07-29
顯示 bash 提示符的 Linux 筆記本電腦
fatmawati achmad zaenuri/Shutterstock.com

在 Linux 中,所有目錄和文件都有訪問權限。 您可以使用chmod為不同​​的用戶設置您的首選訪問權限。 但是什麼決定了他們的默認權限呢? 讓我們談談umask

訪問權限

所有目錄和文件都有稱為模式位的標誌,這些標誌決定它們是否可以被讀取、寫入或執行。 執行文件意味著像程序或腳本一樣運行它。 對於一個目錄,您必須能夠“執行”一個目錄以cd進入它。 位模式設置統稱為目錄或文件的權限

共有三組權限。 一組用於目錄或文件的所有者。 除非所有權已通過chown更改,否則所有者是創建目錄或文件的人。

Linux 文件權限如何工作?
相關Linux 文件權限如何工作?

第二組權限適用於已分配目錄或文件的用戶組的成員。 通常,這是所有者的用戶組。

“其他人”還有第三組也是最後一組權限。 對於前兩組中未包含的每個人來說,這是一個包羅萬象的內容。

通過像這樣分離權限,可以為這三個類別賦予不同的能力。 這就是在 Linux 中控制目錄和文件訪問的方式。 儘管它是一個簡單的方案,但它提供了一種靈活且健壯的方式來決定誰可以對任何目錄或文件執行什麼操作。

模式位

您可以使用ls命令和-l (長格式)選項查看文件的權限。

 ls -l 任意*

我們還將通過添加-d (目錄)選項來查看目錄。 如果沒有這個選項, ls將查看目錄中的文件,而不是目錄本身。

 ls -ld 

使用 ls 查看目錄和文件的權限

ls列表中每個條目的開頭,有 10 個字符的集合。 這是文件和目錄的這些字符的特寫。

文件和目錄的權限,關閉

文件是最上面一行,目錄是下面一行。 第一個字符告訴我們查看的是目錄還是文件。 “d”表示目錄,破折號“ - ”表示文件。

三組權限由每組三個字符表示。 從左到右,這些是所有者、組和其他人的權限。 在每組權限中,三個字符從左到右分別表示讀取權限“r”、寫入權限“w”和執行權限“x”的設置。 字母表示已設置權限。 破折號“ - ”表示未設置權限。

對於我們的示例文件,這 10 個字符表示:

  • :這是一個文件,而不是一個目錄。
  • rwx :所有者可以讀取、寫入和執行此文件。
  • rw- :該文件分配到的同一組的其他成員可以讀取和寫入該文件,但他們不能執行它。
  • r- : 其他人只能讀取文件。

對於我們的示例目錄,這 10 個字符表示:

  • d :這是一個目錄。
  • rwx :所有者可以讀取、寫入和執行( cd進入)這個目錄。
  • rwx :同一組的其他成員可以讀取、寫入和cd到此目錄。
  • rx :其他人都可以cd進入這個目錄,但他們只能讀取文件。 他們不能刪除文件、編輯文件或創建新文件。

權限存儲在目錄或文件的元數據中的模式位中。 每個模式位都有一個數值。 如果未設置,它們的值都為零。

  • r :如果設置,讀取位的值為 4。
  • w :如果設置,寫入位的值為 2。
  • x :如果設置,執行位的值為 1。

一組三個權限可以由位值的總和表示。 最大值為 4+2+1=7,這會將集合中的所有三個權限設置為“開啟”。 這意味著所有三組的所有排列都可以在三位八進制(以 8 為基數)值中捕獲。

以我們上面的示例文件為例,所有者俱有讀、寫和執行權限,即 4+2+1=7。 文件所在組的其他成員有讀寫權限,即4+2=6。 其他類別只有讀取權限集,即 4。

因此該文件的權限可以表示為 764。

使用相同的方案,目錄的權限將為 775。您可以使用stat命令查看權限的八進製表示。

如何在 Linux 上使用 chmod 命令
相關如何在 Linux 上使用 chmod 命令

chmod ( ch ange mod e bits) 命令是用來設置目錄和文件權限的工具。 但它並沒有規定在創建目錄或文件時設置什麼權限。 為此使用了一組默認權限。

默認權限和 umask

目錄的默認權限是 777,文件的默認權限是 666。這使每個用戶都可以完全訪問所有目錄,並能夠讀取和寫入任何文件。 未在文件上設置執行位。 您不能創建已經設置了執行位的文件。 這可能會帶來安全風險。

如何在 Linux 上使用 stat 命令
相關如何在 Linux 上使用 stat 命令

但是,如果您創建一個新目錄和一個新文件並查看它們的權限,它們將不會設置為 777 和 666。我們將創建一個文件和一個目錄,然後使用stat通過grep管道提取該行他們權限的八進製表示。

 觸摸umask-article.txt
 mkdir howtogeek
 統計umask-article.txt | grep“訪問:(”
 統計指南 | grep“訪問:(” 

目錄和文件的默認權限,以及它們每個的 stat 輸出

對於目錄,它們設置為 775,對於文件,它們設置為 664。 它們未設置為全局默認權限,因為另一個值修改了它們,稱為 umask 值。

umask 價值

umask 值是全局設置的,root 用戶使用一個值,所有其他用戶使用不同的值。 但它可以為任何人設置一個新值。 要查看當前的 umask 設置是什麼,請使用umask命令。

 掩碼

普通用戶的 umask 值

對於根:

 掩碼

root 用戶的 umask 值

新創建的目錄或文件的權限是 umask 值修改全局默認權限的結果。

就像模式位一樣,umask 值表示相同的三組權限——所有者、組和其他——並將它們表示為三個八進制數字。 您有時會看到它們寫成四位數字,第一個數字為零。 這是“這是一個八進制數”的簡寫方式。 這是最右邊的三位數字。

umask 值不能添加權限。 它只能刪除或屏蔽權限。 這就是為什麼默認權限如此自由的原因。 它們旨在通過應用 umask 值降低到合理的水平。

一組默認權限並不適合所有用戶,也不適合所有場景。 例如,由 root 創建的目錄和文件將需要比普通用戶更多的限制性權限。 即使是普通用戶也不希望其他類別中的每個人都能夠查看和更改他們的文件。

umask 如何屏蔽權限

從默認權限中減去掩碼值即可獲得實際權限。 換句話說,如果在 umask 值中設置了權限,則不會在應用於目錄或文件的權限中設置權限。

umask 值與通常的權限值相反。

  • 0 :不刪除任何權限。
  • 1 :權限中未設置執行位。
  • 2 :權限中未設置寫入位。
  • 4 :權限中未設置讀取位。

目錄的默認權限 777 和文件的 666 被 umask 值 002 修改,以在我們的測試目錄和文件上產生 775 和 664 的最終權限。

 統計umask-article.txt | grep“訪問:(”
 統計指南 | grep“訪問:(” 

目錄和文件的最終權限

這將刪除目錄和文件上其他類別的寫權限。

如果 root 創建一個目錄,則應用其 umask 值 022。 刪除其他類別和組類別的寫入權限。

 sudo mkdir 根目錄
統計指南 | grep“訪問:(” 

root創建目錄時的權限

我們可以看到777的默認權限已經降低到了755。

相關:如何使用 Lynis 審核 Linux 系統的安全性

更改默認 umask 值

登錄 shell 和非登錄 shell 有不同的 umask 值。 登錄 shell 是允許您通過 SSH 在本地或遠程登錄的 shell。 非登錄外殼是您已經登錄時終端窗口內的外殼。

如果更改登錄 shell umask,請務必小心。 不要增加權限並降低您的安全性。 如果有的話,您應該傾向於減少它們並使它們更具限制性。

在 Ubuntu 和 Manjaro 上,可以在以下文件中找到 umask 設置:

  • Login Shell umask :對於登錄 shell 默認 umask 值:/etc/profile
  • Non-Login Shell :對於非登錄 shell 默認 umask 值:/etc/bash.bashrc

在 Fedora 上,可以在以下文件中找到 umask 設置:

  • Login Shell umask :用於登錄 shell 默認 umask 值:/etc/profile
  • Non-Login Shell :對於非登錄 shell 默認 umask 值:/etc/bashrc

如果您沒有迫切需要更改這些,最好不要管它們。

首選方法是為需要不同於默認值的任何單個用戶帳戶設置一個新的 umask 值。 可以將新的 umask 設置放在用戶主目錄中的“.bashrc”文件中。

 gedit .bashrc 

在編輯器中打開 .bashrc 文件

在文件頂部附近添加您的 umask 設置。

將 umask 值添加到 .bashrc 文件

保存文件並關閉編輯器。 打開一個新的終端窗口並使用umask命令檢查 umask 值。

 掩碼

檢查新的 umask 值

新值處於活動狀態。

相關:如何從 Windows、macOS 或 Linux 連接到 SSH 服務器

umask 的短期變化

如果您對不同的 umask 值有短期需求,可以使用umask命令為當前會話更改它。 也許您要創建一個目錄樹和一些文件,並且希望提高它們的安全性。

您可以將 umask 值設置為 077,然後檢查新值是否處於活動狀態。

 掩碼 077
 掩碼

設置臨時 umask 值

在組和其他類別中將掩碼設置為 7 意味著從這些類別中刪除所有權限。 除了您(和 root)之外,沒有人能夠進入新目錄並讀取和編輯您的文件。

 mkdir 安全目錄
ls -ld 安全目錄

在會話中使用臨時 umask 值創建新目錄

唯一的權限是目錄所有者。

 mkdir 安全文件.txt
 ls -ld 安全文件.txt 

在會話中使用臨時 umask 值創建新文件

該文件是安全的,不會被任何其他用戶窺探。 關閉終端窗口會丟棄臨時 umask 設置。

使用 umask 的其他方式

Linux 允許某些進程繼承系統 umask 值,或賦予它們自己的 umask 設置。 例如, useradd使用 umask 設置來創建新用戶的主目錄。

umask 值也可以應用於文件系統。

 少 /etc/fstab 

用 less 查看 /etc/fstab 文件

在這台計算機上,“/boot/efi”文件系統應用了 077 的 umask 設置。

/etc/fstab 文件中的 umask 設置

使用ls查看文件系統掛載點,我們可以驗證 umask 值已刪除除所有者 root 之外的所有人的所有權限。

 ls /boot/efi -ld 

使用 ls 查看“/boot./efi”文件系統掛載點的權限

umask 和權限相互需要

默認權限在被 umask 值轉換應用於目錄或文件。 很少需要永久更改用戶的 umask 值,但是在創建敏感目錄或文檔集合時臨時設置 umask 值以提供更嚴格的權限是一種快速簡便的方法來支持他們安全。

相關:如何使用 UFW 防火牆保護您的 Linux 服務器