當進程(process)創建文件時,文件有默認的權限,如rw-r--r--,這個初始的默認值是由 文件權限掩碼 (file mode creation mask/file permission mask/umask)決定的。
umask 可以用二進制、八進制、或符號記法顯示。如八進制的 0137 ,符號記法 u=rw-,g=r--,o=--- 。符號記法和八進制記法相反,八進制記法禁止權限,符號記法代表允許權限。
umask的結構:
-
0 = 沒有意義,總是為零,umask 對特殊權限沒有作用。
-
1 = owner user 執行權限掩碼。
-
3 = owner group 寫、執行權限掩碼。
-
7 = others 讀、寫、執行權限掩碼。
umask的用法:
-
當一個位在umask中指定,文件中不會指定這個位指定的權限。
-
當位不在umask中指定,文件的位所在的權限可以被指定,具體取決於其他因素。
下圖解釋了umask0137對文件的作用:
重要:
為了系統安全的原因,普通文件默認沒有執行權限。因此,即使 umask 設置為0000,沒有禁止任何權限,當文件被創建時,文件還是不會有執行權限。當然,創建文件夾時,文件夾有執行權限。
管理umask:
在一些普遍流行的 shell 下,如bash 、 ksh 、zsh 和 tcsh,umask內置於shell。shell 下的進程繼承這個內置 umask 。
查看當前 umask:
查看當前八進制 umask :
# umask 0022
查看當前符號記法 umask :
# umask -S
u=rwx,g=rx,o=rx
設置 umask(通過 umask 命令):
通過八進制記法設置 umask :
# umask 0027# umask 0027
通過符號記法設置 umask :
# umask -S u=rwx,g=rx,o=rx u=rwx,g=rx,o=rx # umask -S u=rwx,g=rx,o=rx # umask 0022
注意:
1.使用 umask 命令設置 umask 值,設置只對當前 shell 有效:
[root@localhost ~]# umask 0027 [root@localhost ~]# umask 0027 [root@localhost ~]# su - Last login: Tue May 12 12:32:38 CST 2020 on pts/0 [root@localhost ~]# umask 0022 [root@localhost ~]#
2.當 umask不完整時,填充0左補足:
[root@localhost ~]# umask 7 [root@localhost ~]# umask 0007
設置 umask(通過文件):
為所有用戶設置默認 umask,通過腳本中的 umask 命令, 或設置 UMASK 變量實現:
[root@localhost ~]# grep -i umask -B 1 /etc/bashrc # By default, we want umask to get set. This sets it for non-login shell. -- if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022 [root@localhost ~]# vim /etc/bashrc [root@localhost ~]# grep -i umask -B 1 /etc/bashrc # By default, we want umask to get set. This sets it for non-login shell. -- if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 027 [root@localhost ~]#