首页/安全/安全加固速查/最小化安装与软件资产盘点
主机加固基线90 条

最小化安装与软件资产盘点

加固第一原则是减少存在:最小化安装、按需装包、定期清点;多余的组件就是多余的漏洞面与合规负担。

安全加固速查安全更新于 2026-10-13

减少存在是第一原则

加固的第一原则是减少存在:最小化安装、按需装包、定期清点。多装一个组件就多一份漏洞面、多一份补丁负担,也多一份合规解释成本。生产机上不应出现编译器(gcc、make)与遗留服务——离线攻击者拿不到编译器,就很难在本机现场编译提权程序。

基本信息

适用平台RHEL / CentOS 系与 Debian / Ubuntu 系
检查点已装软件清单可解释,生产机无编译器与遗留服务
风险等级中
采集命令rpm -qa 与 dpkg --get-selections
延伸场景容器环境要在镜像构建阶段控制内容

典型使用场景

  • 新系统交付前的软件面评审
  • 生产机上意外出现 gcc、make 等开发工具的排查
  • 卸载遗留服务前评估依赖影响,先做 dry-run
  • 收敛补丁与漏洞影响面,少装就少补
  • 容器镜像选择最小基础镜像

导出清单评审

导出清单评审
rpm -qa --qf '%{NAME}\t%{VERSION}\n' | sort > /tmp/pkgs.txt    # RHEL 系软件清单
dpkg --get-selections | awk '$2=="install"{print $1}' | sort > /tmp/pkgs.txt   # Debian 系软件清单
rpm -q gcc make 2>/dev/null || true    # 生产机一般不应带编译工具链
systemctl list-units --type=service --state=running --no-pager | head -20   # 盘点在运行的服务

卸载前先评估

卸载前先评估
dnf remove --assumeno <包名>   # RHEL 系先看会连带卸载哪些组件,不实际执行
apt-get remove --dry-run <包名>   # Debian 系同理,先看影响范围

盘点对象与判断

盘点对象判断处置
编译器工具链生产机是否装了 gcc、make无本地编译需求就卸载
遗留服务在运行但无人认领的服务确认后停用并卸载
非必要运行时用不到的语言运行时与中间件评估依赖后移除
容器镜像内容镜像内的包与工具从构建阶段控制,不在运行中删包
清单基线已装包清单的差异新增包需有变更记录
批量删包必须先 dry-run:包管理器的 remove 会连带卸载依赖它的组件,生产环境上误删的代价极高。
容器时代的最小化要在镜像构建阶段控制,而不是上线后进容器删包——运行中删包破坏不可变原则,重建容器就前功尽弃。

易错点

  • 直接在生产机上批量 remove 包,连带把依赖它的组件一起卸掉,动手前必须 dry-run
  • 在上线后的运行容器里删包求最小化,破坏不可变原则,应回到镜像构建阶段改
  • 只导出清单不逐项评审,没人判断每个包的归属,等于走个流程
  • 卸载服务前没确认依赖关系与业务使用情况,可能连带停掉关键功能

数据来源与参考

  • CIS Linux Benchmark:确保已安装软件最小化(1.x/2.x 相关项)
  • NIST SP 800-123:服务器安全指南(最小安装)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌