Назад | Перейти на главную страницу

Как точно определить, какие пакеты имеют обновления безопасности в Ubuntu?

Я пытаюсь получить список пакетов, которые помечены как "обновления безопасности"

Моя базовая система - Ubuntu 14.04.

Например, в Ubuntu 14.04 есть скрипт, который перечислит количество доступных обновлений. Его использует динамический motd.

/usr/lib/update-notifier/apt-check

Выполнение этого без аргументов дает вывод через точку с запятой в stderr, например:

$ /usr/lib/update-notifier/apt-check
60;11   <-- (this is actually standard error)

Для этого скрипта есть флаги "читабельные" и "имена пакетов". Большой! Но «имена пакетов» просто выгружают обновляемые пакеты, они не помещаются в стопки безопасности / не безопасности.

Как узнать, что находится в корзине «обновления безопасности»?

Я пробовал такие вещи, как:

apt-get -s dist-upgrade | grep "^Inst" | grep -i security

Этот мне не подходит.

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

Обновить

Я закончил тем, что модифицировал скрипт Python "/ usr / lib / update-notifier / apt-check" и в основном добавил вывод для печати деталей пакета всякий раз, когда этот скрипт выполнял проверку с помощью функции "isSecurityUpgrade ()". (Подробности см. В этом сценарии)

РЕДАКТИРОВАТЬ: И мои извинения за то, что не спрашивали в комментариях, но я слишком новичок и у меня нет репутации.

Если вы ищете только те, которые поступают из репозиториев безопасности, я использую приведенный ниже код с cron, чтобы отправлять мне электронные письма раз в неделю с наших неконтролируемых серверов.

#!/bin/bash

#-------------------------------------------------------------------------------------------------#
#- Name....: checkSecurityupdates.sh
#- Notes...:
#-------------------------------------------------------------------------------------------------#

# create fresh securities file each run
grep "-security" /etc/apt/sources.list | sudo grep -v "#" > /etc/apt/security.sources.list
echo "created security specific source list"


# Create the security file list
echo 'n' | apt-get upgrade -o Dir::Etc::SourceList=/etc/apt/security.sources.list >> /root/securities-to-update.txt
echo "created list of security updates"



# What's the mimetype
get_mimetype(){
  # warning: assumes that the passed file exists
  file --mime-type "$1" | sed 's/.*: //'
}


# some variables

from="SecUpdates-Report@example.com"
to="monitor-this-mailbox@example.com"
subject=`hostname`
boundary="ZZ_/afg6432dfgkl.94531q"
body="Please see attached"
declare -a attachments
attachments=( "securities-to-update.txt" )

# Build headers
{

printf '%s\n' "From: $from
To: $to
Subject: $subject
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary=\"$boundary\"

--${boundary}
Content-Type: text/plain; charset=\"US-ASCII\"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

$body
"

# now loop over the attachments, guess the type
# and produce the corresponding part, encoded base64
for file in "${attachments[@]}"; do

  [ ! -f "$file" ] && echo "Warning: attachment $file not found, skipping" >&2 && continue

  mimetype=$(get_mimetype "$file")

  printf '%s\n' "--${boundary}
Content-Type: $mimetype
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=\"$file\"
"

  base64 "$file"
  echo
done

# print last boundary with closing --
printf '%s\n' "--${boundary}--"

} | sendmail -t -oi   
echo "sent security updates list"



# cleanup security files
rm /etc/apt/security.sources.list
rm /root/securities-to-update.txt