前言

linux系统是绝大部分后端服务器运行的系统,但是笔者一直没有关注过,linux下用户创建目录的权限。一般都是root操作,然后没有权限就授予权限chmod +或者chown -R。今天遇到一个奇怪的问题咨询,说tomcat运行写的文件,其他用户不能读取。

linux权限介绍

linux的权限分为

  1. r(4) 读
  2. w(2) 写
  3. x(1) 执行

linux权限表示有2种方式,一种字母一种数字。所以授权可以是chmod +w 或者chmod 755
linux的常用文件一般为目录,文件,软硬链接,使用ls -l命令
在这里插入图片描述
第一位是

  1. d代表目录
  2. -代表文件
  3. l代表链接

后面是3位一组,表示当前用户、当前用户组、其他用户权限,使用rwx表示,-表示没有此权限

创建文件与目录初始权限

创建文件的初始权限与linux系统的umask有关,而且不同的用户umask可以不一样
umask使用数字表示,表示掩码
在这里插入图片描述
第一位的0 代表特殊权限位,注意看后3位002;这里的002并不是权限位而是需要异或运算的掩码。
文件的默认运算权限是没有执行权限的666,666的2进制异或002的2进制为664
110 110 110
000 000 010
110 110 100

这里需要注意:如果掩码配置了执行权限,此时也要把掩码的执行权限去除
比如掩码0027,理论上文件默认权限是640,027的2进制000 010 111,就要将末尾的7减去执行权限1,即运算的2进制000 010 110
110 110 110
000 010 110
110 100 000 == (640)

文件夹的默认运算权限是777,777的2进制异或002的2进制为775
111 111 111
000 000 010
111 111 101

软链接是默认就有所有权限777,无需运算

应用写文件权限

某些应用在运行过程中也会写文件,比如日志文件,pid文件。这个时候,应用程序可能会修改用户下的umask,比如tomcat8.5.55,默认会设置为0027
在这里插入图片描述
截取umask设置片段

# Set UMASK unless it has been overridden
if [ -z "$UMASK" ]; then
    UMASK="0027"
fi
umask $UMASK

这就很坑了,产生的文件权限是640,其他用户就不能读取tomcat产生的文件,比如日志收集
解决方法在bin目录创建setenv.sh,并授权755.
设置UMASK=0022即可,当然也可以按需设置成别的,比如0002.

总结

linux的创建文件与目录的默认权限为umask决定,每个用户的umask可以不一样。应用在运行过程中也可能修改用户的umask的值。

Logo

更多推荐