linux知識點系列之 umask

介紹

umask(user's mask)用來設置文件權限掩碼權限掩碼是由3個八進制的數字所組成,將現有的存取權限減掉權限掩碼後,便可產生創建文件時預設的權限。html

UNIX最初實現時不包含umask命令。1978年左右,在UNIX第七版中引入,用於解決權限掩碼問題。linux

Shell 命令

在 Shell 中,使用 umask命令來設置權限掩碼。shell

umask [-S] [maskExpression]   # 中括號內的參數是可選的。

參數說明:tomcat

  • -S  以符號的形式來表示權限掩碼。

顯示當前掩碼

$ umask           # 以數字形式顯示掩碼(八進制)
022
$ umask -S        # 以符號形式顯示掩碼
u=rwx,g=rx,o=rx

使用數字設置掩碼

$ umask 007    # 設置權限掩碼爲 007
$ umask        # 以數字形式顯示掩碼(八進制)
0007           #   0 - 特殊權限 (setuid | setgid | sticky )
               #   0 - (u)用戶權限掩碼
               #   0 - (g)組權限掩碼
               #   7 - (o)其餘用戶權限掩碼
$ umask -S     # 以符號形式顯示掩碼
u=rwx,g=rwx,o=

八進制掩碼錶

八進制掩碼 建立時的掩碼權限 文件權限 目錄權限
0 能夠設置任何權限(讀、寫、執行) 6 7
1 禁止設置執行權限(讀、寫) 6 6
2 禁止設置寫權限(讀、執行) 4 5
3 禁止設置執行和寫權限(只讀) 4 4
4 禁止設置讀權限(寫、執行) 2 3
5 禁止設置讀和執行權限(寫) 2 2
6 禁止設置讀和寫權限(執行) 0 1
7 禁止設置全部權限(無權限) 0 0

使用符號設置掩碼

當umask使用符號設置掩碼時,它將使用如下語法進行修改:
[用戶標識] 操做符 權限符號bash

用戶標識表ui

用戶縮寫符號 用戶類 描述
u user 全部者
g group 所屬組下的全部用戶
o others 不是全部者且不包含在所屬組下的其餘用戶
a all 以上三個的全部用戶,與ugo同樣

操做符表rest

操做符 做用
+ 指定的權限啓用,未指定的權限不變
- 指定的權限被禁止啓用,未指定的權限不變
= 指定的權限啓用,未指定的權限被禁止

權限符號表code

權限縮寫符號 名稱 描述
r read 讀取文件或列出目錄的內容
w write 寫入文件或目錄
x execute 執行文件或遞歸目錄樹
X special execute 參加連接權限相關知識
s setuid/gid 參見文件權限相關知識
t sticky 參見文件權限相關知識

示例:htm

umask u-w                 # 禁止爲用戶設置寫權限,同時保持其他標誌不變。
umask u-w,g=r,o+r         # u-w 禁止爲用戶設置寫權限,同時保持其他標誌不變;
                          # g=r 容許對組啓用讀權限,同時禁止對組的寫入和執行權限;
                          # o+r 容許對其餘人啓用讀權限,同時保持其餘標誌不變。

經常使用 umask

經常使用的umask及所對應的目錄和文件權限。中間件

umask 文件權限 目錄權限
022 644 755
027 640 750
002 664 775
006 660 771
007 660 770

使用場景

系統 umask

在系統變量文件(/etc/profile)中設置。

# 查看默認 umask
$ grep -C 1 umask /etc/profile
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 002
else
    umask 022
fi

# 設置系統 umask,在 /etc/profile 末尾添加 umask 022便可
$ echo "umask 022" >> /etc/profile

# 實時生效環境變量
$ source /etc/profile

用戶 umask

在用戶變量文件(~/.bash_profile)中設置。

# 設置系統 umask,在 /etc/profile 末尾添加 umask 022便可
$ echo "umask 022" >> ~/.bash_profile

# 實時生效環境變量
$ source ~/.bash_profile

vsftpd中的umask使用

vsftpd中的umask參數:

  • local_umask:本地用戶的 umask
  • anon_umask:虛擬用戶的 umask
# 查看默認 umask
$ grep -C 1 umask /etc/vsftpd/vsftpd.conf
local_umask=027

# 設置 umask 爲 0022
$ sed -i 's/local_umask=027/local_umask=022/g' /etc/vsftpd/vsftpd.conf

# 重啓 vsftpd 生效
$ systemctl restart vsftpd

中間件 umask

以 tomcat 爲例,說明設置中間件 umask,其餘中間件相似。

# 查看默認 umask
$ grep -C 1 umask bin/catalina.sh
if [ -z "$UMASK" ]; then
UMASK="0027"
fi
umask $UMASK

# 設置 umask 爲 0022
$ sed -i 's/UMASK="0027"/UMASK="0022"/g' bin/catalina.sh

參考資料

相關文章
相關標籤/搜索