Linux系统中JAVA创建文件后权限不足应该如何解决

在作业中 , 项目使用文件上传 。这个功能很常见 。当Kai Ge今天更改其官方帐户时 , 他遇到了一个问题 , 即无法访问下载的文件 , 也无法通过浏览器访问该文件 。它是怎么发生的? 经过许多问题之后 , 事实证明这是由于Tomcat的配置所致!
正文:
最近在Linux系统中通过tomcat部署项目后 , 由于程序有上传文件功能 。而上传后的却无法查看文件(通过createNewFile创建) 。后来发现文件的权限为-rw-r----- , 而文件的拥有者是root , 这样就只有拥有者有root用户组的拥有读取权限 。
通过研究发现 , Linux通过umask变量来控制创建文件的默认权限问题 。我们知道在Linux系统规定 , 创建文件的最高权限为666 , 而创建文件夹的最高权限为777 , 系统通过变量umask来控制创建文件的权限问题 。如果当umask的值为022时 , 则创建的文件权限为644 , 即权限是通过最高权限减去umask的值来控制的 。
先来看看 , 上传后文档的权限:

我们可以看到 , 当文件上传后 , 文件多所属者是root.但是访问不了 , 凯哥手动设置权限为777的时候 , 浏览器就可以访问到了 。但是通过程序上传的时候 , 文件上传后所属者也是root , 但是权限变成了640.而这个640权限 , 通过ftp是访问不到的 。凯哥图片域名指向了图片服务器的根目录 。这样来看 , 应该是权限不够导致的 。于是开始各种尝试 。分析后 , 想 , 会不会是tomcat自己搞的鬼呢?于是 , 搜索后 , 看到一篇文章 , 但Linux系统umask的默认值是0022 , 也就是说创建的文件应该是644的权限 , 而上传的文件却是640的权限 。后来通过对查询Tomcat发现从tomcat8开始 , catalina.sh文件中有下面几行代码
于是根据文章提示 , 找到自己tomcat的catalina.sh文件 , 大概在286行左右 , 如下图:
一看 , 确实发现 , tomcat的配置:
# Set UMASK unless it has been overridden
if [ -z “$UMASK” ]; then
#如果是0027的话 , 文件上传后 , 权限640 , 图片域名访问不到 。需要修改
#UMASK=“0027”
fi
umask $UMASK
于是 , 根据文章 , 果断修改成“0000”:
保存文件 , 重启tomcat , 重新上传文件后 , 进行访问 , 图片正常访问成功!
来看看 , 修改后 , 上传文件的权限:
【Linux系统中JAVA创建文件后权限不足应该如何解决】 权限变化后 , 就可以正常访问了 。

    推荐阅读