一个 Ansible 操作手册,用于在 Debian/Ubuntu 和 RHEL/Rocky/AlmaLinux 系统上应用和回滚 CVE-2026-31431 (AF_ALG) 内核模块缓解措施。
本操作手册通过禁用易受攻击的 algif_aead 内核模块来缓解 CVE-2026-31431:
grubby 添加内核 initcall 黑名单参数⚠️ 重要提示:本操作手册不会自动重启您的服务器。当需要重启时,它会显示提醒消息,以便运维人员在维护窗口内安排重启。
examples/ 目录中提供了示例配置文件:
# 复制示例清单
cp examples/inventory/hosts.ini inventory/hosts.ini
# 复制示例 ansible 配置(可选)
cp examples/ansible.cfg ansible.cfg
有关详细的自定义说明,请参阅 examples/README.md。
使用您的服务器详细信息编辑 inventory/hosts.ini:
[servers]
server1.example.com
server2.example.com ansible_host=192.168.1.50
[servers:vars]
ansible_user=admin
ansible_become=true
ansible all -m ping
ansible-playbook mitigation-playbook.yaml
要将缓解措施应用到清单中的所有主机:
ansible-playbook mitigation-playbook.yaml
要应用到特定主机或组:
ansible-playbook mitigation-playbook.yaml --limit webservers
要回滚(移除)缓解措施:
ansible-playbook mitigation-playbook.yaml -e "rollback=true"
或使用 rollback 标签:
ansible-playbook mitigation-playbook.yaml --tags rollback -e "rollback=true"
要移除已弃用的 systemd drop-in 文件(如果从旧版本的此缓解措施迁移而来):
ansible-playbook mitigation-playbook.yaml -e "run_systemd_cleanup=true"
TASK [CVE-2026-31431 Summary (Debian)] ****************************************
ok: [server1] => {
"msg": [
"===== CVE-2026-31431 SUMMARY — server1 =====",
"Action: apply",
"Module loaded (pre): False",
"Module loaded (post): False",
"Reboot required: False"
]
}
TASK [Remind operator to reboot (RHEL)] ****************************************
ok: [server2] => {
"msg": "REMINDER: Kernel args changed. Reboot required to activate mitigation."
}
TASK [CVE-2026-31431 Summary (Red Hat)] ****************************************
ok: [server2] => {
"msg": [
"===== CVE-2026-31431 SUMMARY — server2 =====",
"Action: apply",
"Kernel arg active (pre): False",
"Kernel arg active (post): False",
"Reboot required: True"
]
}
TASK [Remind to reboot if required (Red Hat)] **********************************
ok: [server2] => {
"msg": "REMINDER: A reboot is required to activate/deactivate the mitigation on this Red Hat-based host."
}
| 操作系统系列 | 需要重启的情况 | 行为 |
|---|---|---|
| Debian/Ubuntu | 模块"正在使用"且无法卸载 | 仅提醒 |
| RHEL/Rocky/Alma | Grubby 对内核参数进行了更改 | 仅提醒 |
本操作手册设计为绝不自动重启,以便运维人员完全控制维护窗口。
mitigation - 仅运行应用缓解措施任务rollback - 仅运行回滚任务systemd-cleanup - 仅运行 systemd 清理任务示例:
# 仅运行缓解措施任务
ansible-playbook -i inventory/hosts.ini mitigation-playbook.yaml --tags mitigation
# 仅运行回滚任务
ansible-playbook -i inventory/hosts.ini mitigation-playbook.yaml --tags rollback -e "rollback=true"
运行操作手册(并在提示时重启)后,验证缓解措施是否已生效:
# 检查模块是否已被列入黑名单
cat /etc/modprobe.d/disable-algif.conf
# 检查模块是否已加载(应无输出)
lsmod | grep algif_aead
# 检查内核参数是否存在
grep initcall_blacklist /proc/cmdline
# 应输出类似内容:
# ... initcall_blacklist=algif_aead_init ...
MIT 许可证 - 详情请参阅 LICENSE 文件
欢迎贡献!请提交 issue 和 pull request。
本操作手册的创建参考了以下来源:
本操作手册按原样提供。在应用到生产系统之前,请务必在您的环境中进行充分测试。作者不对因使用本操作手册而导致的任何系统损坏或停机负责。
| 变量 | 默认值 | 描述 |
|---|
rollback | false | 设置为 true 以回滚缓解措施 |
run_systemd_cleanup | false | 设置为 true 以移除已弃用的 systemd drop-in |
target_hosts | all | 将执行限制到特定主机或组 |
mitigation_serial | 25% | 滚动执行的批次大小 |