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

WSGIDaemonProcess: указание пользователя

У меня есть учетная запись пользователя, настроенная для этого веб-приложения Python, которое я развертываю с помощью mod_wsgi. Это супер непривилегированный, и он может только читать из appdir и записывать в отдельный набор tempdir, на который никто другой не может смотреть. Я использую следующую конфигурацию:

WSGIDaemonProcess xlsxf_daemon user=xlsxf group=xlsxf

Достаточно просто. К сожалению, у нас есть это из документации о user вариант:

Обратите внимание, что этот параметр игнорируется, если Apache не был запущен от имени пользователя root, и в этом случае, независимо от настроек, процессы демона будут запускаться от имени пользователя, от имени которого был запущен Apache.

Поскольку я запускаю это в стандартной установке Ubuntu на Linode, Apache запускается как www-data пользователь и приложение Python, которое я подтвердил, обречено также работать как www-data. Почему ограничение выше? У меня есть множество приложений для рубиновых / пассажирских приложений, которые прекрасно демонстрируют, как другие пользователи.

редактировать: хорошо, значит, Apache не Начало как www-data пользователь, но я все еще вижу, что веб-приложение Python работает как www-data несмотря на приведенную выше строку конфигурации. /редактировать

Или я просто параноик здесь? У меня есть несколько разных проектов, работающих на этом сервере, и я бы хотел, чтобы все они запускались как отдельные пользователи, «на всякий случай», но не стесняйтесь сказать мне, что я должен просто уступить и перенести разрешения на www-data.

edit2: По запросу, вот все запущенные процессы apache:

root     18798  0.0  1.9  16156  9880 ?        Ss   Jul26   0:03 /usr/sbin/apache2 -k start
www-data 19344  0.0  1.0  15208  5264 ?        S    Jul26   0:00 /usr/sbin/apache2 -k start
xlsxf    19361  0.0  1.2 155244  6620 ?        Sl   Jul26   0:02 /usr/sbin/apache2 -k start
www-data 19379  0.0  3.2 245436 16420 ?        Sl   Jul26   0:01 /usr/sbin/apache2 -k start
www-data 19380  0.0  3.2 243536 16496 ?        Sl   Jul26   0:01 /usr/sbin/apache2 -k start

Вы неправильно это читаете. Apache запускается как «root», а родительский процесс Apache остается как «root», только дочерний процесс сервера Apache запускается как «www-data». Процессы демона mod_wsgi разветвляются из родительского «корневого» процесса, и поэтому они по-прежнему смогут переключаться на этого пользователя.

Комментарий заключается в том, что если вы запускаете Apache из совершенно непривилегированной учетной записи, например, когда вы не устанавливаете Apache в своем домашнем каталоге или в другом месте, то, поскольку он не запускается как 'root', он может ' t изменить идентификатор пользователя процессов демона. Apache запускается из системных сценариев инициализации, хотя всегда запускается как «root», и это не должно быть проблемой.

пользователь и группа работают, если у вас правильная строка конфигурации WSGIDaemonProcess. Сам пользовался.

Вот мои строки конфигурации

WSGISocketPrefix /var/run/wsgi

<VirtualHost xx.xx.xx.xx:80>

WSGIDaemonProcess somedomain.com user=somedomain group=somedomain python-path=/home/somedomain/mysite:/home/somedomain/venv/myvenv/lib/python2.7/site-packages
...
...
...
</VirtualHost>

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

ПРИМЕЧАНИЕ. Посмотрите, как у меня WSGISocketPrefix / var / run / wsgi вне раздела виртуального хоста. Без этого демон WSGI не работал бы.