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
Спасибо всем за ответы.