Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีหลีกเลี่ยงการรีบูตเซิร์ฟเวอร์ด้วย Ubuntu Livepatch

วิธีหลีกเลี่ยงการรีบูตเซิร์ฟเวอร์ด้วย Ubuntu Livepatch

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

แต่ทำไมต้องรีบูตตั้งแต่แรก? ดูเหมือนว่าทุกอย่างจะทำงานได้ดีหลังจาก apt-get upgrade สั่งการ. อย่างไรก็ตาม สิ่งต่างๆ ไม่ได้เป็นอย่างที่เห็นเสมอไป แม้ว่าระบบจะยังคงทำงานอย่างมีความสุขหลังจากการอัปเกรดทุกครั้ง โดยไม่บังคับให้รีบูตเหมือนที่ Windows ทำ แต่ระบบอาจยังจำเป็นต้องมีอยู่

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

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

Ubuntu Livepatch แก้ปัญหานี้โดยอนุญาตให้คุณปิดช่องโหว่ความปลอดภัยของเคอร์เนลโดยไม่ต้องรีสตาร์ท ด้วยวิธีนี้ คุณจะหลีกเลี่ยงหรือชะลอการรีบูตเป็นเวลาหลายสัปดาห์หรือหลายเดือนได้โดยไม่กระทบต่อความปลอดภัย

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

วิธีหลีกเลี่ยงการรีบูตเซิร์ฟเวอร์ด้วย Ubuntu Livepatch

แต่สำหรับสิ่งต่างๆ ส่วนใหญ่ที่ดูเหมือนจะเรียบง่ายนั้น การนำไปใช้งานและรายละเอียดทางเทคนิคนั้นไม่ง่ายนัก

วิธีตั้งค่า Livepatch บน Ubuntu

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

sudo snap install canonical-livepatch

รอสองสามวินาทีจนกระทั่งติดตั้งแพ็คเกจ snap อย่างสมบูรณ์ เมื่อเสร็จแล้วคุณจะได้ผลลัพธ์คล้ายกับที่คุณเห็นในภาพต่อไปนี้

วิธีหลีกเลี่ยงการรีบูตเซิร์ฟเวอร์ด้วย Ubuntu Livepatch

สุดท้ายกับคำสั่งสุดท้ายจากเพจ Canonical

sudo canonical-livepatch enable #PASTE_YOUR_TOKEN_HERE

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

ติดตั้ง Snap Daemon หากจำเป็น

ในบางกรณีซึ่งเกิดขึ้นได้ยาก คำสั่งแรกในส่วนก่อนหน้าอาจล้มเหลว โดยมีข้อความแสดงข้อผิดพลาดต่อไปนี้:-bash: /usr/bin/snap: No such file or directory . ในกรณีนี้หมายความว่าผู้ให้บริการเซิร์ฟเวอร์ของคุณมีอิมเมจระบบปฏิบัติการ Ubuntu ที่ไม่มีบริการ snap daemon ตามค่าเริ่มต้น ติดตั้งด้วย:

sudo apt update && sudo apt install snapd

ตอนนี้ให้เรียกใช้สองคำสั่งจากส่วนก่อนหน้าอีกครั้ง

อัปเดตเซิร์ฟเวอร์ของคุณอยู่เสมอ

Livepatch จะใช้การอัปเดตความปลอดภัยที่จำเป็นทั้งหมดกับเคอร์เนลของคุณ อย่างไรก็ตาม คุณควรอัปเกรดส่วนที่เหลือของระบบเป็นประจำด้วยคำสั่งเช่น:

sudo apt update && sudo apt upgrade

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

วิธีหลีกเลี่ยงการรีบูตเซิร์ฟเวอร์ด้วย Ubuntu Livepatch

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

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

systemctl restart nginx.service

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

บทสรุป

อย่างที่คุณเห็น Canonical ทำให้ง่ายต่อการใช้งานบนเซิร์ฟเวอร์ เท่าที่เกี่ยวข้องกับเคอร์เนล คุณไม่จำเป็นต้องมีงานบำรุงรักษาใดๆ สิ่งเดียวที่คุณทำได้คือวิ่ง

canonical-livepatch status

เพื่อตรวจสอบสิ่งต่างๆ เป็นระยะ