前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux系统中JAVA创建文件后权限不足的问题,无法设置权限的问题

Linux系统中JAVA创建文件后权限不足的问题,无法设置权限的问题

作者头像
凯哥Java
发布2022-12-16 16:40:57
5.5K0
发布2022-12-16 16:40:57
举报
文章被收录于专栏:凯哥Java

前言:

在工作中,项目使用到文件上传,这个功能是很常见的吧。今天,凯哥修改自己的公众号的时候,遇到了一个问题:那就是上传后的文件访问不到,使用浏览器访问不到了。怎么办呢?经过多次查询,发现竟然是因为tomcat的配置原因!

正文:

最近在Linux系统中通过tomcat部署项目后,由于程序有上传文件功能。而上传后的却无法查看文件(通过createNewFile创建)。后来发现文件的权限为-rw-r-----,而文件的拥有者是root,这样就只有拥有者有root用户组的拥有读取权限。

通过研究发现,Linux通过umask变量来控制创建文件的默认权限问题。我们知道在Linux系统规定,创建文件的最高权限为666,而创建文件夹的最高权限为777,系统通过变量umask来控制创建文件的权限问题。如果当umask的值为022时,则创建的文件权限为644,即权限是通过最高权限减去umask的值来控制的。

先来看看,凯哥上传后文档的权限:

7e9ba8be9e1049fd7877a9a76c53d8a2.png
7e9ba8be9e1049fd7877a9a76c53d8a2.png

我们可以看到,当文件上传后,文件多所属者是root.但是访问不了,凯哥手动设置权限为777的时候,浏览器就可以访问到了。但是通过程序上传的时候,文件上传后所属者也是root,但是权限变成了640.而这个640权限,通过ftp是访问不到的。凯哥图片域名指向了图片服务器的根目录。这样来看,应该是权限不够导致的。于是开始各种尝试。分析后,想,会不会是tomcat自己搞的鬼呢?于是,搜索后,看到一篇文章:

通过研究发现,Linux通过umask变量来控制创建文件的默认权限问题。我们知道在Linux系统规定,创建文件的最高权限为666,而创建文件夹的最高权限为777,系统通过变量umask来控制创建文件的权限问题。如果当umask的值为022时,则创建的文件权限为644,即权限是通过最高权限减去umask的值来控制的。

但Linux系统umask的默认值是0022,也就是说创建的文件应该是644的权限,而上传的文件却是640的权限。后来通过对查询Tomcat发现从tomcat8开始,catalina.sh文件中有下面几行代码

于是根据文章提示,找到自己tomcat的catalina.sh文件,大概在286行左右,如下图:

0fa947b319f1fe8fc1e0c64eb5af6ab8.png
0fa947b319f1fe8fc1e0c64eb5af6ab8.png

一看,确实发现,tomcat的配置:

# Set UMASK unless it has been overridden

if [ -z "$UMASK" ]; then

    #如果是0027的话,文件上传后,权限640,图片域名访问不到。需要修改

    #UMASK="0027"

fi

umask $UMASK

于是,根据文章,果断修改成“0000”:

1104b6ea3b4b274e507671f8fc9622a9.png
1104b6ea3b4b274e507671f8fc9622a9.png

保存文件,重启tomcat,重新上传文件后,进行访问,图片正常访问成功!

来看看,修改后,上传文件的权限:

6c3ac423cf7c64f642d8af5590e06f5b.png
6c3ac423cf7c64f642d8af5590e06f5b.png

权限变化后,就可以正常访问了。明天,就可以在凯哥,自己的公众号后台,编辑文章了。不用在到公众号官方后台编辑了。开心!~

来看看上传后的文件:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档