Сценарий монтирования 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.
Я просто не получаю журнал из браузера, поскольку сценарий такой же.