Невозможно записать в каталог, используя Apache / Stack Overflow

Я сделал эксперимент:

Я вручную создал новую структуру каталогов / r / reuse / data с данными, имеющими все разрешения, затем попытался записать файл в данные, используя https://www.nsrusa.org/Tests/test.php .

<?php
// Test writing into new file outside of document root

error_reporting ( E_ALL);
ini_set ( "display_errors", "on");
file_put_contents ( "/r/reuse/data/test.txt", "hello world!");
?>

Я получил это сообщение об ошибке:

"Warning: file_put_contents(/r/reuse/data/test.txt): failed to open stream: No such file or directory in /home/nsr/public_html/Tests/test.php on line 6"

Почему это случилось?

ДОБАВЛЕНО 15.10.18:

Я добавил код для проверки существования каждого родительского каталога, и единственным, который был найден, был /. Таким образом, / r не был найден, хотя я создал его при запуске от имени пользователя root! Означает ли это, что программы, работающие от имени пользователя ‘nsr’, не могут видеть каталоги, созданные как ‘root’, несмотря на наличие прав доступа r и x на эти каталоги? Я не понимаю.

ДОБАВЛЕНО:

Я изменил владельца и группу каталога / r / reuse / data на nsr, но при запуске тестовой программы получил те же результаты, что и у пользователя ‘nsr’.

-2

Решение

(Ответ предоставлен оригинальным постером)

Невозможность записи в каталоги и файлы, которые существуют за пределами корней документов всех веб-сайтов на сервере, возникает, когда включена настройка WHM «mod_ruid2 and jailshell». Благодаря поддержке WHM / cPanel я теперь понимаю причины.

Во-первых, я должен сказать, что причина, по которой я хотел иметь возможность записи в такой каталог, заключается в том, что я заинтересован в предоставлении общей библиотеки программных компонентов, сервисов и хранилища для нескольких не связанных между собой веб-сайтов (даже принадлежащих разным компаниям), написанных тот же дизайнер веб-сайта и существует на том же сервере.

Для этой цели в идеале мне нужно было создать общий каталог, принадлежащий root, на который все веб-сайты могут ссылаться для непосредственного чтения и записи (используя язык на стороне сервера, такой как PHP), для эффективности. Этот каталог явно должен существовать вне корней документов всех веб-сайтов, поскольку он будет содержать общую библиотеку программного обеспечения, используемого каждым веб-сайтом.

Я выполнил часть чтения, используя существующие механизмы, такие как PHP include_path и псевдоним Apache, что замечательно, но написание является проблемой, когда WHM «mod_ruid2 and jailshell» включен. Этот твик работает с Linux для создания смонтированных виртуальных файловых систем «только для чтения» с использованием команды, аналогичной «chroot», которая ограничивает доступ к файловой системе, так что запись не может происходить за пределами корневого каталога документа пользователя. Запись запрещена даже в том случае, если родительским каталогам предоставлены разрешения drwxrwxrwx, которые в чистом Linux разрешают запись любым пользователем (любым виртуальным хостом) на сервере.

Я надеюсь, что эта информация будет полезна для других, озадаченных тем, что PHP или другие серверные операции ввода-вывода не могут записать в каталоги вне корня документа. Твик WHM «mod_ruid2 and jailshell» запрещает доступ на запись без предоставления исключений.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]