Рейтинг:0

Что помешает php-fpm (8.0.16) записать в файловую систему, смонтированную NFS?

флаг rs

У меня есть экземпляр php-fpm (8.0.16), который не может записывать файлы в общий ресурс NFS. Я использую простой php-скрипт для тестирования:

<?php

ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);

$fp = fopen('test.txt', 'а');

fwrite($fp, 'тест'); 

При запуске через php-fpm в каталоге, который является общим ресурсом NFS, возникает следующая ошибка:

Предупреждение: fopen(test.txt): не удалось открыть поток: файловая система только для чтения в /path/to/nfs/share/test-write.php

Однако следующий код:

<?php

ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);

$fp = fopen('/tmp/test.txt', 'a');

fwrite($fp, 'тест');

работает как положено.

Скрипт работает при запуске из командной строки от имени того же пользователя, который используется для запуска php-fpm как в каталоге на общем ресурсе NFS, так и в /tmp. Кроме того, скрипт работает должным образом на более ранних версиях php через php-fpm.

djdomi avatar
флаг za
кажется, что www-data не имеет права записи на устройства. или в зависимости от того, какого пользователя вы решите использовать и смонтировать. кроме того apparmor также может играть в этой партии
флаг de
Судя по сообщению об ошибке, том NFS экспортирован в режиме только для чтения.
cplater avatar
флаг rs
@kofemann Я исключил это, написав том NFS через CLI. Я могу запустить тот же файл php, что и пользователь: группа apache: apache из php (cli), и он работает.
Рейтинг:0
флаг rs

В файле systemd php-fpm.service была настройка:

# Монтирует каталоги /usr, /boot и /etc только для чтения для процессов, запускаемых этим модулем.
ProtectSystem=полный

Это то, что не позволяло php-fpm записывать в общий ресурс NFS, поскольку он был смонтирован в подкаталоге /usr.

Как уже упоминалось здесь вы можете переопределить это, используя systemctl редактировать php-fpm.service и добавление путей, которым требуется доступ для записи:

[Оказание услуг]
ReadWritePaths=\путь\который\требуется\запись\доступ

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.