在 ubuntu 20.04 上使用 apache2 运行的应用程序未检测到 tmp 文件夹中的现有文件

在 ubuntu 20.04 上使用 apache2 运行的应用程序未检测到 tmp 文件夹中的现有文件

我在运行 ubuntu 20.04 的 apache2 下的服务器上部署了以下 python 代码:

import os
print(os.path.exists("/tmp/test.csv"))

False即使 test.csv 文件存在,上述代码也会返回。但是,如果我在 apache 下运行相同的代码(不像普通的 python 脚本那样),它会返回True

以下是 tmp 文件夹和文件的权限:

drwxrwxrwt  45 root www-data            12288 Mar 19 18:09 tmp

-rw-r--r--  1 www-data www-data         0 Mar 19 17:25 test.csv

这在 ubuntu 18.04 上运行良好,但自从我们升级到 20.04 后就出现了问题。

编辑:

我曾尝试添加/etc/apparmor.d/usr.sbin.mysqld 具有读写权限的 tmp 目录,然后重新启动 apparmor /etc/init.d/apparmor restart
,但没有任何反应。

答案1

最终找到了解决办法:

Ubuntu 20.04 附带最新版本的 apache,它有一个PrivateTmp变量,可以tmp在不同的命名空间中创建一个单独的目录。因此,当我在全局tmp目录(可供所有进程使用)中创建文件时,apache 正在其私有 tmp 目录中寻找该文件,因此无法找到它。检查这里了解更多信息。

解决方案是将其设置PrivateTmp为 false vi /lib/systemd/system/apache2.service,然后重新加载恶魔进程systemctl daemon-reload

相关内容