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

Обеспечение безопасности развертывания Django на сервере Ubuntu

Я только начинаю работать с Django и хочу развернуть тестовое приложение на Linux VPS, который у меня есть. Я не знаю, как защитить развертывание. Если я настрою Apache для обслуживания приложения из каталога моих проектов в / home, то я считаю, что есть вероятность, что кто-то со злым умыслом может получить доступ ко всему моему / home.

Я думал о создании другого пользователя. Есть ли лучший вариант?

Спасибо, Хари

Лучшая практика безопасности для развертывания Django - использовать одного пользователя для каждого «сайта», это легко сделать с помощью mod_wsgi, для каждого виртуального хоста у вас есть что-то вроде этого:

<IfModule mod_wsgi.c>
    WSGIDaemonProcess mydeploygroup user=_myuser group=_mygroup threads=25
    WSGIProcessGroup mydeploygroup
    WSGIScriptAlias / /srv/vhosts/www.example.org/apps/myapp/wsgi/deployment.wsgi
</IfModule>

Это хорошая практика, чтобы .py файлы в место, доступное только для чтения, доступное только этому конкретному пользователю. Таким образом, если злоумышленник сможет загружать произвольные файлы, разрешения не позволят ему изменить существующий код Python и взломать его.

Также есть функция chroot но я никогда не тестировал. Есть ли у кого-нибудь отзывы?

Проекты Django не предназначены для размещения в корне документа. Положите это под /srv и указать WSGIScriptAlias соответственно.

В DocumentRoot вам вообще ничего не нужно. Ваш WSGIScriptAlias ​​должен указывать на wsgi-файл, который может находиться в любом месте, откуда пользовательские www-данные могут читать. Файл wsgi, в свою очередь, указывает на ваш Django-проект, который также может находиться в любом месте, откуда можно читать www-данные.

Похоже, что нет никаких официальных правил о том, как настроить вашу структуру. Лично у меня все мои проекты находятся в подпапках / var / www.

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