系统环境变量未出现在 sudo 中

Tho*_*hom 5 debian sudo environment-variables

我的 /etc/environment 文件中有以下行:

BROKER_URL=tcp://xxx.30.8.163:61616
Run Code Online (Sandbox Code Playgroud)

我运行这个并得到:

$ set|grep BROKER_URL
BROKER_URL=tcp://xxx.30.8.163:61616
Run Code Online (Sandbox Code Playgroud)

然后,我运行:

$ sudo bash
# set|grep BROKER_URL
# 
Run Code Online (Sandbox Code Playgroud)

这应该是一个系统范围的环境变量。为什么它没有出现在我的 sudo shell 中?

gol*_*cks 5

/etc/environmentPAM 使用的文件,这意味着它由登录处理,sudo bash不这样做,并且(来自man sudoers):

命令环境

由于环境变量会影响程序行为,sudoers 提供了一种方法来限制要运行的命令从用户环境中继承哪些变量。sudoer 可以通过两种不同的方式处理环境变量。

默认情况下,启用 env_reset 选项。这会导致在新的最小环境中执行命令。在 AIX(和没有PAM 的Linux 系统)上,环境是用 /etc/environment 文件的内容初始化的。

请注意,大多数 GNU/linux 系统确实使用 PAM。您可以尝试通过使用sudo -i, 使用登录外壳来解决此问题。但是,这可能仍然不起作用,因为“登录外壳”是指 bash 调用自身的方式,其中不包括 sourcing /etc/environment,并且您实际上并未通过 PAM 登录。

你最好的选择可能是配置 sudo来做你想做的事。