Kiểm tra số lượng cập nhật bảo mật đang chờ xử lý trong Ubuntu


25

Hãy để tôi bắt đầu bằng cách nói rằng tôi đã bị cấm kích hoạt cập nhật tự động trên các máy chủ Ubuntu của chúng tôi, cho cả gói bảo mật và gói thông thường.

Khi tôi đăng nhập vào bất kỳ máy chủ Ubuntu nào, thông báo chào mừng có chứa thông tin này:

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

Tuy nhiên, khi tôi chạy plugin Nagios theo dõi APT, tôi nhận được:

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

Tôi cần biết cách phát hiện chính xác rằng có các bản cập nhật bảo mật đang chờ xử lý và các bản cập nhật thường xuyên. Khi tôi có thể làm điều đó, tôi dự định viết một tập lệnh Nagios sẽ trả về CẢNH BÁO cho các bản cập nhật thường xuyên đang chờ xử lý và TIÊU CHUẨN cho các bản cập nhật bảo mật đang chờ xử lý.

Bất cứ ai cũng biết làm thế nào để phát hiện hai điều kiện đó?

Câu trả lời:


12

Plugin Nagios /usr/lib/nagios/plugins/check_aptkhông phát hiện các bản cập nhật quan trọng trong Ubuntu một cách chính xác do cách nó phát hiện các bản cập nhật quan trọng thông qua aptkết hợp với cách các bản cập nhật không quan trọng của Ubuntu được xuất bản. Thông tin chi tiết có trong lỗi tại đây: https://bugs.launchpad.net/bugs/1031680

Sử dụng /usr/lib/update-notifier/apt-checkthay thế là một cách giải quyết đáng tin cậy.


31

Hóa ra số lượng cập nhật thường xuyên đang chờ xử lý có thể được tìm thấy bằng cách sử dụng:

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

Và số lượng cập nhật bảo mật đang chờ xử lý có thể được tìm thấy bằng cách sử dụng:

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

Cuối cùng, plugin Nagios của tôi như sau:

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

Tại sao không chỉ đơn giản là sử dụng lệnh apt-get?:

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

2
Hack này sẽ không đáng tin cậy phân biệt giữa cập nhật bảo mật và không bảo mật. Ví dụ, trên Ubuntu, các bản cập nhật bảo mật cũng được xuất bản vào túi cập nhật. Nếu túi cập nhật được liệt kê đầu tiên sources.list, đề xuất của bạn sẽ dẫn đến thiếu thông báo cập nhật bảo mật. apt sẽ chọn tải chúng từ túi cập nhật thay vào đó, và vì vậy grep của bạn sẽ bỏ lỡ chúng.
Robie Basak

Vấn đề được xác định bởi @RobieBasak có thể được sửa theo câu trả lời của tôi tại serverfault.com/a/856769/134053
mc0e

0

Khi Nagios đã báo cáo bạn có các cập nhật bảo mật, đây là cách bạn có được một danh sách những cái cần thiết.

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

Bạn cũng có thể sử dụng các lệnh này được đưa vào wc -l để tính cho bạn, nhưng các câu trả lời ở trên có thể hiệu quả hơn và phù hợp hơn với tập lệnh Nagios.


Là "-oDir" là một lỗi đánh máy?!
Travis van der Font
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.