Как получить список обновлений безопасности в командной строке в Debian / Ubuntu


26

В инструменте GUI вы можете получить список пакетов с обновлениями безопасности. Можно ли это сделать из командной строки в Debian или Ubuntu?

Обычно я могу использовать «apt-get upgrade», который показывает мне, что обновляется, но я хотел бы знать, какие из них являются обновлениями безопасности.


только для Ubuntu 14.04, 16.04 и 18.04 LTS: askubuntu.com/a/1128270/92504
Angel

Ответы:


5

Используйте приложение для автоматического обновления.

sudo unattended-upgrade

Это позволяет автоматически устанавливать только обновления безопасности, но при необходимости вы можете вызывать их вручную.


Мне нравится этот ответ, поскольку вы на самом деле подумали о том, что я, возможно, пытаюсь сделать, и автоматическое обновление - это то, что я установил сегодня, чтобы попробовать.
Стивен Полгер

13
Это на самом деле не отвечает на вопрос, хотя.
reinierpost

4
Если это ответ, то вопрос был неправильным. По крайней мере, он эволюционировал и должен быть отредактирован соответствующим образом и / или помечен как дубликат askubuntu.com/questions/194/…
mc0e

39
apt-get upgrade -s | grep -i security

... это то, что плагин Nagios check-apt использует для подсчета ожидающих обновлений безопасности, что похоже на то, что вы ищете.


Но он не может найти обновление безопасности bash для shellshock?
linjunhalida

3
Это дает ложные срабатывания для пакетов с именем «security» в имени, таких как «xml-security-c-utils», «debian-security-support», «modsecurity-crs», «node-security» и т. Д.
Shnatsel

2
@Snatsel для проверки командной строки, это очень просто ... вы можете легко увидеть, является ли это ложным срабатыванием или нет. Также, если вы знаете текущее имя вашей ОС, вы можете написать, grep -i xenial-securityи это должно уменьшить ложное срабатывание почти до нуля.
Алексис Вилке

1
@ Шнацель так grep Debian-Securityбыло бы лучшим решением?
Пабло А

Это полезно для получения количества regular;securityдоступных обновлений. Однако -pвозможность перечисления имен пакетов, доступных для обновления, не различает обычные обновления и обновления безопасности (по крайней мере, 16.04) ... так что, насколько я могу судить, это нереальный способ получить список доступных обновлений безопасности.
mattpr

10

В Ubuntu у вас должна быть возможность использовать apt-check, именно она заполняет ваш motd количеством доступных обновлений безопасности.


2
Я не вижу этого в Debian или Ubuntu.
Стивен Полгер

5
apt-check находится в / usr / lib / update-notifier /. Попробуйте / usr / lib / update-notifier / apt-check --human-readable для простого сообщения.
u2702

2
Я не уверен, что показывает что-нибудь полезное. Чтобы получить список, вам нужно добавить --package-names( -p), но тогда он, кажется, не делает различий между регулярными обновлениями и обновлениями безопасности.
Auspex

5

Вы можете получить список с помощью этой команды:

sudo unattended-upgrade --dry-run -d 2> /dev/null | grep 'Checking' | awk '{ print $2 }'

2
Вы отправили ВСЕ выходные данные, /dev/nullчтобы вы ничего не искали!
Auspex

Кажется, это не работает с верными. он показывает все пакеты, которые требуют обновления.
Ужасная точка с запятой

Я предполагаю, что это покажет вам, что собирается делать автоматическое обновление, и если вы настроите его только для обновления безопасности, возможно, этот рецепт сработает. Ответ, однако, в лучшем случае крайне неполный.
mc0e

Сегодня я решил эту необходимость, изменив немного apt-check. Проверьте эту суть: gist.github.com/thesp0nge/94f9d336a081a3fefba6ca61d787a28b
Паоло Перего

3

У меня есть измененная версия, update-notifierкоторая принимает дополнительный переключатель: --security-package-namesкоторый выводит только имена пакетов, связанных с безопасностью. У меня это как суть (пока я не создам запрос на слияние в соответствующем проекте в панели запуска). До этого его можно запустить следующим образом:

Бег

curl -s https://gist.githubusercontent.com/ahmadnazir/c2444d6b09fd7bb4963a13bc577d92a3/raw/0231b94a4e46abe0a5959de5f84feda76ad2eb9d/apt-check.py \
  | python /dev/stdin --security-package-names \
  | column -t -s , \
  | sort

Выход

Это дает вывод формата: имя пакета , установленная версия и версия-кандидат :

...
thunderbird                          1:38.6.0+build1-0ubuntu0.14.04.1     1:38.8.0+build1-0ubuntu0.14.04.1
thunderbird-gnome-support            1:38.6.0+build1-0ubuntu0.14.04.1     1:38.8.0+build1-0ubuntu0.14.04.1
thunderbird-locale-en                1:38.6.0+build1-0ubuntu0.14.04.1     1:38.8.0+build1-0ubuntu0.14.04.1
thunderbird-locale-en-us             1:38.6.0+build1-0ubuntu0.14.04.1     1:38.8.0+build1-0ubuntu0.14.04.1
...

3

На основании ответа Фабрицио Реджини выше.

Для 12.04 / Precise:

sudo unattended-upgrade --dry-run -d 2>&1 /dev/null | grep 'Checking' | grep security | awk '{ print $2 }'

Для 14.04 / Trusty:

sudo unattended-upgrade --dry-run -d | grep 'Checking' | grep security | awk '{ print $2 }'

1

И вариант сработал после прочтения других ответов - я полагаю, что это поможет удовлетворить ложную положительную проблему и быть достаточно легким.

sudo unattended-upgrade --dry-run -d 2>/dev/null  | awk '/Checking/ && /archive:..*-security. / {print $2}'

0

Я полагаю, что Ответ на вопрос, который задает ФП, состоит в том, как увидеть список пакетов, а не как устанавливать только пакеты безопасности. Опираясь на ответ @topdog Вы должны использовать: /usr/lib/update-notifier/apt-check -p Где -pфлаг обозначает пакеты


1
в нем перечислены все пакеты, а не только обновления безопасности
confiq

apt-check в Debian Jessie недоступен. Он остается на обновленных системах Wheezy, но у новых установок больше нет общих уведомлений об обновлениях. Вы знаете альтернативу?
январь

@Jan это все еще там, как часть update-notifier-common
Auspex

@Auspex Этот пакет больше не существует в Джесси. Есть только update-notifierустаревший переходный пакет для gnome-packagekit. Смотрите здесь .
Ян

1
@jan Извините, я взял слово Debian для этого. Я искал файл, packages.debian.org/… и он сказал мне You have searched for files named apt-check in suite jessie, all sections, and all architectures. Found 1 results., но затем, когда вы на самом деле нажимаете на ссылку для этого результата, он говорит вамPackage not available in this suite.
Auspex

0

Эти две команды выплюнут список. Труба к wc -l, чтобы увидеть, сколько позади. ;-)

grep security /etc/apt/sources.list > /tmp/security.list
sudo apt-get upgrade -oDir::Etc::Sourcelist=/tmp/security.list -s

Все еще действует для старых дистрибутивов или если у вас отключены обновления репозиториев, но безопасность включена:

sudo apt-get upgrade -s| grep ^Inst |grep Security 

Быть осторожен. Если вы сгенерируете /tmp/security.list таким образом, работая от имени пользователя root, то вы уязвимы для атаки, основанной на символических ссылках.
mc0e

Я не могу получить этот подход (первый блок кода) в Ubuntu 14.04. Эта -oDir::Etc::Sourcelistопция не отключает стандартный набор репозиториев.
mc0e

0

Я думаю, что ответ @smin - это в основном хороший подход, но он немного не вписывается в регулярное выражение, как отмечает @Shnatsel.

Как насчет этого:

apt-get upgrade -q --dry-run \
| perl -ne 'm/^Inst (\S+) \S+ \(([^\)]+) Debian-Security:8/ && print "$1-$2\n"'

Здесь перечислены имена пакетов вместе с версиями, которые вы хотите установить. Вы можете убрать -$2выписку из печати, если не хотите, чтобы там были версии.

[Возможно, это можно сделать чуть легче, используя awk вместо perl]


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.