2011-04-01 88 views
3

我试图建立我的web服务器的最佳做法和一般安全的思想,并已尽可能多地阅读。postgres,Django的&一般网络服务器认证安全(pg_hba.conf等)

我的服务器正在运行nginx & uwsgi,它们都被设置为以其各自用户的'nginx'和'uwsgi'运行 - 两个用户都被设置为无登录,无密码。

我所有的应用程序/项目文件夹都以我自己的(非根)用户名和组的“开发人员”进行chown。他们chmod'ed只读给每个人。

1日问题)

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

第二个问题)

我的Postgres 的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
  1. 是的,这是一个很好的(尽管很少有Web应用程序)实践服务器没有读或写访问它没有给文件。

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

    我还建议,通过服务密码的,而是由当地的ident —连接不若攻击者能够以某种方式读取权限设置文件(例如从备份中,不安全的转移等)保存的密码,那么就可以做任何数据库。使用ident它必须能够以特定用户身份运行代码,这非常困难。

  3. 一切都有安全隐患。安全性是管理这种风险的一种技巧,可以在安全和方便之间管理平衡。如果你可以配置你的服务器,它不需要访问这些文件,它不会太不切实际(例如需要重新启动时手动干预),那么就去做吧。也许这个“身份”认证会更好。

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