Назад | Перейти на главную страницу

Исправлено: Apache - разрешения PHP для создания / редактирования файлов и каталогов?

У меня есть сервер в облаках стойки ... Fedora 13, и я установил apache, mysql.

Теперь у меня есть фрагмент кода (PHP), который мое веб-приложение часто использует. Он работает на моем локальном компьютере с XAMPP, но когда я загружаю этот код на свой сервер стойки, он не работает:

$myFile = "textfile.txt";
$fh = fopen($myFile, 'w') or die("cant open");
$stringData = "CONTENT";
fwrite($fh, $stringData);
fclose($fh);

Действительно простой PHP-код, который должен работать. Однако он не создаст файл, и если я сам загружу файл textfile.txt и сам предоставлю разрешения 0666, он редактирует файл. Однако это не идеально, поскольку он по-прежнему не создает новые файлы (или каталоги), а изменение каждого из них вручную невозможно.

Владелец файла - root, а группа - root

Как мне заставить это работать?

ОБНОВЛЕНИЕ - Исправлено

Я сменил владельца на apache: apache do: chown -R apache: apache / var / www / html

Казалось, это сработало :)

Есть ли здесь какие-либо проблемы с безопасностью, или это нормально, если пользовательский apache и групповой apache?

Спасибо!

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

Сначала я определяю место, где будут записаны файлы - это может быть DocRoot или отдельное место, которое заносится с конфигурацией псевдонима в apache.

Я создаю группу (обычно называемую www-pub) и добавляю в нее пользователя apache.

Тогда я делаю

chown root:www-pub <directory>

и

chmod g+rwxs <directory>

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

Таким образом, вы ограничиваете, где и что может получить пользователь apache, но по-прежнему разрешаете создание файлов и т. Д. Только в этой области.

Поместите info.php.

echo -e "<?php \nphpinfo(); \n?>" > info.php с соответствующим правом собственности. Затем обновите здесь, чтобы я мог проверить, display_errors включен или нет.

Или простой поворот ON display_errors и это поможет вам устранить неполадки.