Debian

在 Debian 上,如何根據特定儲存庫中的軟體包審核已安裝的軟體包?

  • October 17, 2013

我管理著許多 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 穩定儲存庫安裝。只要從不手動安裝軟體包,它就可以很好地工作。但是對於一個簡單的命令來說,設置一個私有儲存庫似乎有點矯枉過正。

有沒有更好的方法來審核包版本?或者更好的是,審計包簽名?

像這樣:

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

Using?narrow比較軟體包名稱版本,因此上面將已安裝的軟體包名稱和版本與 Debian 穩定儲存庫中的軟體包名稱和版本進行比較,然後反轉匹配以查找與 Debian 穩定儲存庫中的版本不匹配的已安裝軟體包。

Danila Ladner在評論中的建議也很有幫助;我將 aptitude 命令的結果輸入到apt-cache policy <package>,以便查看在初始搜尋中出現並需要仔細查看的包的版本詳細資訊。

引用自:https://serverfault.com/questions/541978