Я управляю несколькими серверами 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$)))"
С помощью ?narrow
сравнивает имена пакетов и версий, поэтому в приведенном выше примере сравниваются имена и версии установленных пакетов с именами и версиями пакетов из стабильного репозитория Debian, а затем инвертируется соответствие, чтобы найти установленные пакеты, которые не соответствуют версии в стабильном репозитории Debian.
Данилы Ладнера предложение из комментариев также было полезным; Я передал результаты команды aptitude в apt-cache policy <package>
чтобы увидеть подробную информацию о версиях пакетов, которые были обнаружены при первоначальном поиске и нуждались в более внимательном рассмотрении.