postgres,django&一般webserver auth安全性(pg_hba.conf等)

时间:2011-04-01 10:26:36

标签: django postgresql web-applications webserver

我正在尝试设置我的Web服务器,并考虑到最佳实践和一般安全性,并尽可能多地阅读。

我的服务器正在运行nginx& uwsgi已经设置为以各自用户的'nginx'和'uwsgi'运行 - 两个用户都被设置为no-login,no-password。

我的所有应用程序/项目文件夹都在我自己的(非root)用户名和“开发人员”组下。它们只是对每个人都是只读的。

第1个问题)

我的理解是这是一种很好的做法,因为服务器(uwsgi / nginx)对这些文件没有写入权限?

第二个问题)

我的帖子 pg_hba.conf 是:

local    all    postgres    ident sameuser
local    appdb  appusername      password

appdb& appusername已通过pgsql为特定应用程序设置

这是否意味着(unix)用户'postgres'只能在ident / unix授权的情况下在本地登录?

此外,它是否意味着对数据库'dbname'的唯一访问是通过具有正确密码的(psql)用户'dbuser'

**最终部分**

如果我的服务器(uwsgi)在技术上对我的django设置文件(包含我的数据库详细信息,包括密码和psql用户名)具有读取权限,那么这不是安全隐患吗?

欢迎任何澄清!

2 个答案:

答案 0 :(得分:2)

  1. 是的,对于服务器来说,没有对不必要的文件进行写入或读取访问是一件好事(尽管对于Web应用程序很少见)。

  2. 是的,这意味着由postgres OS用户运行的任何进程都可以作为postgres数据库用户访问任何数据库。它由ident执行,但不是不安全和不可靠的网络标识,而是本地,安全和可靠的SO_PEERCRED。

    我还建议服务不是通过密码而是通过本地标识连接 - 如果攻击者以某种方式获得设置文件的读取权限(例如来自备份,不安全的传输等),并保存密码,那么它可以对数据库做任何事情。使用ident,它必须能够以特定用户身份运行代码,这要困难得多。

  3. 一切都存在安全风险。安全是一种管理这种风险的艺术 - 管理安全和方便之间的平衡。如果您可以将服务器配置为不需要访问此文件,并且它不会过于不切实际(例如需要手动干预重启),那就去做吧。也许这种“身份”认证会更好。

答案 1 :(得分:1)

  1. 对于尽可能偏执的权限通常是一种好习惯 - 所以是的。 :)
  2. 是的,是的,是的。
  3. 所允许的一切都是“安全风险”,但有时它只是不起作用。 uWSGI是你的应用程序服务器,如果无法读取它,他应该如何运行你的代码呢?