Làm thế nào khẩn cấp là một *** Yêu cầu khởi động lại hệ thống *** để bảo mật?


56

Để tìm hiểu một chút về quản trị máy chủ, tôi đã thiết lập một máy chủ Ubuntu 14.04 đơn giản mà tôi điều hành một trang web cá nhân. Tôi đã thiết lập nó để tự động cài đặt các bản cập nhật bảo mật, nhưng bỏ qua các bản cập nhật khác. Điều này dường như làm việc khá tốt. Thỉnh thoảng tôi nhận được một tin nhắn khi đăng nhập vào máy chủ (với ssh) nói:

*** System restart required ***

Lần này, tôi đơn giản khởi động lại Ubuntu và tất cả đều ổn. Điều này là tốt bởi vì nó là một trang web cá nhân đơn giản. Điều tôi băn khoăn là, làm thế nào điều này hoạt động cho máy chủ web sẽ tăng 99.9999etc% thời gian? Có phải họ chỉ đơn giản là không khởi động lại và có nguy cơ bảo mật bị vi phạm vì các bản cập nhật bảo mật không được cài đặt (mà tôi không thể tưởng tượng được)? Hay họ coi thời gian chết là điều hiển nhiên (điều mà tôi cũng không thể tưởng tượng được)?

Tôi nên xử lý việc này như thế nào nếu đây là một máy chủ sản xuất rất quan trọng mà tôi muốn theo kịp và chạy? Tất cả các lời khuyên đều được chào đón!

[EDIT] Tôi biết tôi có thể làm cat /var/run/reboot-required.pkgsđể liệt kê các gói gây ra khởi động lại. Lệnh hiện mang lại như sau:

linux-image-3.13.0-36-generic
linux-base
dbus
linux-image-extra-3.13.0-36-generic
linux-base

nhưng làm thế nào để tôi biết nếu các bản cập nhật là những điều nhỏ nhặt về việc tôi có lỗ hổng bảo mật nghiêm trọng hay không nếu tôi không khởi động lại?

[EDIT2] Được rồi, giờ tôi đã kết hợp các lệnh tôi thấy hữu ích thành một:

xargs aptitude changelog < /var/run/reboot-required.pkgs | grep urgency=high

Nếu điều này không tạo ra bất cứ điều gì, dường như không có vấn đề bảo mật với mức độ khẩn cấp cao.

Một câu hỏi cuối cùng: là low, mediumhighcác khả năng khẩn cấp duy nhất, hoặc có bất kỳ giống như ví dụ criticalhay extremelyimportantkhông?


Tôi không hiểu câu hỏi. Các trang web có lưu lượng truy cập lớn hơn chỉ đơn giản là lên lịch thời gian chết này trong một khoảng thời gian với lưu lượng truy cập ít hơn. Làm thế nào khẩn cấp nó phụ thuộc vào những gì được cập nhật chính xác.
Ramhound

14
Tôi tự hỏi có bao nhiêu người đến đây vì họ thấy câu hỏi trong danh sách "Câu hỏi về mạng nóng" và tự hỏi những gì các nhà thám hiểm là ... * giơ tay *
David Richerby

6
@Ramhound: Ehm, không, họ chuyển sang một máy chủ thứ cấp trong suốt thời gian bảo trì.
Cuộc đua nhẹ nhàng với Monica

1
Trả lời câu hỏi cuối cùng: Tôi có ý định lọc ra mức thấptrung bình và xem xét tất cả các cấp độ khác / chưa biết khẩn cấp: | grep 'urgency=' | egrep -v '=(low|medium)'
KajMagnus

Câu trả lời:


45

Đây không phải là câu trả lời đơn giản vì nó phụ thuộc vào các bản cập nhật được thực hiện. Nếu kernel có vấn đề bảo mật nghiêm trọng thì tốt nhất là khởi động lại càng sớm càng tốt. Nếu kernel chỉ có một số sửa chữa nhỏ thì việc khởi động lại có thể bị hoãn lại.

Nếu bạn đảm bảo tính khả dụng> 99,9% thì hầu như bạn sẽ luôn có một hệ thống phân cụm, nơi bạn có thể khởi động lại từng nút một mà không làm gián đoạn dịch vụ.

Vì vậy, bạn khởi động lại hệ thống đầu tiên và gắn lại nó vào cụm. Sau đó, thứ hai và như vậy. Sau đó, dịch vụ sẽ không bao giờ trở nên không có sẵn.


2
Cảm ơn câu trả lời của bạn. Tôi đã thêm một phần nhỏ vào câu hỏi ban đầu của tôi; Tôi biết tôi có thể làm cat /var/run/reboot-required.pkgsđể có được các gói yêu cầu khởi động lại. Nhưng làm thế nào để tôi biết nếu đây chỉ là những sửa chữa nhỏ, hoặc liệu đó có phải là một lỗ hổng bảo mật nghiêm trọng không?
kramer65

2
@ kramer65 mỗi gói có một thay đổi. Ví dụ: changlog cho kernel có thể được tìm thấy ở đây .
Uwe Plonus

2
Được rồi, vậy thì tùy thuộc vào sysadmin (tức là: trong trường hợp này là chính tôi) để xác định xem những thay đổi đó có quan trọng không? Tôi có quá ít kiến ​​thức để xác định điều này cho nhân Linux, chứ chưa nói đến tất cả hàng trăm gói khác. Không có nơi trung tâm nào mà tôi có thể tìm thấy quyết định liệu bản cập nhật có thực sự cần thiết cho bảo mật không?
kramer65

8
@ kramer65 Chạy aptitude changelog <package>, đây là một ví dụ đầu ra: paste.ubfox.com/8410798 (Đây là trên hệ thống Debian, không phải Ubuntu, nhưng cũng sẽ hoạt động trên Ubuntu.)
nyuszika7h

5
Cảm ơn tất cả sự giúp đỡ ở đây. Cuối cùng tôi đã kết hợp tất cả những điều tôi đã học được ở đây vào một lệnh: xargs aptitude changelog < /var/run/reboot-required.pkgs | grep urgency=high(cũng đã thêm nó vào câu hỏi ban đầu), điều này mang lại một số kết quả về việc gói nào có các bản vá rất khẩn cấp. Sau đó, các gói cá nhân tất nhiên có thể được kiểm tra. Cảm ơn một triệu cho tất cả các câu trả lời và ý tưởng!
kramer65

3

addon cho giải pháp chủ đề

Tôi thực hiện kiểm tra tương tự cho 'yêu cầu khởi động lại' cho hệ thống giám sát zabbix

Tôi thấy 2 vấn đề trong giải pháp 'Chủ đề':

  1. năng khiếu thường hoạt động xấu trong các kịch bản. Tôi giết một vài giờ nhưng vẫn không làm cho nó hoạt động với zabbix
  2. nếu chỉ có 1 thay đổi bao gồm cập nhật khẩn cấp - séc của bạn sẽ luôn hiển thị kết quả tích cực

Logic của tôi là:

  1. Kiểm tra thay đổi cuối cùng chỉ trong changelog cho mỗi gói yêu cầu khởi động lại hệ thống
  2. Là một đầu ra chỉ hiển thị cập nhật ưu tiên cao nhất

Sử dụng tài liệu Debian tôi đã tìm thấy 5 giá trị có thể cho 'mức độ khẩn cấp' và thực tế là nó có thể được theo sau bởi các ký tự bằng ("=") hoặc dấu chấm phẩy (":"). Ngoài ra, có thể có các ký tự chữ hoa và chữ thường

Vì vậy, tôi đã kết thúc với sau:

#!/bin/bash
##################################
# Zabbix monitoring script
#
# Checking urgency in changelog 
# for updates which require system restart
#
##################################
# Contact:
#  anton.lugovoi@yandex.ru
##################################
# ChangeLog:
#  20151205    initial creation
#  20151208    check uniq packages only 
##################################

case "$1" in

status)
    if [ -f /var/run/reboot-required ]; then
      echo 1
    else
      echo 0
    fi 
    ;;

urgency)
    if [ -f /var/run/reboot-required.pkgs ]; then
      while read pkg; do
        tmp=`/usr/bin/apt-get changelog $pkg | \
             /bin/grep -m1 -ioP '(?<=[Uu]rgency[=:])(low|medium|high|emergency|critical)' | \
             tr '[:upper:]' '[:lower:]'`
        if [ -n $tmp ]; then
          if   [ "$tmp" == "low" ] && \
               [ "$urgency" != "medium" ] && \
               [ "$urgency" != "high" ] && \
               [ "$urgency" != "emergency" ] && \
               [ "$urgency" != "critical" ]; then 
            urgency=low
          elif [ "$tmp" == "medium" ] && \
               [ "$urgency" != "high" ] && \
               [ "$urgency" != "emergency" ] && \
               [ "$urgency" != "critical" ]; then 
            urgency=medium
          elif [ "$tmp" == "high" ] && \
               [ "$urgency" != "emergency" ] && \
               [ "$urgency" != "critical" ]; then 
            urgency=high
          elif [ "$tmp" == "emergency" ] && \
               [ "$urgency" != "critical" ]; then 
            urgency=emergency
          elif [ "$tmp" == "critical" ]; then 
            urgency=critical
            break
          fi
        fi 
      done < <(sort -u /run/reboot-required.pkgs)
    else
      urgency=none
    fi

    case "$urgency" in
        none)      urgency=0 ;;
        low)       urgency=1 ;;
        medium)    urgency=2 ;;
        high)      urgency=3 ;;
        emergency) urgency=4 ;;
        critical)  urgency=5 ;;
        *)         urgency=42 ;;
    esac

    echo $urgency
    ;;
esac
exit 0

Kết quả là:

  • reboot_required_check.sh status trả về 1 nếu cần khởi động lại, 0 nếu không
  • reboot_required_check.sh urgency trả về mức 'khẩn cấp' cao nhất hoặc '0' nếu không cần khởi động lại

Hy vọng nó sẽ giúp ai đó tiết kiệm thời gian;)


0

Điều tôi băn khoăn là, làm thế nào điều này hoạt động cho máy chủ web sẽ tăng 99.9999etc% thời gian? Có phải họ chỉ đơn giản là không khởi động lại và có nguy cơ bảo mật bị vi phạm vì các bản cập nhật bảo mật không được cài đặt (mà tôi không thể tưởng tượng được)? Hay họ coi thời gian chết là điều hiển nhiên (điều mà tôi cũng không thể tưởng tượng được)?

Các máy chủ web lớn được khởi động lại khi * Yêu cầu khởi động lại hệ thống * xuất hiện vì lý do bảo mật.

Nhưng điều này là minh bạch đối với người dùng và trang web không bao giờ ngừng hoạt động vì các máy chủ lớn thường chạy hai hoặc ba máy chủ lưu trữ chính xác cùng một tệp và hiển thị cùng một trang. Cái đầu tiên là máy chủ chính trong khi hai cái còn lại là thứ cấp và chỉ được sử dụng khi máy chủ chính bị hỏng.


1
Trong khi điều này đúng về mặt lý thuyết, hãy Big web serverschạy các phiên bản tùy chỉnh của Linux. Họ sẽ không thấy một System restart requiredcuộc đối thoại, họ cập nhật những gì họ cần để giữ an toàn. Trong hầu hết các trường hợp, nhiều người nếu không phải tất cả các bản cập nhật có thể được thực hiện trong khi hệ thống đang chạy (tôi tin rằng thậm chí có thể cập nhật kernel Linux trên hệ thống đang chạy mà không cần khởi động lại).
joeeey

Hấp dẫn. Tôi có một máy chủ trên Amazon và tôi thường khởi động lại vì thông báo này ... Tôi đang chạy Ubuntu trên máy chủ của mình. Làm thế nào để tùy chỉnh nó để tôi không phải khởi động lại nó mọi lúc?
rom

Tôi không có bất kỳ kinh nghiệm nào với các máy chủ của Amazon. Big web serversđược chạy trên các máy chủ chuyên dụng và VPS. Vì điều này, quản trị viên hệ thống có quyền kiểm soát phần mềm nhiều hơn. Amazon có cung cấp cho bạn quyền truy cập shell root vào máy chủ của bạn không?
joeeey

Có, nó có thể có quyền truy cập root.
rom

Sau đó cập nhật các gói theo cách thủ công và sau đó khởi động lại các dịch vụ bị ảnh hưởng và sử dụng một cái gì đó như Ksplice cho các bản cập nhật kernel sẽ là một cách. Điều đáng chú ý là Ksplice freezes execution of a computer so it is the only program runningkhi áp dụng một bản vá, do đó vẫn có thể có một chút thời gian chết (do quá trình máy chủ web bị 'đóng băng'). Đây là nơi câu trả lời của @Uwe Plonus xuất hiện.
joeeey
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.