umask

发布时间 2023-08-29 18:29:31作者: MMartin

1、umask是什么

当我们登录系统之后创建一个文件是会有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask用于设置用户创建文件或者目录的默认权限,umask设置的是权限的“补码”,而我们常用chmod设置的是文件权限码。一般在/etc/profile, HOME/.bash_profile 或者 HOME/.profile中设置umask值。

2、umask的作用

默认情况下的umask值是022(可以用umask命令查看),此时你建立的文件默认权限是644(6-0,6-2,6-2),建立的目录的默认权限是755(7-0,7-2,7-2)

[root@udp1 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@udp1 ~]# umask
0022
[root@udp1 ~]# touch a.txt
[root@udp1 ~]# mkdir b
[root@udp1 ~]# ll
total 8
-rw------- 1 root root 2874 6月   2  2016 anaconda-ks.cfg
-rw-r--r-- 1 root root    0 6月  28 15:54 a.txt
drwxr-xr-x 2 root root 4096 6月  28 15:54 b
[root@udp1 ~]#

也可使用umask -S显示umask的符号值

[root@udp1 ~]# umask -S
u=rwx,g=rx,o=rx

3、linux默认的umask

linux系统新建文件默认没有执行权限,文件的最大权限为rw-rw-rw-(666),新建目录的最大权限为rwx-rwx-rwx(777),因为目录必须要有x才能进入。

umask的作用是设置用户环境下,创建文件或者目录的权限控制。一般umask的值是在 /etc/profile 文件中定义的,用户登入必须会读取这个文件,所以一般被设置在这个目录中。如一台centos6的系统中默认配置:

if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 002
else
    umask 022
fi

# 意思是账号uid大于199且uid=gid且用户名=用户组名的时候,umask值是002,而其他用户下,umask值是022

4、umask快速计算

  • 对于目录,直接使用777-umask即可,就得到了最终结果
  • 对于文件,先使用666-umask
    • 如果对应位上为偶数:最终权限就是这个偶数值
    • 如果上面的对应为上有奇数,就对应位+1

为何得到奇数要+1呢?

文件的最大权限是666,都是偶数。你得到奇数,说明你的umask有奇数啊,读为4,写为2,都是偶数,说明你有执行权限的。

就以umask=023为例,在计算其他用户权限的时候6-3=3 ,6是读写,3是写和执行,其实应该是读写权限减去读权限能得到写权限的,相当于我们多减去了一个执行权限。所以结果加1。

5、umask的修改

umask的修改分2种,临时修改和永久修改

临时修改:

[root@udp1 opt]# umask 023
[root@udp1 opt]# umask
0023
[root@udp1 opt]# 

永久修改:

可以编辑以下文件 添加umask=022。

交互式登陆的配置生效:

/etc/profile < /etc/profile.d/*.sh < ~/.bash_profile < ~/.bashrc < /etc/bashrc 【/etc/bashrc的配置最有效,可以覆盖前面的配置】

非交互登陆的配置生效:

~/.bashrc < /etc/bashrc < /etc/profile.d/*.sh