防止环境变量劫持应优先使用 /etc/environment(pam 级别,不解析 shell、不可执行命令、不受用户文件干扰),严格遵循 key=value 格式;慎用 /etc/profile 及 /etc/profile.d/*.sh,必要时设为只读并规范命名;锁定用户启动文件权限,清理可疑脚本,关键服务需运行时校验与最小化 path。

要防止环境变量被劫持,关键不是“设置全局 Profile 变量”,而是正确选择加载位置、限制写权限、避免用户级覆盖、验证执行顺序。Linux 中没有真正“不可篡改”的全局环境变量,但可通过系统级加固显著提升抗劫持能力。
优先使用 /etc/environment(PAM 级别,绕过 shell 解析)
/etc/environment 是由 PAM 的 pam_env 模块在用户登录时直接读取的纯键值文件,不经过 shell 解析,因此无法执行命令、不能引用其他变量,也不受 .bashrc/.profile 等用户文件干扰。这是最安全的全局变量注入方式。
- 格式严格:每行
KEY=VALUE,等号两侧不能有空格,不支持 $PATH:/new/bin 这类拼接 - 启用前提:确保 /etc/pam.d/common-session 中包含
session required pam_env.so(Ubuntu/Debian 默认开启;RHEL/CentOS 需手动添加) - 示例:
HTTP_PROXY=http://10.0.1.10:8080<br>LANG=en_US.UTF-8
慎用 /etc/profile 和 /etc/profile.d/*.sh
这些文件由交互式 login shell 读取,会被用户自己的 ~/.profile 或 ~/.bashrc 覆盖或修改(例如用户写 unset PATH 或 export PATH="/tmp:$PATH" 就可劫持),安全性弱于 /etc/environment。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 若必须使用,将关键变量设为只读:
export PATH="/usr/local/bin:/usr/bin:/bin"<br>readonly PATH
- /etc/profile.d/ 下的脚本按字母序执行,命名建议加数字前缀(如
01-secure-env.sh)确保早于用户自定义脚本 - 禁止在其中调用用户可控路径下的程序(如
$(whoami)或~/.config/env.sh)
锁定用户启动文件权限,阻断覆盖链
攻击者常通过篡改 ~/.bashrc、~/.profile 或 /etc/skel/ 下模板来注入恶意 export。需从源头限制写入权限:
- 对所有已有用户主目录中的启动文件运行:
chmod 644 ~/.bashrc ~/.profile ~/.bash_profilechown root:root ~/.bashrc ~/.profile(需 root 权限;普通用户无法再修改) - 清理 /etc/skel/ 中的默认启动文件,或将其设为只读,防止新建用户继承风险配置
- 检查是否存在异常的 /etc/profile.d/*.sh —— 删除非发行版自带、来源不明的脚本
运行时验证与最小化暴露
即使配置正确,仍需在关键服务中主动校验环境变量,而非盲目信任:
- 敏感服务(如 sudo、cron、systemd 服务)应显式清除或重置 PATH:
PATH="/usr/bin:/bin" exec /usr/local/bin/myapp - 用
env -i启动极简环境测试是否依赖被劫持变量:env -i PATH=/bin:/usr/bin mycommand - 定期审计:用
find /etc -name "*.sh" -path "/etc/profile.d/*" -exec grep -l "export.*PATH\|export.*LD_" {} \;查找可疑 PATH/LD_* 修改










