与这里的问题类似,https://serverfault.com/questions/387111/inventory-or-audit-installed-linux-software,我想了解有关应在各种 Linux/Unix 发行版上运行以审核已安装软件的命令的想法。它至少应涵盖以下用例:
- 从软件包安装的软件
- 从源安装的软件
- 安装到未知或意外位置的软件
此外,它应该可以在 CentOS/RedHat、SuSE 和 Macintosh 操作系统上运行。我考虑过的与获取安装的软件有关的一些想法包括:但是,我不确定它们有多实用。
- 列出正在运行的进程并从输出中进行推断
- 列出正在侦听或打开的端口并从输出中进行推断
- 运行各种 CLI 命令并尝试理解输出
- 从本机包管理器执行转储或列出已安装的包
- 执行 find 命令来查找特定文件或文件名,甚至可能是配置文件以假设某些软件存在
最终目标是拥有可使用的命令并将结果输出存储到文件中。我将使用它在各种机器上运行,无论是在机器本地还是通过 SSH,进行审计、记录保存并确定哪些主机容易受到特别公布的漏洞的影响。
答案1
CentOS/RedHat 和 SuSE 有一个共同点:它们都使用 RPM 作为软件包格式。因此要做的一件事是将rpm -Va
结果存储为基线并稍后进行比较(如果您想检查是否有不需要的更改)。
这是相当文件密集型的,因为每个 rpm 的每个文件都会被检查。
仅列出已安装的内容 -rpm -qa
在 hr-resources 软件安装树上使用或执行相应的 snmp-bulkwalk(如果在 mac 上启用了 snmp,甚至应该在 mac 上工作)。
另一个想法是使用 HIDS(基于主机的入侵检测系统) -例如aide
,,,...fam
samhain
至于正在运行的进程 - 的输出netstat -tulnp
很有趣。您可以解析哪些进程关联。
手动安装的部分(“来自源”)很难覆盖。恕我直言,最好的方法是制定一项禁止此类事情的政策(至少在生产中)。或者,必须强制要求这些程序必须在库存数据库中手动注册。