PHP file_put_contents возвращает «Permission Denied» (из-за установки SELinux)

Вопрос: Я знаю, что это распространенная проблема, но я не смог выделить проблему для моего конкретного случая использования, так что несите меня. У меня есть простой PHP-скрипт send_id который просто отправляет идентификационный номер и сохраняет его в TXT файл на моем сервере RHEL с Apache 2.4.6 с PHP 5.4. Сообщение об ошибке: Warning: file_put_contents(/var/www/html/id.txt): failed

Вопрос:

Я знаю, что это распространенная проблема, но я не смог выделить проблему для моего конкретного случая использования, так что несите меня.

У меня есть простой PHP-скрипт send_id который просто отправляет идентификационный номер и сохраняет его в TXT файл на моем сервере RHEL с Apache 2.4.6 с PHP 5.4.

Сообщение об ошибке: Warning: file_put_contents(/var/www/html/id.txt): failed to open stream: Permission denied in/var/www/html/send_id.php on line 6 ‘1’ written to server

Сам скрипт PHP:

<?php $id=$_GET[‘id’]; $stringData = «$id»; $file = file_put_contents(‘/var/www/html/id.txt’, $stringData.PHP_EOL , FILE_APPEND |LOCK_EX); echo «‘$stringData’ written to server»; ?>

chmodding до 777 ничего не делал. Кроме того, я проверил, чтобы увидеть права собственности и заметил, что файл id.txt принадлежит пользователю root на уровне пользователя/группы, а PHP запускается на корневом уровне.

У кого-нибудь есть предложения? Если это поможет, похоже, это произошло после yum update

Лучший ответ:

Я решил эту проблему, просто запустив chcon -Rt httpd_sys_content_rw_t в каталоге, где жил мой проблемный PHP-скрипт.

Дополнительное примечание

ls -alZ *

Коммутатор -Z будет работать с большинством утилит, чтобы показать контексты безопасности SELinux

Ответ №1

Попробуйте изменить владельца папки и файла на (chown) на “www-data” или на “www-data: www-data” и посмотреть, не изменит ли он что-нибудь…

Ответ №2

Используйте относительный путь к файлу из Apache “ДОКУМЕНТНЫЙ КОРТ” для ссылки на файлы в PHP. Это разрешения Apache, которые имеют значение, и по соображениям безопасности он закодирован для запрета доступа к файлам вне DOCUMENT_ROOT.. (да, хотя ваш путь ведет к нему, Apache блокируется, как только он видит, что путь начинается с “/VAR”.,

Предполагая, что этот PHP-скрипт находится в том же каталоге, что и файл id.txt, просто используйте

$file = file_put_contents(‘./id.txt’, $str…

Или если файл txt находился в подкаталоге

file_put_contents(‘./sub-dir/id.txt’, $str…

Это не только безопасно, но и намного короче.

Оцените статью
Добавить комментарий