systemd - 私有临时目录和权限

systemd - 私有临时目录和权限

在设置私有临时目录时,我遇到了一些恼人的问题。每当服务(在本例中为 php-fpm)停止时,临时目录就会被清除。这不符合我的要求,因为 PHP 至少需要找到/tmp/sessions目录/tmp/uploads

目前,我有一个脚本可以“引导”这些目录的创建和权限,这样,如果我重新启动php-fpm,我就可以立即重新创建它们。

但是,这个“目录创建”脚本终究还是没能解决我的问题。在写入这些文件夹时,PHP 会抱怨“权限被拒绝”。即使权限设置为完全开放。如果我手动创建/tmp/test,PHP 就无法写入该目录。如果我从 php-fpm 进程内创建目录(例如通过 HTTP 请求),那么 PHP 就能够在那里写入。这有点道理,因为私有临时目录(php-fpm)的所有者是可以在那里执行 CRUD 操作的人。

那么如何才能真正“引导”私有临时目录?如果目录是由 systemd 本身或 php-fpm 在首次启动时创建的,那就太好了,但我还没有找到这样做的方法。

我的最后一个选择是放弃私人临时目录,但这确实是我不想做的事情。

有什么想法吗?

答案1

通过帮助亚伦通过设置正确的 SELinux 安全上下文解决了权限问题。使用配置中的自定义启动后脚本解决了私有临时空间的“引导”问题systemd( /etc/systemd/system/php-fpm.service):

.include /lib/systemd/system/php-fpm.service

[Service]
ExecStartPost=/bin/php -f /opt/www/create_tmp_dirs.php

脚本本身负责创建目录/tmp(写入私有 tmp 空间)、设置正确的权限和所有权,当然还有正确的安全上下文。

当我手动创建目录时,安全上下文被设置为,user_tmp_t而正确的上下文应该是httpd_tmp_t

相关内容