在python网站上存储postgres密码的“正确”方法

时间:2013-04-09 07:23:58

标签: python apache postgresql mod-wsgi

我正在用Python(在Linux系统上的Apache服务器上)编写一个Web应用程序,需要连接到Postgres数据库。因此,它需要数据库服务器的有效密码。在我的Python文件中对密码进行硬编码似乎相当不令人满意。

我确实想知道如何使用.pgpass文件,但它需要属于www-data用户,对吧?默认情况下,没有/ home / www-data目录,这是我希望存储.pgpass文件的位置。我可以创建这样的目录并将.pgpass文件存储在那里吗?如果没有,那么启用我的Python脚本连接数据库的“正确”方法是什么?

2 个答案:

答案 0 :(得分:1)

无论您使用何种方法,以www-data运行的其他应用程序都可以读取您的密码并以数据库的形式登录。使用peer身份验证无法帮助您,它仍会信任在www-data下运行的所有应用。

如果您希望应用程序能够将其数据与其他数据库隔离,则需要将其作为单独的用户ID运行。这方面的主要方法是:

  • 使用apache suexec模块以单独的用户身份运行脚本;
  • 使用fast-cgi(fcgi)或scgi以不同的用户身份运行cgi;或
  • 让应用程序运行自己的最小HTTP服务器并为其安装Apache反向代理

其中,目前最好的选择通常是使用scgi / fcgi。它可以让您轻松地以不同的unix用户身份运行您的应用程序,但避免了反向代理的复杂性和开销。

答案 1 :(得分:1)

将应用程序及其配置文件安装在与静态文件目录不同的自己的目录中,并且只能由应用程序用户读取。

设置另一个用户来运行应用程序并使用WSGIDaemonProcess指令。

mod_wsgi siteQuick Configuration GuideConfiguration GuidelinesConfiguration Directives

清楚地描述了所有这些以及更多内容