如何允许Tomcat War App写入文件夹

时间:2019-06-30 20:11:03

标签: azure tomcat nginx war ubuntu-18.04

我希望部署为战争ROOT.war的Web应用程序具有对/var/www/html/static/images的写权限,以便它可以将上载和转换后的图像写入该文件夹,以便Nginx可以静态地为其提供服务。当前,它不起作用,同时触发java.nio.file.FileSystemException消息和Filesystem is read-only异常。

但是文件系统不是只读的,并且状态良好。该文件夹已经更改为777。

其他信息: Tomcat安装程序在具有托管磁盘的Ubuntu 18.04 Azure VM上运行。该文件夹位于Ext4格式化的驱动器上

1 个答案:

答案 0 :(得分:2)

让我们开始:chmod 777非常适合测试,但是绝对不适合实际应用,您不应该习惯这种设置。在授予世界写权限之前,应正确设置所有者/组。

编辑:Tomcat邮件列表上也出现了类似的问题,Emmanuel Bourg指出Debian Tomcat被systemd沙盒化。阅读您的/usr/share/doc/tomcat9/README.Debian,其中包含以下段落:

  

Tomcat被systemd沙盒化,并且仅具有对   以下目录:

     
      
  • / var / lib / tomcat9 / conf / Catalina(实际上是/ etc / tomcat9 / Catalina)
  •   
  • / var / lib / tomcat9 / logs(实际上是/ var / log / tomcat9)
  •   
  • / var / lib / tomcat9 / webapps
  •   
  • / var / lib / tomcat9 / work(实际上是/ var / cache / tomcat9)

         

    如果需要对其他目录的写访问权,请进行服务设置   必须被覆盖。这是通过创建overlay.conf文件来完成的   在/etc/systemd/system/tomcat9.service.d/中,包含:

         

    [服务]    ReadWritePaths = /路径/到/目录/

         

    此后必须重新启动服务:

         

    systemctl守护程序重新加载     systemctl重新启动tomcat9

  •   

编辑结束,继续解决无法解决OP问题的段落,但应保留在以下位置:

如果-经过测试的所有内容-Tomcat 应该对该目录具有写访问权,但没有该目录,则错误消息向我提出了一个假设:是否可能是

  • Tomcat是否以root用户身份运行?
  • 通过NFS挂载目录吗?

NFS的默认配置是root在该外部文件系统上没有任何权限(或者是否没有写权限?这是古老的历史内存)

如果这符合您所运行的条件,则应停止以root用户身份运行Tomcat,而应以非特权用户身份运行它。然后,您可以将有关目录的权限设置为可由您的tomcat用户写入,并由nginx读取,然后就可以完成。

以root身份运行Tomcat是灾难的根源:您不希望Internet上可用的进程以root身份运行。

如果这些条件不符合您的配置:请详细说明配置。对于以后可能会发现此问题/答案的其他人,我仍然坚持此说明。