登录时以 root 运行的脚本
Ubuntu、Debian 系在登录时会执行 /etc/update-motd.d/ 下的脚本,把它们的标准输出拼接成欢迎信息展示给登录者,这套机制由 PAM 的 pam_motd 模块触发。关键在于这些脚本以 root 权限运行,因此这个目录是理想的持久化位置:只要有人登录,脚本就会被执行,不需要额外的触发条件。
只读核查,不执行
核查方式是列出目录内容、按时间排序看哪些脚本是后来加进来的,再逐个读取内容确认没有下载、执行或反向连接的逻辑。重要的是不要在当前终端直接运行这些脚本——它们可能立即触发攻击者设定的动作。
基本信息
| 适用平台 | Ubuntu/Debian 系(update-motd 机制);其他发行版可能没有该目录 |
|---|---|
| 相关路径 | /etc/update-motd.d/、/etc/motd、/etc/issue、/etc/issue.net |
| 触发方式 | SSH 或本地登录时由 PAM 调用 |
| 运行权限 | 以 root 执行,影响面大 |
| 替代机制 | 其他发行版多用静态 /etc/motd 或 PAM 横幅配置 |
典型使用场景
- 主机长期被控且找不到持久化点:检查这个目录里的脚本
- 登录时出现异常提示:确认提示由哪个脚本产生
- 批量核查多台主机:比对脚本清单与预期基线
- 清理后复核:删除可疑脚本并确认登录提示恢复正常
- 建立基线:把正常脚本的名称与哈希记录下来,便于对比
核查脚本与横幅
核查脚本与横幅
# 按时间排序查看脚本,新增的脚本通常时间更近
ls -lt --time-style=long-iso /etc/update-motd.d/ | head
# 逐个查看内容,重点关注下载、执行与网络调用
head -20 /etc/update-motd.d/* 2>/dev/null
# 静态横幅与 PAM 配置
cat /etc/motd /etc/issue /etc/issue.net 2>/dev/null | head -20
grep -R 'pam_motd\|motd' /etc/pam.d/ 2>/dev/null
# 记录文件哈希作为基线,后续比对
sha256sum /etc/update-motd.d/* > /mnt/ev/motd-baseline-$(date +%Y%m%d).txt目录内常见脚本与判断
| 脚本名 | 正常作用 | 异常迹象 |
|---|---|---|
| 00-header | 显示系统标识 | 内容被替换为异常命令 |
| 10-help-text | 显示帮助信息 | 被追加额外命令 |
| 50-motd-news | 显示公告 | 指向未知外部地址 |
| 90-updates-available | 显示可更新包数 | 被替换为下载脚本 |
| 无编号的奇怪名称 | 不属于默认集合 | 新增即可疑,需逐行核对 |
不要在当前终端直接执行这些脚本进行「测试」:它们以 root 运行,可能立即触发下载与执行动作,也会刷新时间戳。
非 Debian 系主机通常没有该目录,此时应转向 /etc/motd、/etc/profile、/etc/profile.d/ 与 PAM 配置等常见登录触发点,核查思路一致:看谁以高权限在登录时执行了什么。