在 Debian 上,如何根据特定存储库中的软件包审核已安装的软件包?

在 Debian 上,如何根据特定存储库中的软件包审核已安装的软件包?

我管理着多台 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 固定超过 1000 的风险,就需要对 apt 进行单独的配置,这似乎比需要的更复杂。

将来的一种可能性是设置一个私有存储库,并且只从 Debian 稳定存储库或私有存储库安装。然后,如果私有存储库中有一个软件包,则可以假定(出于审计目的)它不是从 Debian 稳定存储库安装的。只要软件包从未手动安装,这种方法就可以很好地工作。但是,对于一个简单的命令来说,设置私有存储库似乎有点过头了。

有没有更好的方法来审核软件包版本?或者更好的办法,审核软件包签名?

答案1

就像这样:

aptitude search "?installed?not(?narrow(?installed,?origin(^Debian$)?archive(^stable$)))"

使用?narrow比较包名称版本,因此上述操作将已安装的软件包名称和版本与 Debian 稳定存储库中的软件包名称和版本进行比较,然后反转匹配以查找与 Debian 稳定存储库中的版本不匹配的已安装软件包。

丹尼拉·拉德纳评论中的建议也很有帮助;我输入了 aptitude 命令的结果,以便apt-cache policy <package>查看初始搜索中出现并需要仔细查看的软件包的版本详细信息。

相关内容