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