赞
踩
背景描述:
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 中挂在盘目录下,查看刚刚上传的图片:确实已经上传成功。
[root@tmp4 backgroundImg]# ll
总用量 408
-rw-r----- 1 root root 414642 7月 11 17:27 login_background.jpg
可以看到 login_background.jpg
图片,对于当前 拥有者 、群组 、其它组 分别是:读写、读、无。显而易见,website
是nginx
容器以其他组的一个用户来运行的,所有没有任何权限。
找到表面原因,我们可以直接修改图片的权限。
[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
此时,通过网站访问 该图片便没有问题。
因为tomcat
版本的差别。我当前使用的是tomcat8.5.+
,当我将为tomcat8.0.24
版本便没有此问题。
下面,做的配置,是以tomcat8.5.+
版本 为例的。
linux文件访问默认权限与umask有关,查看系统默认配置(/etc/profile
)是否正常,如果是002或022就正常没有问题。
[umask 002 对应文件权限664,文件夹权限775;
umask 022对应文件权限644,文件夹权限755]
打开bin/catalina.sh
文件,检查大概在263行左右。
将0027改改为0022,重启tomcat,上传访问的问题解决。
# Set UMASK unless it has been overridden
if [ -z "$UMASK" ]; then
UMASK="0027"
fi
# Set UMASK unless it has been overridden
if [ -z "$UMASK" ]; then
UMASK="0022"
fi
sh shutdown.sh(关闭)
sh startup.sh 或者 ./startup.sh(启动)
Javaweb上传文件到Linux 没有读写权限,最后总结有以下3种解决方案。
1.将程序在容器中以root用户运行。这时候运行权限最高。(如,我可以将website
,由其他用户组的nginx角色,改为所有者root权限,便没有此问题)。
2.降低我的tomcat版本。(这个也是可行的)
3.修改tomcat中的bin/catalina.sh
配置,并重启tomcat(这个我觉得是最根本的,推荐使用)
彩蛋:查看程序启动用户,ps -ef | grep tomcat
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。