У меня есть учетная запись пользователя, настроенная для этого веб-приложения 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 не работал бы.