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

Как заставить Apache писать в файлы PHP с PHP, работающим как DSO?

У меня PHP работает как DSO. Таким образом, мой установочный сценарий (который записывает в файл конфигурации) не может ничего писать.

Как дать apache (пользователь: nobody) возможность записи в файл?

В общей среде все становится немного сложнее, когда дело касается безопасности. Изменяя право собственности на файл на «никто», вы даете Apache доступ на запись к этому файлу, но, если модуль PHP не имеет настроек для ограничения каждого виртуального хоста каждым его собственным каталогом, он также предоставит доступ к нему другим. Проверьте, как он настроен в вашей среде.

Apache обычно запускается как пользователь «никто» и группа «никто», так что вы также можете играть с разрешениями группы. Измените группу файла на «никто» и установите разрешение 664.

Если вы не можете изменить владельца или группу файла, FTP обычно позволяет изменить разрешения. Предполагая, что Apache не входит в число пользователей / групп, которым принадлежит этот файл, вам придется установить его на 777, что очень небезопасно, но все зависит от того, в какой среде вы находитесь. Возможно, вы можете установить его временно. , установите приложение и измените его на 644 или 444 (только для чтения).

Вы можете записать свои файлы конфигурации во временный каталог, например /tmp/config/. Затем вы можете выполнить сценарий оболочки, чтобы скопировать файлы конфигурации из /tmp/config/ в желаемое место.

Чтобы предоставить необходимые разрешения, вы можете добавить пользователя nobody в файл sudoers. Запись должна выглядеть так:

nobody   ALL=NOPASSWD: /path/to/your_script.sh

Сценарий оболочки (не забудьте добавить разрешение на выполнение).

cp -r /tmp/config/* /desired/path/to/config

В PHP вам понадобится небольшой фрагмент кода, например:

<?php
$output = shell_exec('sudo /path/to/your_script.sh');
echo "$output";
?>

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

Быстрый (и небезопасный) способ сделать это - выполнить chmod 777 . из каталога, в который должен идти файл. Перед выполнением этого запуска ls -ld . чтобы получить разрешения, которые вы их снова установите. В некоторых случаях требуемый каталог не существует, поэтому вам необходимо сначала создать его. Сразу после записи файла конфигурации сбросьте для каталога исходные разрешения. Скорее всего, правильная команда chmod 755 . или chmod 750 . запустить из каталога. Проверьте с помощью команды ls.

Измените разрешения для файла конфигурации, чтобы Apache больше не мог писать в него (chmod o-w configfile). Приложения часто поставляются с примерами файлов конфигурации. Размещение одного из них в каталоге конфигурации и редактирование может быть лучшим подходом. Для этого необходимо изучить и понять параметры конфигурации. Вы можете использовать скрипт онлайн-конфигурации для облегчения редактирования.

Это типичная проблема при запуске PHP в качестве DSO с cPanel, но она также применима к другим настройкам.

При запуске этого метода процессы PHP обрабатываются пользователем, который запускает httpd. В большинстве случаев этим пользователем является «никто». Это означает, что когда PHP взаимодействует с файлами в файловой системе, они должны быть доступны пользователю «никто». Это создает проблемы с разрешениями, поскольку ваш обычный пользователь на основе cPanel не будет иметь доступа к файлам RW (чтение / запись), которые принадлежат пользователю «none» без правильных изменений разрешений. Большинство веб-приложений / скриптов PHP необходимо записывать в файлы и каталоги, и если они принадлежат пользователю cPanel, без изменения разрешений для файлов / каталогов на 777, это вызовет проблемы и в некоторых случаях сломает ваш веб-сайт (ы). .

Таким образом, в этом случае вы можете просто и только управлять разрешениями вручную, установив их на 777

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

Или, что лучше, если вы можете перейти на Mod_SuPHP и у вас нет проблем с производительностью (поскольку DSO намного быстрее), вы сможете запускать PHP как пользователь, работающий с cPanel.

Если упустить из виду проблемы с разрешениями, с которыми можно столкнуться при запуске PHP через DSO, это дает некоторые преимущества по сравнению с SuPHP. Первое - это скорость. Mod_PHP быстрее, чем Mod_SuPHP. В основном это связано с тем, что каждый запрос, обрабатываемый Mod_SuPHP, упаковывается для запуска от имени пользователя, владеющего файлами. Это может быть не очень заметно на сайтах с низким трафиком, но на сайтах с высоким трафиком это может накапливаться довольно быстро. Вторая - это полная функциональность с дополнениями кеширования опткода PHP, такими как eAcclerator, APC и Xcache. Чтобы получить все преимущества кеширования кода опткода PHP, вам нужен общий пользователь, который используется при кэшировании скомпилированного байтового кода PHP и запуске PHP через DSO, запускает PHP, поскольку «никто» пользователь не удовлетворяет эту потребность. Вы можете узнать, настроен ли ваш сервер для запуска PHP через DSO, перейдя в WHM и посмотрев в Main >> Service Configuration >> Apache Configuration. >> Конфигурация PHP и SuExec

Здесь вы можете найти более подробную информацию:

https://helpdesk.wiredtree.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=1663