8

Когда я запускаю команду ps -efH чтобы вывести список всех процессов, я вижу, что Apache работает от имени пользователя root и кажется, что подпроцессы выполняются как www-data . Вот выдержка:

root     30117     1  0 09:10 ?        00:00:00   /usr/sbin/apache2 -k start
www-data 30119 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30120 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30121 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start

Могу ли я заставить Apache и все подпроцессы запускаться от имени другого пользователя apache2d:apache2d? Если так, как? Я где-то читал, что настройки для этого можно найти в /etc/apache2/httpd.conf но этот файл кажется пустым? Можно ли это сделать, изменив владельца и группу скрипта /etc/init.d/apache2 а затем установив для него флаг setuid?

5 ответов5

19

Apache должен изначально запускаться от имени root, чтобы связываться с портом 80. Если вы изначально не запускаете его как root, вы не сможете подключиться к порту 80. Если вы хотите привязать какой-либо порт выше 1024, тогда да, вы можете. В противном случае не беспокойтесь о root. Это родительский процесс Apache и не обслуживает никаких запросов. Это порождает дочерние процессы и удаляет привилегии для обработки запросов.

Чтобы изменить пользователя Apache, установите параметры User и Group в вашей конфигурации Apache.

4

@bahamat объясняет это довольно хорошо, но я добавлю немного больше деталей.

В ходе нормальной работы принадлежащий пользователю root процесс apache не будет выполнять никаких реальных операций, кроме прослушивания порта 80 и пересылки входящих соединений его дочерним элементам (безопасно непривилегированным, как пользователь www-data ).

Расположение главного файла конфигурации зависит от параметров времени компиляции и зависит от дистрибутива, но /etc/apache2/apache2.conf является хорошим начальным предположением.

Кроме того, если вы настраиваете многопользовательскую систему веб-хостинга , вы можете захотеть взглянуть на SuExec и fcgid, чтобы процесс apache каждого отдельного пользователя веб-хостинга выполнялся как указанный пользователь - так что, если один пользователь небрежно относится к своей безопасности, другой пользователи не будут затронуты.

2

По крайней мере, в Ubuntu настройки для этого находятся в /etc/apache2/envvars . Настройте их, затем перезапустите apache, и все готово.

2

Также ознакомьтесь с Apache2 ITK MPM.

Он разветвляет поток Apache с назначенным uid/gid , поэтому давайте продолжим использовать mod_php . Нет больше chmod/chown и т.д.

0

Mac OS X:

То, что сработало для меня, входит в конфигурационный файл apache:

/etc/apache2/httpd.conf

В этом файле я искал пользователя или группу

и наткнулся на:

User _www
Group _www

Я изменил его на то, что когда-либо понадобилось пользователю / группе (в моем случае - на пользователя / группу, который является владельцем файлов моего веб-приложения, которые вы можете видеть. И это вы можете проверить с помощью простой команды 'ls -l')

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .