我管理着许多 Debian 服务器,通常会跟踪 Debian 稳定存储库,但偶尔会从 Debian 测试存储库或第三方来源安装。出于审计目的,在每台机器上,对于当前安装的所有软件包,我想将已安装的软件包版本与特定存储库(即 Debian 稳定存储库)中的软件包版本进行比较。
使用 aptitude 搜索模式,我可以识别 Debian 稳定存储库中可用或不可用的已安装软件包:
aptitude search "?installed?origin(Debian)?archive(stable)"
aptitude search "?installed?not(?origin(Debian)?archive(stable))"
但是对于 Debian 稳定存储库中可用的软件包,我无法确定安装的版本是否与存储库中的版本匹配。
我想可能可以使用 apt pinning 强制降级:
Package: *
Pin: release n=stable, o=Debian
Pin-Priority: 1001
然后使用空运行模式检查哪些包会受到影响:
apt-get update
apt-get --dry-run upgrade
但是要降低使用 apt pinning 超过 1000 个的风险,需要对 apt 进行单独配置,这似乎比需要的复杂得多。
未来的一种可能性是建立一个私有存储库,并且只从 Debian 稳定存储库或私有存储库安装。然后,如果可以从私有存储库获得一个包,则可以假设(出于审计目的)它没有从 Debian 稳定存储库安装。只要从不手动安装软件包,它就可以很好地工作。但是对于一个简单的命令来说,设置一个私有存储库似乎有点矫枉过正。
有没有更好的方法来审核包版本?或者更好的是,审计包签名?
像这样:
Using
?narrow
比较软件包名称和版本,因此上面将已安装的软件包名称和版本与 Debian 稳定存储库中的软件包名称和版本进行比较,然后反转匹配以查找与 Debian 稳定存储库中的版本不匹配的已安装软件包。Danila Ladner在评论中的建议也很有帮助;我将 aptitude 命令的结果输入到
apt-cache policy <package>
,以便查看在初始搜索中出现并需要仔细查看的包的版本详细信息。