我正在寻找一组基本的文件权限,以使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导入任何内容。
帮助!
答案 0 :(得分: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代码的中断就不会有访问文件的风险。
答案 1 :(得分:5)
感谢您的回复!我不知道你是如何找到时间回答我这些年来看到你的指纹的所有问题,但你正在为整个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的一个未解之谜。