我在Ubuntu服务器上运行了一个Django项目。还有其他开发人员能够进入框中并查看文件。我想这样做,以便settings.py
中的mysql凭据和api密钥可以分成另一个文件,该文件只能由root用户查看,但也可以由django项目运行。
我之前的方法是使密码文件只能访问root:root chmod 600
,但我的settings.py
在尝试导入密码文件时会抛出ImportError
。变量。我读到了关于setuid的内容,但这看起来并不安全。我尝试做什么的好方法是什么?谢谢。
答案 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()
等环境变量,以便用户帐户不需要主目录,因此开发人员可以轻松指向测试凭据。