umask(user's mask)用來設置文件權限掩碼。權限掩碼是由3個八進制的數字所組成,將現有的存取權限減掉權限掩碼後,便可產生創建文件時預設的權限。html
UNIX最初實現時不包含umask命令。1978年左右,在UNIX第七版中引入,用於解決權限掩碼問題。linux
在 Shell 中,使用 umask命令來設置權限掩碼。shell
umask [-S] [maskExpression] # 中括號內的參數是可選的。
參數說明:tomcat
$ 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 | 文件權限 | 目錄權限 |
---|---|---|
022 | 644 | 755 |
027 | 640 | 750 |
002 | 664 | 775 |
006 | 660 | 771 |
007 | 660 | 770 |
在系統變量文件(/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
在用戶變量文件(~/.bash_profile)中設置。
# 設置系統 umask,在 /etc/profile 末尾添加 umask 022便可 $ echo "umask 022" >> ~/.bash_profile # 實時生效環境變量 $ source ~/.bash_profile
vsftpd中的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
以 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