При настройке частных временных каталогов я столкнулся с неприятными проблемами. Всякий раз, когда служба (в данном случае php-fpm) останавливается, временный каталог стирается. Не совсем так, как я хочу, потому что PHP ожидает найти каталоги /tmp/sessions
и /tmp/uploads
как минимум.
В настоящее время у меня есть сценарий, который "загружает" создание и разрешения этих каталогов, так что если я перезапущу php-fpm
, Я могу воссоздать их в мгновение ока.
Однако этот сценарий "создания каталога" в конце концов не решает моих проблем. PHP жалуется на «Permission Denied» при записи в эти папки. Даже если разрешения установлены широко. Если я создам вручную /tmp/test
, PHP не может писать в этот каталог. Если я создаю каталог из процесса php-fpm (например, через HTTP-запрос), тогда PHP внезапно сможет писать туда. Это имеет некоторый смысл, так как владелец частного временного каталога (php-fpm) может выполнять там операции CRUD.
Так как же можно на самом деле "загрузить" частный временный каталог? Было бы неплохо, если бы каталоги создавались самим systemd или php-fpm при его первом запуске, но я не нашел способа сделать это.
Мой последний вариант - отказаться от частных временных каталогов, но на самом деле я не хочу этого делать.
Есть предположения?
С помощью Аарон проблема с разрешениями была решена путем установки правильного контекста безопасности 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
.