如何为所有服务设置全局环境变量?

Hez*_*ezi 5 environment-variables systemd services

DefaultEnvironment=我已经看到,通过使用in应该是可能的/etc/systemd/system.conf。但是,我不确定是否可以使用表达式扩展PATH=$PATH:/whatever/path。

那么,如何通过表达式扩展设置全局默认服务环境呢?

use*_*489 -1

有几个地方可以做到这一点。

systemd 手册页并未表明您可以按照您尝试的方式附加到路径。此外,其他机制可能会替换该路径,从而从 system.conf 中清除您的值。另请注意,如果路径为空,如果您尝试以这种方式附加到路径,您将在路径中留下空目录,该目录翻译为“。” 并且将当前目录包含在路径中被认为是一个安全漏洞,因此无论如何这可能是一个坏主意。

由于您使用的是 systemd,因此您也可能使用 pam_env。该工具从 和 设置环境变量,/etc/environment并且/etc/security/pam_env.conf这些变量确实支持变量替换,但请参阅上面有关安全漏洞的注释。

您说您想为全局服务设置变量。但如果您想为 shell 设置它,您可以添加一些/etc/profile.d/对 sh、bash、zsh 和可能其他(但不是 csh)有效的内容。放置在该目录中的脚本是来源的,并且应该已经设置了路径,因此附加到该路径是安全的。但是,这可能仅适用于登录 shell。