sudo 中未出现系统环境变量

sudo 中未出现系统环境变量

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

BROKER_URL=tcp://xxx.30.8.163:61616

我运行这个并得到:

$ set|grep BROKER_URL
BROKER_URL=tcp://xxx.30.8.163:61616

然后,我运行:

$ sudo bash
# set|grep BROKER_URL
# 

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

答案1

/etc/environment是一个文件由 PAM 使用,这意味着它是通过登录处理的,但sudo bash不这样做,并且(来自man sudoers):

命令环境

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

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

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

你最好的选择可能是配置须藤做你想做的事。

相关内容