Почему мой процесс apache не может записать в мой доступный для записи файл? - PullRequest
2 голосов
/ 05 февраля 2009

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

У меня есть скрипт Perl / CGI, установленный на машине Fedora 9, на которой работает apache2, у этого скрипта есть файл конфигурации, который находится в той же директории, этот файл конфигурации имеет 777 разрешений.

Сценарий не может записать в файл. Он может читать, но я никоим образом не могу заставить его писать в него. Файл принадлежит тому же пользователю, на котором работает apache. Я написал небольшой PHP-скрипт для тестирования и поместил его в ту же папку. Скрипт PHP может читать, но не может писать в него.

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

РЕДАКТИРОВАТЬ: я могу открыть файл для редактирования из командной строки; это Apache, который не может получить к нему доступ

EDIT2: иерархия папок / var / www / cgi-bin / script
разрешения такие:
/ var root 755
www root 755
корень cgi-bin 755
скрипт apache 755

РЕДАКТИРОВАТЬ: Проблема была в selinux. Я отключил его, и у сценария был доступ к файлу, спасибо за каждый вклад

Заранее спасибо

Ответы [ 5 ]

12 голосов
/ 05 февраля 2009

Apache работает с каким-то профилем selinux или чем-то подобным, что мешает его записи в этот каталог?

3 голосов
/ 05 февраля 2009

Пользователь apache, вероятно, не имеет прав доступа к одному из родительских каталогов. Он должен иметь как минимум разрешение на выполнение во всех каталогах, включая каталог, содержащий ваш файл.

РЕДАКТИРОВАТЬ: Правильно, учитывая, что это сайт программирования, возможно, какой-то код в порядке.

  1. Используйте абсолютный путь к файлу для проверки, а не относительный, чтобы убедиться, что вы находитесь в правильном каталоге.

  2. $! следует распечатать сообщение об ошибке «Отказано в доступе», если это разрешения, вы можете распечатать проблему с:

    open (FILE, "> /path/to/file/config.ini") || die "Невозможно открыть: $!"; ... закрыть (FILE);

2 голосов
/ 05 февраля 2009

Разрешает ли каталог веб-серверу записывать туда файлы?

2 голосов
/ 05 февраля 2009

Может быть, какой-то другой процесс имеет блокировку записи в файл? Попробуйте lsof , чтобы узнать, кто его держит.

0 голосов
/ 06 февраля 2009

Я знаю, что предыдущий пост касался этого, но я думаю, что стоит повторить: при обсуждении проблемы такого рода полезно включить соответствующий код и вывод исключения. Если операция ввода-вывода завершится неудачно, $! должен содержать системное сообщение об ошибке, которое объясняет, почему операция не удалась. Сказать, что «это не сработало», на самом деле ничего не дает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...