Apache/PHP не имеет разрешения на чтение файла

У меня есть веб-страница, которая пытается прочитать файл, но получает ошибку "Отказано в разрешении". Я написал очень простую страницу, чтобы воспроизвести проблему.

<?php
echo exec('whoami');
echo "<br>";
echo exec('cat /var/svn/aaa/format 2>&1');
?>

В качестве теста я попытался установить разрешения для svn dir и всего остального на нелепую версию 777, изменил владельца на apache и попытался добавить пользователя apache в разные группы. Я подтвердил, что он работает от имени пользователя Apache (это то, для чего вызов whoami выше). Если я попытаюсь запустить приведенную выше команду как apache в командной строке, то она будет работать нормально, например

sudo -u apache cat /var/svn/aaa/format 2>&1

Почему это не делает то, что я ожидаю? Я ожидал бы, что предоставление файла 777 даст "другие" полные разрешения, я ожидаю, что смена владельца на apache также решит проблему. Я ожидаю, что делать sudo, так как пользователь apache потерпит неудачу, если он выйдет из php.

Кстати, просто для полноты, это проблема, с которой у меня работает WebSVN, но, похоже, это проблема apache, а не проблема WebSVN.

2 ответа

Решение

Получил это исправлено. Я попробовал другую коробку, ничего не делая, и это сработало с первого раза. У меня был файл, к которому я пытался получить доступ, принадлежащий пользователю root, и я не установил никаких разрешений. В поисках чего-то другого оказался SELinux. Я понятия не имею, что это такое, но отключение это решило проблемы. Я предполагаю, что это какая-то "функция" безопасности?? Вызов getenforce сказал мне, что он включен, и я мог использовать setenforce, чтобы сделать его разрешающим.

me@host# getenforce
Enforcing

me@host# setenforce Permissive

Другой вариант - отключить его в файле конфигурации /etc/sysconfig/selinux. Я предполагаю, что перезагрузка чего-то требуется после этого.

SELINUX=disabled

Спасибо всем за ответы.

which cat

используйте полный путь к кошке в вашем приложении

Другие вопросы по тегам