如何在 debian 中为所有(nologin 和 login shell)用户添加环境变量

如何在 debian 中为所有(nologin 和 login shell)用户添加环境变量

如何设置环境变量全部用户即使是没有登录的

特别是,我想设置一个 env 变量,其中包含将在用户脚本和 Web 服务器中使用的路径(www-data 是 nologin shell 用户,然后无法从 PAM 的 /etc/environment 或 /etc/profile 中受益,类似)

答案1

假设您使用默认的 init 系统:

https://www.freedesktop.org/software/systemd/man/systemd-system.conf.html

默认环境=

设置传递给所有已执行进程的管理器环境变量。获取以空格分隔的变量赋值列表。有关环境变量的详细信息,请参阅environ(7)。

例子:

DefaultEnvironment="VAR1=word1 word2" VAR2=word3 "VAR3=word 5 6"

设置三个变量“VAR1”、“VAR2”、“VAR3”。

这里的“所有执行的进程”是指 systemd 执行的所有进程。一般来说,所有进程要么由 systemd 启动,要么是该进程的子进程。但请小心这一点,否则您可能必须使用等来恢复系统init=/bin/sh:-)。

某些进程可能会清除其环境变量,或进行取代这些环境变量的分配。我认为用户登录(PAM?)将是一个重要的例子。

正如您所说,您可以使用pam_env/覆盖所有 PAM 会话/etc/environment

答案2

如果您的意思是所有用户 - 同一用户,启动服务,登录和不登录 - 您应该通过 systemd 设置变量。在我的系统上,我尝试编辑$HOME/.profile,但这仅影响登录用户。我将展示我的 zabbix-agent 和 PATH 变量的示例。

EnvironmentFile在默认服务单元中使用参数的做法。在您的单元文件中搜索此条目并编辑/创建指定的文件。您可以在 的输出中找到单元文件的名称systemctl status zabbix-agent。以格式指定变量VARIABLE=value

EnvironmentFile如果您的单位中没有,那么您可以覆盖默认的 systemd 单位。

systemctl edit zabbix-agent.service

然后写

[Service]
Environment="PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/pgsql-9.6/bin"

相关内容