Nginx + Supervisor + Gunicorn + Django + Celery - 安全问题

hgc*_*rpd 2 security nginx celery supervisord gunicorn

我正在运行一个带有nginx的web服务器,接着是gunicorn用Celery运行一个Django应用程序.所有的枪炮工艺和芹菜工人都由主管管理.我的问题是,在为堆栈中的每个进程设置权限方面,最佳做法是什么?

目前我基本上遵循默认值,我很确定这里有一些不安全的部分:

  1. Nginx主进程是root,工作进程以www-data运行
  2. 主管以root身份运行
  3. Gunicorn以root身份运行(我试图将其设置为另一种用途,但该过程无法启动)
  4. PostgresSQL和RabbitMQ作为自己的用户运行(postgres和rabbitmq)
  5. 我还没有设置Celery,但他们的文档说不能以root身份运行

哪些权限可以收紧,我需要哪些文件才能确保他们有权访问才能工作?

u27*_*702 6

主管需要是root用户才能以root权限启动其他进程(如Nginx).这应该没问题,因为Supervisor不应该直接与外部用户交互或接受用户输入.

Gunicorn应该能够在没有权限的情况下运行,您可能必须将其使用的unix域套接字的所有者更改为www-data而不是root.

通常在Web服务器方案中,您需要root权限才能访问1024以下端口上的文件和打开套接字.如果您的服务器无法访问文件,则应更改其权限,而不是使用权限运行.您通常需要权限来打开端口80或443,这就是现代Web服务器以root身份启动,绑定到其端口然后为其运行的www-data或nobody用户提供权限的原因.

就你应该考虑的其他事情而言,这是一个快速列表:

  • 确保您的数据库查询不受SQL注入的影响
  • 确保您的文档根目录定义良好,并且您没有提供超出预期的文件.
  • 最小化数据库帐户的权限(例如,它们可能不需要表删除和创建)
  • 避免在您接受用户输入并执行或评估它的代码中的任何位置