系统软件指纹校验核心是保障启动链、权限管理、日志审计等关键路径的可信基线,通过rpm -v、gpg签名验证、aide监控及权限审计四层机制实现。

系统软件指纹校验的核心目标是确认关键二进制文件、配置和RPM包未被篡改,防止攻击者通过替换合法包植入后门或提权代码。重点不在“检测所有变化”,而在于守住启动链、权限管理、日志审计等关键路径上的可信基线。
用rpm -V做基础完整性校验
rpm -V(verify)可比对已安装包的文件元信息与RPM数据库记录是否一致,包括大小、权限、MD5/SHA256摘要、属主、属组、修改时间等。执行时需注意:
- 仅校验由RPM安装且未被标记为%config或%ghost的文件;配置文件默认跳过校验,如需检查需加--noconfig
- 输出中8字符标识位含义:S=Size, M=Mode, 5=MD5/SHA256, D=Device, L=Link, U=User, G=Group, T=Mtime;例如“S.5....T.”表示文件大小、哈希值、修改时间三项不匹配
- 建议定期导出基线:rpm -Va > /var/log/rpm-verify-baseline.log,后续对比用diff或awk过滤异常行
启用RPM内置GPG签名验证
RHEL/CentOS/Fedora等发行版默认启用GPG校验,但需确保密钥导入正确且安装过程未被绕过:
- 检查当前启用的密钥:rpm -q gpg-pubkey --qf '%{NAME}-%{VERSION}-%{RELEASE}\t%{SUMMARY}\n'
- 安装新包时强制校验:rpm -Uvh --checksig package.rpm;若提示"NOKEY",说明对应公钥未导入,需先rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-*
- 禁止禁用签名检查:避免在yum/dnf配置中设置gpgcheck=0,生产环境必须保持为1
结合文件完整性监控(AIDE或samhain)补充RPM盲区
RPM verify无法覆盖手动编译安装、临时脚本、动态加载模块等场景,需部署独立的文件完整性工具:
- AIDE配置示例(/etc/aide.conf)中应包含关键路径:/bin/ NORMAL; /sbin/ NORMAL; /usr/bin/ NORMAL; /usr/sbin/ NORMAL; /etc/ p+i+n+u+g+s+b+acl+selinux+xattrs+sha256
- 首次初始化数据库后,建议将aide.db离线备份至只读介质,并定时(如每日凌晨)运行aide --check,结果通过syslog或邮件告警
- 注意排除高频变更目录(如/var/log、/proc),否则误报率高;但/etc/shadow、/etc/passwd等必须纳入监控
限制RPM操作权限并审计高危行为
防止恶意替换的本质是控制“谁能在何时以何种方式修改包”:
- 禁用root以外用户执行rpm命令:设置chmod 700 /usr/bin/rpm,或通过sudoers限制仅特定运维账号可用
- 开启yum/dnf操作审计:auditctl -w /usr/bin/yum -p x -k pkgmgr,配合ausearch检索执行者、参数、时间戳
- 禁止直接rpm -Uvh安装非官方源包;统一通过dnf/yum仓库管理,启用repo_gpgcheck=1和gpgkey=file:///...确保仓库元数据可信










