首页/安全/取证与溯源速查/全局登录脚本(/etc/profile.d)
Linux 取证135 条

全局登录脚本(/etc/profile.d)

登录时会执行 /etc/profile.d/*.sh,写入这里的命令对所有用户生效,是隐蔽性较高的持久化位置。

取证与溯源速查安全更新于 2026-10-13

全局 profile 脚本

/etc/profile.d/ 下的脚本会在登录 shell 启动时被 /etc/profile 按文件名顺序逐个 source,所以这里的改动影响全部用户,影响面大于单个用户家目录里的文件。它既是发行版放环境变量与补全脚本的地方,也是全局持久化的常用落点。

基本信息

目录/etc/profile.d/,脚本通常以 .sh 结尾
触发方式/etc/profile 在登录 shell 启动时按文件名顺序加载
生效范围所有用户的登录 shell,非交互 shell 未必加载
相关文件/etc/profile、/etc/bashrc、zsh 的 zprofile
观察点mtime、脚本内容、可执行位与文件属主
权限要求读取与修改都需要 root

典型使用场景

  • 排查影响全系统的持久化脚本
  • 核对全局环境变量是否被改动
  • 分析登录后命令行为异常的原因
  • 与用户级启动文件对照确定生效范围
  • 系统级持久化面的整体盘点

最小示例

最小示例
ls -lt --time-style=long-iso /etc/profile.d/ | head      # 按时间排序看最近改动
grep -Rn 'curl\|wget\|base64\|/tmp/\|/dev/shm/' /etc/profile.d/   # 高风险特征
cat /etc/profile | grep -n 'profile.d'                   # 确认加载逻辑
stat -c '%n mtime=%y ctime=%z' /etc/profile.d/*.sh | head
lsattr -R /etc/profile.d/ 2>/dev/null | head             # 是否存在不可变属性
find /etc/profile.d -maxdepth 1 -type f -printf '%M %u %p\n' | head

观察项与信号

观察项含义异常信号
文件时间戳最后一次改动时刻与包升级时间或运维窗口不符
文件属主正常由包管理安装属主被改为普通账号
内容特征环境变量与补全脚本含下载、解码或重定向语句
命名顺序按名称排序加载前缀被改动以调整执行顺序
属性位是否被加锁基线之外出现不可变属性
只有登录 shell 会加载这些脚本,非交互 shell 通常不读它们;判断影响范围时要先分清 shell 类型。
文件名前缀决定加载顺序,调整前缀可以让脚本先于或后于其它脚本执行,排查时注意文件名是否被改过。
排查期间不要对这些脚本执行 source 或直接运行;阅读内容与计算哈希即可,避免重新触发持久化动作。

易错点

  • 只做关键字搜索:混淆过的脚本不含明显关键字,需结合时间戳与属主变化一起判断
  • 把包管理安装的文件当可疑:发行版更新会刷新同目录脚本,应先与包校验结果比对
  • 忽略加载顺序:前缀改名会改变执行次序,只看内容会漏掉这类改动
  • 在排查机上手动 source:可能重新触发持久化动作,破坏现场

数据来源与参考

  • GNU Bash 手册(login shell 启动文件)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌