[问题记录]tomcat创建的文件权限和linux umask、acl

在CentOS7环境下,当Tomcat创建的文件无法被其他应用如FTP、Nginx读取时,可以通过调整umask或使用ACL来解决。文章介绍了三种方法:1) 通过代码设定文件权限,2) 修改Tomcat启动脚本umask设置,3) 使用ACL设置默认权限。注意到umask与存在默认ACL时的关系,以及ACL在文件系统权限之外的广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:CentOS7
需求:tomcat里web应用创建的文件,放于指定目录下、提供给其他应用读取(比如ftp、nginx)。
问题:丢到tomcat里的web应用,创建出来的文件或文件夹others没有读权限,比如:

drwxr-x--- 2 tomcat tomcat 4096 Jun 16 17:57 temp
-rw-r----- 1 tomcat tomcat    0 Jun 16 17:57 tempfile

解决方法一
直接在web应用创建文件/文件夹时、通过代码设定权限,比如Java里这个stackoverflow答案提到的Files#setPosixFilePermissions方法。
但是缺点也很明显:一个一个改太麻烦了。

解决方法二
见识少、google了很久才知道根本原因是tomcat启动脚本catalina.sh里的这一段:

#   UMASK           (Optional) Override Tomcat's default UMASK of 0027
# Set UMASK unless it has been overridden
if [ -z "$UMASK" ]; then
    UMASK="0027"
fi
umask $UMASK

原来是当初看tlcl时一看很简单就忘记的umask……就说怎么tomcat用户直接命令行touchmkdir的文件权限就很宽松。
不想动tomcat的脚本,所以就在tomcat下的.bashrc里加了这个UMASK变量:

export UMASK=022

参考自这个so问题 Tomcat 8 change catalina.out permissions to be readable by all

解决方法三
搜索linux权限相关问题很容易看到有人提到ACL(Access Control List),参考一些使用指南(比如ArchLinux Wiki)、简单使用比如:

setfacl -Rdm "u::rwx,g::rwx,o::rx" upload/

-m:修改, -d:继承parent目录权限,-R:同样应用到upload的当前所有子文件(夹)

然后在upload文件夹下尝试创建文件,可以看到:

drwxrwxr-x+ 1 root   root       8 Jul  5 16:55 temp
drwxrwxr-x+ 1 docker docker     8 Jul  5 16:55 temp2
-rw-rw-r--. 1 root   root       0 Jul  5 16:55 tempfile
-rw-rw-r--. 1 docker docker     0 Jul  5 16:55 tempfile2
  • 子文件继承了upload的权限设定
    参考这个PDF PosixAccessControlInLinux

    The umask has no effect if a default ACL exists / 设置了默认ACL(-d)、umask就不起效了。

  • 新建的子目录也在ACL管理下(有+标记)

  • 文件默认没有execute权限

补充问题:

  1. umask是进程相关的参数,linux系统有umask设置(CentOS在/etc/profile里有一段)、但并没有UMASK这个变量(这个只是tomcat用到)。

  2. ACL只是权限相关,并不能改变文件(夹)的用户和group;后者可以看下chown的s bit

  3. 看了前面的PDF和wikipedia,感觉ACL也是挺复杂/宽泛的概念:比如named user是群组概念、不仅file system用还有网络NACL、不限于linux、windows也有……也是挺搞不清的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值