4

我正在寻找一组基线文件权限,以使 django 安装尽可能安全。

我似乎在 Django 网站或 Google 上都找不到任何明显的参考资料。

任何链接或线索?

我使用 Apache + mod_wsgi + django。我没有上传目录的权限。这是一个非常基本的设置。

我目前正在成功运行我的代码,因此:

/var/www/djangodir 
                  /django
                  /3rdpartyapp
                  /myapp
                        /serverfiles/my.wsgi

all directorys:   755 owned by root.root
all files:        644 owned by root.root

exceptions to all files
-----------------------
settings.py file: 400  owned by apache.apache
my.wsgi:          400  owned by apache.apache

我不喜欢所有文件上的 644,并且想加强它,但似乎无法摆脱 400 或 500。如果我这样做,wsgi 应用程序无法从 django 导入任何内容。

帮助!

4

2 回答 2

6

使用 mod_wsgi 守护程序模式并让您的 Django 应用程序在其中运行。将该守护进程组的用户/组设置为不同于 Apache 用户的特殊专用 Django 应用程序用户。让您使用的 WSGI 脚本文件位于 Django 项目区域之外。

如果 Apache 用户拥有,则包含 WSGI 脚本文件的目录可以是 700。其中的 WSGI 脚本文件只需要 400 个,甚至不需要为 Apache 用户所有,但可以由 root 或专用 Django 应用程序用户所有。Apache 用户所需要的只是能够查看目录中的 WSGI 脚本文件,而不需要打开 WSGI 脚本文件的能力。

然后,您的所有项目代码和虚拟环境都可以位于专用 Django 用户拥有的目录结构中,所有目录均为 0700,并且文件在您认为合适或需要时可读/可写。只有专用的 Django 应用程序用户需要访问,因为所有访问都来自以该用户身份运行的守护进程组。

通过这种方式,您的访问权限受到限制,因此 Apache 用户甚至无法看到您的项目代码。这样,如果在同一个 Apache 上托管其他东西,例如 PHP,就不会有闯入 PHP 代码访问文件的风险。

于 2013-05-07T00:08:34.697 回答
6

感谢您的回复!我不知道你是如何找到时间来回答这些年来我看到你的指纹的所有问题,但你正在为整个 python/django/wsgi 社区提供巨大的服务。我喜欢你的博客文章:http : //blog.dscpl.com.au 12/5/2012 关于这些论坛上好的建议和善意的稀释。在谷歌上搜索所有的废话绝对是一个挑战。

无论如何,对于任何观看此线程的人来说,这都有效。

root.root:              755 /var/saas                   <- topdir
apache.apache:          755 /var/saas/wsgi              <- apache folder
vsn.vsn:                400 /var/saas/wsgi/vsn.wsgi     <- wsgi file
vsn.vsn:                700 /var/saas/vsn               <- django code
root.root:              700 /var/saas/scripts           <- operations scripts
root.root:              700 /var/saas/config            <- temp config folder
apache.apache           444 /var/www/html/static        <- destination of django's: python ./manage.py collectstatic

我无法让它与 apache 权限 700 一起使用,但我对 755 感到满意。我猜是 apache 未解之谜之一。

于 2013-05-10T18:45:48.973 回答