Periksa jumlah pembaruan keamanan yang tertunda di Ubuntu

25

Biarkan saya mulai dengan mengatakan saya telah dilarang untuk mengaktifkan pembaruan otomatis pada server Ubuntu kami, untuk keamanan dan paket reguler.

Ketika saya masuk ke salah satu dari empat server Ubuntu saya, pesan selamat datang berisi ini:

39 packages can be updated.
26 updates are security updates.

Namun, ketika saya menjalankan plugin Nagios yang memantau APT, saya mendapatkan:

% /usr/lib/nagios/plugins/check_apt
APT WARNING: 33 packages available for upgrade (0 critical updates). 

Saya perlu tahu cara mendeteksi dengan benar bahwa ada pembaruan keamanan yang tertunda, dan pembaruan rutin. Setelah saya dapat melakukannya, saya berencana untuk menulis skrip Nagios yang akan mengembalikan PERINGATAN untuk pembaruan rutin yang tertunda, dan KRITIS untuk pembaruan keamanan yang tertunda.

Adakah yang tahu cara mendeteksi kedua kondisi itu?

Mak Kolybabi
sumber

Jawaban:

12

Plugin Nagios /usr/lib/nagios/plugins/check_apttidak mendeteksi pembaruan kritis di Ubuntu dengan benar karena cara mendeteksi pembaruan kritis melalui aptkombinasi dengan bagaimana pembaruan non-kritis Ubuntu dipublikasikan. Rincian lebih lanjut ada di bug di sini: https://bugs.launchpad.net/bugs/1031680

Penggunaan /usr/lib/update-notifier/apt-checksebaliknya adalah solusi yang dapat diandalkan.

Robie Basak
sumber
31

Ternyata jumlah pembaruan reguler yang tertunda dapat ditemukan menggunakan:

/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 1

Dan jumlah pembaruan keamanan yang tertunda dapat ditemukan menggunakan:

/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 2

Pada akhirnya, plugin Nagios saya adalah sebagai berikut:

#!/bin/sh
#
# Standard Nagios plugin return codes.
STATUS_OK=0
STATUS_WARNING=1
STATUS_CRITICAL=2
STATUS_UNKNOWN=3

# Query pending updates.
updates=$(/usr/lib/update-notifier/apt-check 2>&1)
if [ $? -ne 0 ]; then
    echo "Querying pending updates failed."
    exit $STATUS_UNKNOWN
fi

# Check for the case where there are no updates.
if [ "$updates" = "0;0" ]; then
    echo "All packages are up-to-date."
    exit $STATUS_OK
fi

# Check for pending security updates.
pending=$(echo "${updates}" | cut -d ";" -f 2)
if [ "$pending" != "0" ]; then
    echo "${pending} security update(s) pending."
    exit $STATUS_CRITICAL
fi

# Check for pending non-security updates.
pending=$(echo "${updates}" | cut -d ";" -f 1)
if [ "$pending" != "0" ]; then
    echo "${pending} non-security update(s) pending."
    exit $STATUS_WARNING
fi

# If we've gotten here, we did something wrong since our "0;0" check should have
# matched at the very least.
echo "Script failed, manual intervention required."
exit $STATUS_UNKNOWN
Mak Kolybabi
sumber
1

Mengapa tidak hanya menggunakan perintah apt-get ?:

apt-get -s dist-upgrade | grep "^Inst" | grep -i security | wc -l
Matías
sumber
2
Peretasan ini tidak akan secara andal membedakan antara pembaruan keamanan dan non-keamanan. Misalnya, di Ubuntu, pembaruan keamanan juga diterbitkan ke kantong pembaruan. Jika kantong pembaruan terdaftar pertama kali sources.list, saran Anda akan menyebabkan pemberitahuan pembaruan keamanan yang hilang. apt akan memilih untuk mengunduhnya dari kantong pembaruan, dan karenanya grep Anda akan melewatkannya.
Robie Basak
Masalah yang diidentifikasi oleh @RobieBasak dapat diperbaiki sesuai jawaban saya di serverfault.com/a/856769/134053
mc0e
0

Setelah Nagios melaporkan Anda memiliki pembaruan keamanan, inilah cara Anda mendapatkan daftar mana yang diperlukan.

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

Anda juga bisa menggunakan perintah ini yang disalurkan ke wc -l untuk memberi Anda hitungan, tetapi jawaban di atas mungkin lebih efisien dan sesuai untuk skrip Nagios.

flickerfly
sumber
Apakah "-oDir" salah ketik?
Travis van der Font