当前位置:   article > 正文

Javaweb上传文件到Linux 没有读写权限_java linux上传文件后没有查看权限

java linux上传文件后没有查看权限

一、 问题描述

背景描述:

0.saas-business-运营后台,website-网站页面。

1.javaweb程序(saas-business)部署在linux系统 tomcat服务器下,使用该程序里面上传图片功能,上传图片至linux服务器挂载盘(共享盘)中/nfs/uploads/目录下。tomcat是以root用户来运行的。

2.website,部署在另一台linux系统ngxin容器中,该台linux系统也挂载了(共享盘)/nfs/uploads/目录。ngixn是以其他组的角色来运行的。

操作:
我通过saas-business里面的上传图片功能 ,上传图片到/nfs/uploads/下,查看服务器,确实已经上传成功。
然后在浏览器中访问website程序,却访问不到刚刚上传的图片。


问题:图片成功上传到linux服务器共享盘中,但却在网页中访问不到!

二、 表面原因

在linux 中挂在盘目录下,查看刚刚上传的图片:确实已经上传成功。

[root@tmp4 backgroundImg]# ll
总用量 408
-rw-r----- 1 root root 414642 7月  11 17:27 login_background.jpg
  • 1
  • 2
  • 3

可以看到 login_background.jpg图片,对于当前 拥有者 、群组 、其它组 分别是:读写、读、无。显而易见,websitenginx容器以其他组的一个用户来运行的,所有没有任何权限。
找到表面原因,我们可以直接修改图片的权限。

[root@tmp4 backgroundImg]# chmod 644 login_background.jpg  
[root@tmp4 backgroundImg]# ll
总用量 408
-rw-r--r-- 1 root root 414642 7月  11 17:27 login_background.jpg
  • 1
  • 2
  • 3
  • 4

此时,通过网站访问 该图片便没有问题。

三、 根本原因

因为tomcat版本的差别。我当前使用的是tomcat8.5.+,当我将为tomcat8.0.24版本便没有此问题。
下面,做的配置,是以tomcat8.5.+版本 为例的。

a)、检查linux

linux文件访问默认权限与umask有关,查看系统默认配置(/etc/profile)是否正常,如果是002或022就正常没有问题。

[umask 002 对应文件权限664,文件夹权限775;
umask 022对应文件权限644,文件夹权限755]

b)、检查tomcat

打开bin/catalina.sh文件,检查大概在263行左右。
将0027改改为0022,重启tomcat,上传访问的问题解决。

清单一、原代码
# Set UMASK unless it has been overridden
if [ -z "$UMASK" ]; then
    UMASK="0027"
fi
  • 1
  • 2
  • 3
  • 4
清单二、修改为
# Set UMASK unless it has been overridden
if [ -z "$UMASK" ]; then
    UMASK="0022"
fi
  • 1
  • 2
  • 3
  • 4
c)、重启tomcat
sh shutdown.sh(关闭)
sh startup.sh 或者 ./startup.sh(启动)
  • 1
  • 2

四、总结:

Javaweb上传文件到Linux 没有读写权限,最后总结有以下3种解决方案。
1.将程序在容器中以root用户运行。这时候运行权限最高。(如,我可以将website,由其他用户组的nginx角色,改为所有者root权限,便没有此问题)。
2.降低我的tomcat版本。(这个也是可行的)
3.修改tomcat中的bin/catalina.sh配置,并重启tomcat(这个我觉得是最根本的,推荐使用)

彩蛋:查看程序启动用户,ps -ef | grep tomcat

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/715574
推荐阅读
相关标签
  

闽ICP备14008679号