У меня есть несколько сайтов Django, развернутых с использованием Apache2 и mod_wsgi. При настройке директивы WSGIDaemonProcess в большинстве руководств (включая официальную документацию) предлагается запустить процесс WSGI от имени пользователя, в домашнем каталоге которого находится код. Например:
WSGIScriptAlias / /home/joe/sites/example.com/mod_wsgi-handler.wsgi
WSGIDaemonProcess example.com user=joe group=joe processes=2 threads=25
Однако мне интересно, действительно ли разумно запускать процесс демона wsgi от имени того же пользователя (с соответствующими привилегиями), который разрабатывает код. Должен ли я создавать учетную запись службы, единственной привилегией которой является доступ только для чтения к коду, чтобы повысить безопасность? Или мои опасения преувеличены?
Хорошей общей практикой является запуск ваших служб с непривилегированными учетными записями, когда это возможно. Для процессов, которым нужны ресурсы только для root (порты <1024, доступ к определенным файлам), процесс должен получить их, а затем немедленно отказаться от привилегий.
Еще несколько советов .. Из вашей фразы «запускайте ... процесс от имени того же пользователя ... который разрабатывает код» звучит так, будто разработчики пишут код на рабочих узлах. Вы используете какую-либо систему контроля изменений исходного кода (например, git, svn)? Разработчики должны кодировать на машинах, предназначенных только для разработчиков, и делать коммит в общий репозиторий, из которого вы можете выпускать стабильные сборки. Разверните код из репозитория после тестирования интеграции и, в идеале, упакуйте его для установки (DEB, RPM, EGG и т. Д.). Это уменьшит количество ошибок, возникающих в производственной среде, сделает выпуски повторяемыми, предотвратит потерю кода, если хост выйдет из строя, и так далее.
Причина, по которой вы обнаруживаете, что это должен быть пользователь домашнего каталога, заключается в том, что во многих системах домашний каталог имеет разрешения «drwx ------», что означает, что только пользователь может читать там содержимое. Таким образом, у вас практически нет выбора, если вы собираетесь помещать данные в домашний каталог пользователя.
Вы также можете подумать, что поэтому лучше вообще не иметь его в своем домашнем каталоге, а вместо этого разместить его там, где находятся другие материалы веб-сервера, но не под DocumentRoot любого виртуального сервера или основного сервера. При этом ограничения каталога не будут применяться, и пользователь Apache сможет его прочитать.
В целом лучшая идея, особенно если ящик также является вашей собственной машиной разработки, - это выполнить отдельное развертывание кода в этой отдельной области, сделав файлы кода недоступными для записи, а затем запустив все это как отдельный выделенный непривилегированный пользователь.
Вам лучше сделать chown www-user: www-data -R dirname вашего кода (или apache: apache). Самые важные данные на вашем компьютере - это ваши, пользователь данных, поэтому перемещение сервисов из вашего пользователь лучше.