![systemd - 私有临时目录和权限](https://linux22.com/image/674884/systemd%20-%20%E7%A7%81%E6%9C%89%E4%B8%B4%E6%97%B6%E7%9B%AE%E5%BD%95%E5%92%8C%E6%9D%83%E9%99%90.png)
在设置私有临时目录时,我遇到了一些恼人的问题。每当服务(在本例中为 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
。