linux中umask值计算与配置
计算原理
- 将目录或文件的默认最高权限(目录777、文件666)和umask掩码值都转换为二进制。
- 对umask取反。
- 将两个二进制值做与运算。
- 将与运算后的二进制值转换为十进制,即为用户的新建目录或文件的默认权限。
注:此处最高权777、666仅在运算过程中定义,非实际文件权限
目录场景:
- 掩码值:0022
- 目录默认最高权限:777
计算默认权限:
- 转为二进制:
777 = 111 111 111
022 = 000 010 010 - umask取反
NOT运算:111 101 101 - 与运算
111 111 111 总权限777
111 101 101 umask取反
====================
111 101 101 新建目录默认权限 - 转为十进制
111 101 101=755
即该用户新建目录的默认权限为755,即为rwxr-xr-x。
文件场景:
- 掩码值:0022
- 目录默认最高权限:666
计算默认权限:
- 转为二进制:
666 = 110 110 110
022 = 000 010 010 - umask取反
NOT运算:111 101 101 - 与运算
110 110 110 总权限666
111 101 101 umask取反
====================
110 100 100 新建目录默认权限 - 转为十进制
110 100 100 = 644
即该用户新建目录的默认权限为644,即为rw-r--r--。
公式
按照umask计算的原理很麻烦,所以弄一个公式来总结计算如下:
- 目录(文件)的初始权限 = 目录(文件)的最大默认权限 - umask权限
而这种公式方式需要注意分类:
目录公式:
用户目录默认权限 = 777 - umask值
文件公式:
1)偶数umask:用户文件默认权限 = 666 - umask偶数值
2)奇数umask:用户文件默认权限 = 666 - umask奇数值 + 1
示例
对照原理示例umask值=022,计算如下:
用户目录默认权限:777-022=755,即为rwxr-xr-x。
用户文件默认权限:666-022=644,即为rw-r--r--。
对照引言中的实验umask值=027,计算如下:
用户目录默认权限:777-027=750,即为drwxr-x---。
用户文件默认权限:666-027+1=640,即为-rw-r-----。
umask值修改
暂时修改
暂时修改的方式,可以通过umask命令来更改,比如计算出权限对应的umask值要改为027,则直接用该用户登录Linux系统后,使用命令umask 027即可。但是,一旦用户退出登录后,umask将恢复默认值,刚才设置的将会失效。所以,这种umask命令方式,只是适合当前会话。
永久修改
除了使用umask命令进行当前会话的用户默认权限设置外,我们还可以对该用户永久性修改umask值。针对某个用户修改,需要用该用户登录Linux,然后修改/etc/profile文件中的umask值。
修改前:
总结
如果我们登陆Linux系统后,新建目录或者文件很多,且权限都是某种特定的,则可以通过umask命令来暂时设置当前会话的默认权限。如果后期需要永久性的可以修改/etc/profile中的umask值。
当然,对于应用程序一些吐文件时需要先新建的目录或者文件设置权限时,我们为了安全方式,可能不能永久性修改umask值,但,我们可以在启动脚本里面加上umask 022这种命令,来使得当前应用启动时受到当前启动脚本中的umask来控制应用程序输出的文件或目录的默认权限。
转载自(部分内容修改):
链接:https://www.jianshu.com/p/ec80eb5fa548