ตรวจสอบจำนวนอัปเดตความปลอดภัยที่รอดำเนินการใน Ubuntu


25

ให้ฉันเริ่มต้นด้วยการบอกว่าฉันถูกห้ามไม่ให้เปิดใช้งานการอัปเดตอัตโนมัติบนเซิร์ฟเวอร์ Ubuntu ของเราสำหรับทั้งความปลอดภัยและแพ็คเกจปกติ

เมื่อฉันเข้าสู่เซิร์ฟเวอร์ Ubuntu ใด ๆ ของฉันสี่ข้อความต้อนรับประกอบด้วย:

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

อย่างไรก็ตามเมื่อฉันเรียกใช้ปลั๊กอิน Nagios ที่ตรวจสอบ APT ฉันจะได้รับ:

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

ฉันจำเป็นต้องรู้วิธีการตรวจสอบอย่างถูกต้องว่ามีการปรับปรุงความปลอดภัยและการปรับปรุงปกติ เมื่อฉันทำได้ฉันวางแผนที่จะเขียนสคริปต์ Nagios ที่จะส่งคืนคำเตือนสำหรับการอัปเดตปกติที่รอดำเนินการและที่สำคัญยิ่งสำหรับการอัปเดตความปลอดภัยที่ค้างอยู่

ใครรู้วิธีตรวจจับสองเงื่อนไขนี้

คำตอบ:


12

ปลั๊กอิน Nagios /usr/lib/nagios/plugins/check_aptไม่พบการอัปเดตที่สำคัญใน Ubuntu อย่างถูกต้องเนื่องจากตรวจพบการอัปเดตที่สำคัญผ่านทางaptรวมกับการเผยแพร่การอัปเดตที่ไม่สำคัญของ Ubuntu รายละเอียดเพิ่มเติมอยู่ในข้อผิดพลาดที่นี่: https://bugs.launchpad.net/bugs/1031680

การใช้/usr/lib/update-notifier/apt-checkแทนเป็นวิธีแก้ปัญหาที่เชื่อถือได้


31

ปรากฎว่าสามารถพบจำนวนการอัพเดทปกติที่ค้างอยู่ได้โดยใช้:

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

และจำนวนของการอัปเดตความปลอดภัยที่รอดำเนินการสามารถพบได้โดยใช้:

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

ในที่สุดปลั๊กอิน Nagios ของฉันเป็นดังนี้:

#!/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

1

ทำไมไม่ใช้เพียงคำสั่ง apt-get?:

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

2
แฮ็คนี้จะไม่แยกแยะระหว่างการรักษาความปลอดภัยและการอัพเดทที่ไม่ใช่ความปลอดภัยอย่างน่าเชื่อถือ ตัวอย่างเช่นบน Ubuntu การอัปเดตความปลอดภัยจะถูกเผยแพร่ไปยังกระเป๋าอัพเดท หากกระเป๋าอัพเดทอยู่ในรายการก่อนsources.listคำแนะนำของคุณจะนำไปสู่การแจ้งเตือนการปรับปรุงความปลอดภัยที่ขาดหายไป ฉลาดจะเลือกที่จะดาวน์โหลดพวกเขาจากกระเป๋าการปรับปรุงแทนและเพื่อ grep ของคุณจะพลาดพวกเขา
Robie Basak

ปัญหาที่ระบุโดย @RobieBasak สามารถแก้ไขได้ตามคำตอบของฉันที่serverfault.com/a/856769/134053
mc0e

0

เมื่อ Nagios รายงานว่าคุณมีการอัปเดตความปลอดภัยนี่คือวิธีที่คุณได้รับรายการที่จำเป็น

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

คุณสามารถใช้คำสั่งเหล่านี้ส่งไปยัง wc -l เพื่อให้คุณนับ แต่คำตอบข้างต้นอาจมีประสิทธิภาพมากขึ้นและเหมาะสมสำหรับสคริปต์ Nagios


"-oDir" เป็นตัวพิมพ์ผิดหรือไม่!
Travis van der Font
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.