Не может scandir () в php, на который ссылается root от Centos 7 с использованием apache - PullRequest
0 голосов
/ 02 июля 2018

Прочитав много вопросов, касающихся php scandir (), я не нашел ответа на мой вопрос. Если это дубликат, пожалуйста, дайте мне знать, где ответ, прежде чем отмечать меня.

Проблема:

Если я делаю

var_dump(scandir("/"));

Затем я получаю содержимое системной корневой папки: bin, installs, nvme, var и т. Д. И т. Д. ?

Если я делаю

var_dump(scandir("/nvme"));

Тогда я получаю false и ошибку, что var / www / public_html / nvme не существует.

Итак, если я сделаю

var_dump(scandir("../../../../../../../"));

Я вижу системную корневую папку

но если я сделаю

var_dump(scandir("../../../../../../../nvme"));

тогда я получаю сообщение об отказе в разрешении.

Я проверил, что могу сканировать каждый каталог между public_html и корневым каталогом, но в тот момент, когда я пытаюсь сканировать каталог вперед, я сталкиваюсь с ошибками. Все каталоги на обратном пути принадлежат тому же пользователю, что и каталог nvme, который я пытаюсь сканировать. Использование file_get_contents выдает ту же ошибку.

В SElinux я дал apache разрешение на чтение и запись в папку nvme. Я работаю на Centos 7 с включенным SElinux.

Почему я не могу получить доступ с правами root по другому пути к каталогу?

EDIT:

Моя конкретная ошибка заключалась в том, что я не завершил настройку контекста SElinux.

Ранее я бегал semanage fcontext -a -t httpd_sys_content_t "/nvme(/.*)

но после этого мне все еще нужно было бежать restorecon -v "/nvme"

чтобы новый контекст был фактически реализован. Теперь var_dump(scandir("/./nvme")); и var_dump(scandir("../../../../../../../nvme")); оба работают.

...