Linux / Python:如何在Python文件中隐藏敏感信息,以便环境中的开发人员无法访问它?

时间:2015-12-11 01:49:25

标签: python mysql linux django passwords

我在Ubuntu服务器上运行了一个Django项目。还有其他开发人员能够进入框中并查看文件。我想这样做,以便settings.py中的mysql凭据和api密钥可以分成另一个文件,该文件只能由root用户查看,但也可以由django项目运行。

我之前的方法是使密码文件只能访问root:root chmod 600,但我的settings.py在尝试导入密码文件时会抛出ImportError。变量。我读到了关于setuid的内容,但这看起来并不安全。我尝试做什么的好方法是什么?谢谢。

4 个答案:

答案 0 :(得分:1)

查看文件系统ACL setfacl manpage

您可以让被查询的文件仅由root用户拥有和读取,但也允许运行Django代码的任何用户(您的用户名,apache用户等)具有读访问权限。文件系统ACL允许比标准所有者/组/其他文件权限更细粒度的访问控制

答案 1 :(得分:1)

我将密码文件放在Django用户拥有600权限的目录中。 Django用户可以做他们需要的东西,甚至没有其他人能够查看目录(root和Django除外)

您可以做的另一件事是将其存储在数据库中并进行设置,以便数据库中的root用户和Django用户拥有唯一的密码,这样只有拥有这些密码的人才能访问它。 IE系统root不再与DB root相同。

答案 2 :(得分:0)

这正是为dj-database-url创建的!

使用此包可以将DB信息存储在用户的环境变量中。从不同帐户登录的任何人都无法访问数据库详细信息

如何使用?

DATABASE_URL的settings.py中配置数据库(默认为可选):

import dj_database_url
DATABASES = {'default': dj_database_url.config(default='postgres://...')}

然后在你的shell中

$ export DATABASE_URL="postgress://user:password@host/databasename"
$ ./manage.py runserver

这将使用您指定的连接运行服务器,如果未定义DATABASE_URL,则假定连接由可选的default参数传递。

理想情况下你会把

 export DATABASE_URL="postgress://user:password@host/databasename"

在您的主目录中的.bashrc文件中,以便只有您可以阅读

答案 3 :(得分:-2)

code.djangoproject.com SECRET_KEY = open(os.path.expanduser('~/.gallery-secret')).read().strip() 对此进行了讨论。他们有几个建议,如

.gallery-secret

其中MYAPP_OPTIONS=/etc/opt/myapp/仅限于由django用户读取(当然,root仍然可以使用)。我更喜欢与os.path.expandvar一起使用的size()等环境变量,以便用户帐户不需要主目录,因此开发人员可以轻松指向测试凭据。