*** จำเป็นต้องรีสตาร์ทระบบด่วนแค่ไหนเพื่อความปลอดภัย?


56

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

*** System restart required ***

เวลานี้เกิดขึ้นฉันรีบูต Ubuntu ง่ายและทั้งหมดก็ดี ไม่เป็นไรเพราะเป็นเว็บไซต์ส่วนตัวที่เรียบง่าย สิ่งที่ฉันสงสัยเกี่ยวกับการทำงานกับเว็บเซิร์ฟเวอร์ซึ่งควรเพิ่มขึ้น 99.9999etc% ของเวลาหรือไม่ พวกเขาไม่รีสตาร์ทและเสี่ยงต่อความปลอดภัยเนื่องจากระบบไม่ได้ติดตั้งโปรแกรมปรับปรุงความปลอดภัย (ซึ่งฉันนึกไม่ออก) หรือพวกเขาจะหยุดทำงานเพื่อรับ (ซึ่งฉันไม่สามารถจินตนาการอย่างใดอย่างหนึ่ง)?

ฉันควรจัดการสิ่งนี้อย่างไรถ้านี่เป็นเซิร์ฟเวอร์การผลิตที่สำคัญมากซึ่งฉันต้องการติดตามและใช้งาน? ยินดีต้อนรับเคล็ดลับทั้งหมด!

[แก้ไข] ฉันรู้ว่าฉันสามารถทำได้cat /var/run/reboot-required.pkgsเพื่อแสดงรายการแพ็คเกจที่เป็นสาเหตุของการรีบูต คำสั่งให้ผลดังต่อไปนี้:

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

แต่ฉันจะรู้ได้อย่างไรว่าการปรับปรุงเป็นเรื่องเล็กน้อยว่าฉันมีช่องโหว่ด้านความปลอดภัยที่ร้ายแรงหรือไม่ถ้าฉันไม่รีสตาร์ท?

[แก้ไข 2] โอเคตอนนี้ฉันรวมคำสั่งที่ฉันพบว่ามีประโยชน์เป็นหนึ่งเดียว:

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

หากสิ่งนี้ไม่ส่งออกอะไรแสดงว่าไม่มีปัญหาด้านความปลอดภัยที่มีความเร่งด่วนสูง

หนึ่งคำถามสุดท้ายแม้ว่า: มีlow, mediumและhighเพียงความเป็นไปได้เร่งด่วนหรือมีใด ๆ เพิ่มเติมเช่นตัวอย่างcriticalหรือextremelyimportant?


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

14
ฉันสงสัยว่ามีกี่คนที่มาที่นี่เพราะพวกเขาเห็นคำถามในรายการ "คำถามเครือข่ายน่าสนใจ" และสงสัยว่าคำสบถคืออะไร ... * ยกมือ *
David Richerby

6
@Ramhound: อืมไม่ใช่พวกมันจะสลับไปยังเซิร์ฟเวอร์รองในช่วงระยะเวลาของการบำรุงรักษา
การแข่งขัน Lightness กับโมนิก้า

1
คำถามสุดท้ายอีกครั้ง: ฉันมีในใจที่จะกรองออกต่ำและขนาดกลางและพิจารณาระดับอื่น ๆ / ไม่ทราบทั้งหมดอย่างเร่งด่วน: | grep 'urgency=' | egrep -v '=(low|medium)'
KajMagnus

คำตอบ:


45

ไม่มีคำตอบง่ายๆขึ้นอยู่กับการอัพเดตที่ทำ หากเคอร์เนลมีปัญหาด้านความปลอดภัยที่ร้ายแรงคุณควรรีสตาร์ทโดยเร็วที่สุด หากเคอร์เนลมีการแก้ไขเล็กน้อยเพียงอย่างเดียวการรีสตาร์ทอาจถูกเลื่อนออกไป

หากคุณรับประกันความพร้อมใช้งาน> 99.9% คุณจะมีระบบคลัสเตอร์เกือบทุกครั้งที่คุณสามารถรีบูตโหนดทีละตัวโดยไม่รบกวนบริการ

ดังนั้นคุณรีบูตระบบแรกและเชื่อมต่อเข้ากับคลัสเตอร์อีกครั้ง จากนั้นครั้งที่สองเป็นต้น จากนั้นบริการจะไม่สามารถใช้งานได้


2
ขอบคุณสำหรับคำตอบ. ฉันเพิ่มคำถามเล็ก ๆ น้อย ๆ ลงในคำถามเริ่มต้นของฉัน ฉันรู้ว่าฉันสามารถทำได้cat /var/run/reboot-required.pkgsเพื่อรับแพ็คเกจที่ต้องมีการรีบูต แต่ฉันจะรู้ได้อย่างไรว่านี่เป็นเพียงการแก้ไขเล็กน้อยหรือว่าเป็นช่องโหว่ด้านความปลอดภัยที่ร้ายแรง
kramer65

2
@ kramer65 แต่ละแพ็คเกจมีการเปลี่ยนแปลง เช่น CHANGLOG สำหรับเคอร์เนลที่สามารถพบได้ที่นี่
Uwe Plonus

2
เอาล่ะดังนั้นมันขึ้นอยู่กับดูแลระบบ (เช่น: ในกรณีนี้ตัวเอง) เพื่อตรวจสอบว่าการเปลี่ยนแปลงเหล่านั้นมีความสำคัญ? ฉันมีความรู้น้อยเกินไปที่จะตรวจสอบสิ่งนี้สำหรับเคอร์เนลลินุกซ์ ไม่มีจุดศูนย์กลางที่ฉันสามารถค้นหาการตัดสินใจว่าจำเป็นต้องมีการอัพเดทเพื่อความปลอดภัยหรือไม่?
kramer65

8
@ kramer65 Run aptitude changelog <package>นี่คือการส่งออกเช่น: paste.ubuntu.com/8410798 (นี่คือในระบบเดอูบุนตูไม่ได้ แต่ที่เหมือนกันจะทำงานบน Ubuntu เกินไป.)
nyuszika7h

5
ขอบคุณสำหรับความช่วยเหลือทั้งหมดที่นี่ ในที่สุดฉันก็รวมทุกสิ่งที่ฉันได้เรียนรู้ที่นี่เป็นคำสั่งเดียว: xargs aptitude changelog < /var/run/reboot-required.pkgs | grep urgency=high(เพิ่มไปยังคำถามเริ่มต้นเช่นกัน) ซึ่งให้ผลลัพธ์เป็นแพคเกจที่มีแพทช์เร่งด่วนสูง หลังจากนั้นสามารถตรวจสอบแพ็คเกจแต่ละชุดได้ ขอบคุณล้านคำตอบและความคิดเห็นทั้งหมด!
kramer65

3

addon สำหรับการแก้ปัญหาหัวข้อ

ฉันทำการตรวจสอบที่คล้ายกันสำหรับ 'ความต้องการรีบูต' สำหรับระบบการตรวจสอบ zabbix

ฉันเห็น 2 ปัญหาในโซลูชัน 'หัวข้อ':

  1. ความถนัดมักจะทำงานได้ไม่ดีในสคริปต์ ฉันฆ่าไม่กี่ชั่วโมง แต่ก็ยังไม่ได้ทำงานกับ zabbix
  2. หากมีการเปลี่ยนแปลงเพียง 1 รายการเท่านั้นที่มีการอัปเดตอย่างเร่งด่วนเช็คของคุณจะแสดงผลลัพธ์ที่เป็นบวกเสมอ

ตรรกะของฉันคือ:

  1. ตรวจสอบการเปลี่ยนแปลงล่าสุดใน changelog สำหรับทุกแพ็คเกจที่ต้องรีบูตระบบ
  2. ในฐานะที่เป็นผลผลิตแสดงเฉพาะการปรับปรุงลำดับความสำคัญสูงสุด

การใช้เอกสาร Debianฉันพบค่าที่เป็นไปได้ 5 ค่าสำหรับ 'ความเร่งด่วน' และความจริงที่ว่ามันสามารถตามด้วยอักขระ ("=") หรือเครื่องหมายอัฒภาค (":") เท่ากัน นอกจากนี้ยังสามารถมีอักขระตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก

ดังนั้นฉันจึงจบลงด้วยการดังต่อไปนี้:

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

ผลที่ตามมา:

  • reboot_required_check.sh status ผลตอบแทนที่ 1 หากจำเป็นต้องรีบูต 0 ถ้าไม่ได้
  • reboot_required_check.sh urgency ส่งกลับระดับ 'เร่งด่วน' สูงสุดหรือ '0' หากไม่จำเป็นต้องรีบูต

หวังว่าจะช่วยให้ใครบางคนประหยัดเวลา;)


0

สิ่งที่ฉันสงสัยเกี่ยวกับการทำงานกับเว็บเซิร์ฟเวอร์ซึ่งควรเพิ่มขึ้น 99.9999etc% ของเวลาหรือไม่ พวกเขาไม่รีสตาร์ทและเสี่ยงต่อความปลอดภัยเนื่องจากระบบไม่ได้ติดตั้งโปรแกรมปรับปรุงความปลอดภัย (ซึ่งฉันนึกไม่ออก) หรือพวกเขาจะหยุดทำงานเพื่อรับ (ซึ่งฉันไม่สามารถจินตนาการอย่างใดอย่างหนึ่ง)?

เว็บเซิร์ฟเวอร์ขนาดใหญ่จะถูกรีสตาร์ทเมื่อ* ต้องการการรีสตาร์ทระบบ *เพื่อเหตุผลด้านความปลอดภัย

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


1
ในขณะที่สิ่งนี้ถูกต้องตามหลักการให้Big web serversเรียกใช้ Linux รุ่นที่กำหนดเอง พวกเขาจะไม่เห็นSystem restart requiredบทสนทนาพวกเขาอัพเดทสิ่งที่พวกเขาต้องการเพื่อความปลอดภัย ในกรณีส่วนใหญ่การอัปเดตจำนวนมากหากไม่สามารถทำได้ในขณะที่ระบบกำลังทำงานอยู่ (ฉันเชื่อว่าเป็นไปได้ที่จะอัปเดตเคอร์เนล Linux บนระบบที่รันอยู่โดยไม่ต้องรีบู๊ต)
joeeey

น่าสนใจ ฉันมีเซิร์ฟเวอร์ใน Amazon และฉันมักจะรีสตาร์ทเพราะข้อความนี้ ... ฉันกำลังใช้งาน Ubuntu บนเซิร์ฟเวอร์ของฉัน จะปรับแต่งมันอย่างไรฉันจึงไม่ต้องรีบูตทุกครั้ง?
รอม

ฉันไม่มีประสบการณ์ใด ๆ กับเซิร์ฟเวอร์ Amazon Big web serversทำงานบนเซิร์ฟเวอร์เฉพาะและ VPS ด้วยเหตุนี้ผู้ดูแลระบบจึงสามารถควบคุมซอฟต์แวร์ได้มากขึ้น Amazon ให้สิทธิ์การเข้าถึงรูทเชลล์แก่เซิร์ฟเวอร์ของคุณหรือไม่
joeeey

ใช่เป็นไปได้ที่จะเข้าถึงรูต
rom

จากนั้นอัพเดตแพ็กเกจด้วยตนเองจากนั้นรีสตาร์ทเซอร์วิสที่ได้รับผลกระทบและการใช้Kspliceสำหรับการอัพเดตเคอร์เนลจะเป็นวิธีหนึ่ง เป็นที่น่าสังเกตว่า Ksplice freezes execution of a computer so it is the only program runningเมื่อใช้โปรแกรมปะแก้ดังนั้นอาจยังมีการหยุดทำงานเล็กน้อย (เนื่องจากกระบวนการเว็บเซิร์ฟเวอร์ถูก 'ตรึง') ซึ่งเป็นที่ที่คำตอบโดย @Uwe Plonus มา.
joeeey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.