当设置私人临时目录时,我遇到了一些恼人的问题。 每当服务(在这种情况下,php-fpm)停止时,临时目录被清除。 不像我想要的那样,因为PHP希望至less能够find/tmp/sessions和/tmp/uploads 。
目前,我有一个脚本“引导”这些目录的创build和权限,所以如果我重新启动php-fpm ,我可以在jiff中重新创build它们。
然而,这个“目录创build”脚本毕竟不能解决我的问题。 写入这些文件夹时,PHP抱怨“权限被拒绝”。 即使权限设置为开放。 如果我手动创build/tmp/test ,PHP不能写入该目录。 如果我在php-fpm过程中(例如,通过HTTP请求)创build目录,那么PHP会突然写到那里。 这是有道理的,私人临时目录(php-fpm)的所有者是可以在那里执行CRUD操作的人。
那么怎么能真正“引导”一个私人的临时目录呢? 如果目录是由systemd本身创build的,或者是php-fpm在第一次启动时创build的,但是我还没有find这样做的方法。
我最后的select是把私人临时目录,但这是我不想做的事情。
有什么想法吗?
在Aaron的帮助下,通过设置正确的SELinux安全上下文解决了权限问题。 私有临时空间的“引导”是在systemdconfiguration( /etc/systemd/system/php-fpm.service )中使用自定义的post-start脚本解决的:
.include /lib/systemd/system/php-fpm.service [Service] ExecStartPost=/bin/php -f /opt/www/create_tmp_dirs.php
脚本本身负责在/tmp (写入私有tmp空间)下创build目录,设置正确的权限和所有权,当然还有正确的安全上下文。
当我手动创build目录时,安全上下文被设置为user_tmp_t而正确的上下文应该是httpd_tmp_t 。