Сценарий монтирования Linux работает в интерпретаторе PHP, но не в веб-Apache

Мой сайт посвящен копированию файлов. Вместо того, чтобы копировать файлы, чтобы избежать слишком долгого времени и задержки сервера, я решил использовать overlayfs. Кодmountпапку в место, указанное в терминале с помощью интерпретатора PHP. Но когда я запускаю php-скрипт из Apache, скрипт неmountналожение. И хуже всего то, что нет вывода ошибок, поэтому я могу отладить, что не так. Я проверил журнал ошибок php, никаких данных о том, что произошло.

Место назначения, в которое я монтирую overlayfs, - другому пользователю. Для этого мне нужен root, чтобы выполнитьmountкоманда. Чтобы иметь возможность запускать код без использования root или sudo, я изучил этот вопрос. Я создал код c, скомпилировал его и установил соответствующие разрешения (root.root, rwsr,sr...). Я запустил код в php-файле:

<?php
// filename over.php

print shell_exec("whoami")."\n";

print shell_exec('/var/www/vhosts/user/deployment/exec "sudo mount -t overlay overlay -o lowerdir=/var/www/vhosts/user/deployment/template5_dev,upperdir=/var/www/vhosts/user.deve/httpdocs,workdir=/var/www/vhosts/user/deployment/overlay-work /var/www/vhosts/user.deve/httpdocs"');

Код выводит фактическое имя пользователя (чтобы убедиться, что у меня есть вывод, чтобы увидеть, выполняется ли код), а затем объединяет папки. Файл/var/www/vhosts/user/deployment/exec это программа c, то я передаю код для выполнения в качестве аргумента.

В терминале запускаю: php -f "/var/www/vhosts/user/httpdocs/over.php". Я проверяю объединенную папку и вижу, что она работает. И на выходеuser.

Затем отключаю накладку sudo umount /var/www/vhosts/user.deve/httpdocs.

Я получаю доступ к скрипту php через браузер, я получил вывод userно папка не сливается. Я нажимаю ctrl-f5 несколько раз, но ничего, без ошибок, без ошибок в журнале ничего.

Я изменил команду на shell_exec('/var/www/vhosts/user/deployment/exec "sudo mkdir /var/www/vhosts/user.deve/httpdocs/nouvo"');, то sudo создал папку из браузера.

Я заметил, что только mount команда не работает должным образом.

В чем может быть причина sudo mount команда не запускается apache, и даже если произошла ошибка, она не распечатывает ошибку?

Я просто смотрю на /var/log/kern.log. Я вижуmountкоманда была выполнена из веб-браузера. Но журнал отличается от того, который выполняется в терминале.

Из веб-браузера:

 kernel: [  149.465459] overlayfs: filesystem on '/var/www/vhosts/user.deve/httpdocs' not supported as upperdir
 kernel: [  151.629192] overlayfs: filesystem on '/var/www/vhosts/user.deve/httpdocs' not supported as upperdir
 kernel: [  153.453612] overlayfs: filesystem on '/var/www/vhosts/user.deve/httpdocs' not supported as upperdir

Из терминала после выполнения из браузера:

kernel: [  312.858797] overlayfs: upperdir is in-use as upperdir/workdir of another mount, accessing files from both mounts will result in undefined behavior.
 kernel: [  312.858804] overlayfs: workdir is in-use as upperdir/workdir of another mount, accessing files from both mounts will result in undefined behavior.

Я просто не получаю журнал из браузера, поскольку сценарий такой же.

0 ответов

Другие вопросы по тегам