我管理着多台 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>
查看初始搜索中出现并需要仔细查看的软件包的版本详细信息。