Webapp 无法使用 Ubuntu 20.04 和 Tomcat 9 写入 /tmp 目录
Webapp can't write to /tmp directory with Ubuntu 20.04 and Tomcat 9
我正在将 Tomcat 网络应用程序从 Ubuntu 和 Tomcat 7 的旧版本迁移到 Ubuntu 20.04 和 Tomcat 9。应用程序将各种文件写入 /tmp 目录,但在切换到 Ubuntu 20.04 和 Tomcat 9 后写入 /tmp 目录静默失败。我在 Tomcat 日志中没有看到任何表明文件未被写入的原因,我的应用程序也没有抛出异常(如果应用程序无法写入,我希望得到 IO 异常或其他东西目录)。
我做了一些试验,我能够将文件写入 /var/lib/tomcat/logs。是否有我需要在 Tomcat 或 Ubuntu 中更改的配置参数以允许 Tomcat 写入 /tmp?
在最近的 Debianoids(从 Debian Buster 开始)上,tomcat9.service
在它自己的 mnt 命名空间 中运行(参见 Linux namespaces)。与 "real" 文件系统不同的唯一挂载点是 /tmp
,它位于:
/tmp/systemd-private-*-tomcat9.service-*/tmp
普通用户无法访问它(它的父级是 chmod 700
并且归 root
所有)。
如果您希望 Tomcat 与系统的其余部分共享 /tmp
目录,您可以通过以下方式覆盖 tomcat9.service
文件:
systemctl edit tomcat9.service
并添加:
[Service]
PrivateTmp=no
编辑: 正如您在评论中所说,tomcat9.service
已设置 ProtectSystem=strict
,因此该服务将所有文件系统视为只读。因此你要么需要:
ProtectSystem=off
或
ReadWritePaths=/tmp
我可以通过编辑 /usr/lib/systemd/system/apache2.service
下的文件来解决这个问题
并从
编辑
PrivateTmp=True
至
PrivateTmp=no
我正在将 Tomcat 网络应用程序从 Ubuntu 和 Tomcat 7 的旧版本迁移到 Ubuntu 20.04 和 Tomcat 9。应用程序将各种文件写入 /tmp 目录,但在切换到 Ubuntu 20.04 和 Tomcat 9 后写入 /tmp 目录静默失败。我在 Tomcat 日志中没有看到任何表明文件未被写入的原因,我的应用程序也没有抛出异常(如果应用程序无法写入,我希望得到 IO 异常或其他东西目录)。
我做了一些试验,我能够将文件写入 /var/lib/tomcat/logs。是否有我需要在 Tomcat 或 Ubuntu 中更改的配置参数以允许 Tomcat 写入 /tmp?
在最近的 Debianoids(从 Debian Buster 开始)上,tomcat9.service
在它自己的 mnt 命名空间 中运行(参见 Linux namespaces)。与 "real" 文件系统不同的唯一挂载点是 /tmp
,它位于:
/tmp/systemd-private-*-tomcat9.service-*/tmp
普通用户无法访问它(它的父级是 chmod 700
并且归 root
所有)。
如果您希望 Tomcat 与系统的其余部分共享 /tmp
目录,您可以通过以下方式覆盖 tomcat9.service
文件:
systemctl edit tomcat9.service
并添加:
[Service]
PrivateTmp=no
编辑: 正如您在评论中所说,tomcat9.service
已设置 ProtectSystem=strict
,因此该服务将所有文件系统视为只读。因此你要么需要:
ProtectSystem=off
或
ReadWritePaths=/tmp
我可以通过编辑 /usr/lib/systemd/system/apache2.service
并从
编辑PrivateTmp=True
至
PrivateTmp=no