Intereting Posts

Почему при запуске из браузера проблемы с файлом_компоненты возникают с разрешения?

Этот вопрос был задан несколько раз здесь, но я еще не нашел решения. У меня есть Fedora 19 LAMP server, и я просто хочу запустить простую команду: file_put_contents('test.txt', 'Hello there'); чтобы подтвердить, что мой веб-сервер может использовать PHP для записи данных в файлы. У меня возникли проблемы с выяснением правильной схемы разрешений. Для начала, только для разработки, корнем документа Apache является /var/www/html . Этот каталог изначально принадлежал пользователю и группе с именем www-data , но я сменил группу каталога на основную группу владельца процесса httpd с именем apache . Именно этот владелец активен при запуске PHP. Я подтвердил это следующим:

введите описание изображения здесь

Как вы видите, владельцем процесса является apache , текущим директором является /var/www/html/php-console . Каталог принадлежит www-data и члены группы apache имеют полный доступ к нему.

Я попробовал следующее, чтобы заставить PHP фактически создать файл в этом месте, но безрезультатно:

 chmod 777 /var/www/html/php-console chown apache /var/www/html/php-console chgrp apache /var/www/html/php-console cd /var/www/html; > test.txt; chmod 777 test.txt; 

Ничего не будет работать, пока этот скрипт запускается из браузера. Однако, когда я использую file_put_contents с PHP CLI, он работает так же, как я ожидал, при условии, что пользователь, который я вводил команды как или его группа, имеет права на запись в этот каталог или тестовый файл.

введите описание изображения здесь

Итак, из командной строки вы видите, как www-data имеют права на чтение, запись и выполнение в папку, в которой я находится. posix_getpwuid и posix_geteuid помогают вам найти владельца процесса Apache / PHP, который в этом случае так же, как пользователь зашел в консоль. file_put_contents записывает 8 байтов в указанный файл. Если я изменю группу или владельца и группу на что-то другое, я получаю отказ от прав, что абсолютно имеет смысл.

Если это работает в командной строке, то почему нет, когда я действительно хочу это, т. Е. Пока на самом деле обслуживает веб-страницы ???

Поскольку вы забыли прочитать httpd_selinux(8) страницу httpd_selinux(8) и предоставить каталогу соответствующий контекст файла, чтобы веб-сервер мог там писать файлы.