我正在开展一个 django 项目,其中我必须将秘密信息保存到 python 的 os.environ 中。
通过以下链接 http://barkas.com/2016/set-environment-variables-activating-virtualenv/ 代码在本地系统上运行良好。
现在当我运行获取密钥时
$/home/env/bin/python
>> import os
>> os.environ
environ({'SECRETE_KEY': '000000')
但在执行相同命令时须藤获取不同的环境变量。
我需要得到环境({'SECRETE_KEY':'000000')使用sudo /home/env/bin/python
也尝试过
如何使用带有 sudo 的 python virtualenv?
但它对我没有帮助。
答案1
BASH 变量是有作用域的。这意味着它们只对某些事物可用,而不是在系统范围内共享。
实例化变量后,该变量可用于当前 shell ( x="apple"
)。导出后,该变量可用于当前 shell 以及后续 shell/函数 ( export x="apple"
)。如果关闭该 shell/终端,则会丢失该变量。
因此,将通用变量添加到用户配置文件中,以便正确加载它们。这通常使用export
in~/.bashrc
或 来完成~/.bash_profile
。
与关闭终端时变量丢失类似,切换用户时这些变量也会丢失。
如果您想root
访问 BASH 变量,您必须在root
shell 内声明该变量。 您可以将您的(假定)复制到用户文件export
中,并正确获取其来源。~/.bashrc
root
/root/.bashrc
您可能能够通过查看man sudo
(查看-E
)来导出/推送所有变量,因为我知道它有几个关于是否切换到新用户的目录并可能共享变量的选项,但这不是我采取的方法。
相反,与共享 Web 服务器目录 ( ) 的方式类似,/srv/www/
通过让共享组拥有文件 ( www-data
, g+rwx
),并确保只有该组可以读取文件 ( o-rwx
),我们将创建一个共享文件来获取资源并防止未经授权的用户访问。因此,您可以将以下内容添加到~/.bashrc
组中每个用户的文件中,并且您希望有权访问该变量:
$ touch /srv/www/.bashrc_shared
$ chown www-data:www-data /srv/www/.bashrc_shared
$ chmod g+rwx /srv/www/.bashrc_shared
$ chmod o-rwx /srv/www/.bashrc_shared
$ vim /srv/www/.bashrc_shared
#!/bin/bash
export MY_SECRET_VAR="super_secret_var"
现在,确保~/.profile
来源是这个文件,或者你的~/.bashrc
来源是这个文件,或者sudo
带着旗帜奔跑-i
:
cat ~/.profile
# ~/.profile
#
[[ -f /srv/www/.bashrc_shared ]] && source /srv/www/.bashrc_shared
或者
sudo -i your_command # Source config files