หากคุณดูแลเซิร์ฟเวอร์ของตัวเอง คุณจะเผชิญปัญหานี้เร็วหรือช้า: คุณต้อง Reboot OS แตเครื่องให้บริการสำคัญที่คุณไม่สามารถหยุดชะงักได้
แตทำไมต้อง Reboot? ทุกอย่างดูทำงานปกติหลังคำสั่ง apt-get upgrade อย่างไรก็ตาม สิ่งต่างๆ ไม่ได้เป็นไปตามที่เห็นเสมอไป แม้ระบบจะทำงานต่อได้อย่างมีความสุขหลังอัปเกรดทุกครั้ง ไม่บังคับ Reboot อย่าง Windows แตมันอาจยังต้องการ Reboot อยู่
ตัวอย่าง เมื่อพบช่องโหว่ในแกนของระบบ (Kernel) จะได้รับการ Patch และส่งไปยังเซิร์ฟเวอร์ของคุณเป็นแพ็กเกจใหม่ หลังจากติดตั้ง Kernel ที่ Patch แล้ว บางไฟล์ถูกเขียนลงดิสก์ แตยังคงเป็น Kernel เก่าที่รันอยู่ เพราะมันคือตัวที่โหลดอยู่ในหน่วยความจำ (RAM)
หมายความว่าเซิร์ฟเวอร์ของคุณยังเปราะบางต่อช่องโหว่ด้านความปลอดภัยที่พบไว้ก่อนหน้า กระบวนการอื่นๆ Daemons และ Services สามารถ Reload ได้โดยไม่ Restart OS แต่ Kernel อยู่ที่หัวใจของระบบ และสามารถ Reload ได้เฉพาะตอน Boot ถัดไป
Ubuntu Livepatch แก้ปัญหานี้โดยให้คุณปิดช่องโหว่ความปลอดภัย Kernel โดยไม่ต้อง Restart ด้วยวิธีนี้ คุณสามารถหลีกเลี่ยงหรือเลื่อน Reboot เป็นสัปดาห์หรือเดือนโดยไม่犠牲ความปลอดภัย
แนวคิดหลักของ Live Patching เรียบง่าย: เมื่อฟังก์ชันมีช่องโหว่ ให้เขียนใหม่ กำจัดข้อบกพร่อง และโหลดฟังก์ชันใหม่ไว้ที่หน่วยความจำ เมื่อเรียกฟังก์ชัน แทนที่จะรันโค้ดใน Kernel ให้ Redirect การเรียกไปใช้โค้ดที่เขียนใหม่
แตเหมือนกับสิ่งส่วนใหญ่ที่ดูทำงานง่าย Implementation และรายละเอียดทางเทคนิคไม่ได้เรียบง่ายขนาดนั้น
วิธีตั้งค่า Livepatch บน Ubuntu
ไปที่หน้านี้และสร้างบัญชี Ubuntu One (หรือ Login หากมีอยู่แล้ว) เช็คอีเมลและคลิกลิงก์ยืนยันบัญชี หลังจากนั้น ไปที่หน้า Canonical Livepatch Service เลือกว่าคุณเป็น "Ubuntu user" และคลิกปุ่มสร้าง Token หน้าถัดไปจะแสดงคำสั่งที่แน่นอนที่คุณต้องใส่บนเซิร์ฟเวอร์ หลังคำสั่งแรก ใส่:
sudo snap install canonical-livepatch
รอไม่กี่วินาทีจน Snap Package ติดตั้งเสร็จ เมื่อเสร็จ คุณจะได้ผลลัพธ์คล้ายรูปถัดไป
สุดท้าย ด้วยคำสั่งสุดท้ายจากหน้า Canonical:
sudo canonical-livepatch enable #PASTE_YOUR_TOKEN_HERE
บริการจะ Active และจะ Apply Security Patches ให้ Kernel ของคุณ อัตโนมัติ ทุกครั้งที่จำเป็น โดยไม่ต้องการ Input จากคุณ
ติดตั้ง Snap Daemon หากจำเป็น
บนโอกาสนادرة คำสั่งแรกในส่วนก่อนหน้าอาจล้มเหลว พร้อมข้อความ Error: -bash: /usr/bin/snap: No such file or directory ในกรณีนี้หมายถึง Provider เซิร์ฟเวอร์ของคุณมี Ubuntu OS Image ที่ไม่รวม Snap Daemon Service โดยค่าเริ่มต้น ติดตั้งด้วย:
sudo apt update && sudo apt install snapd
ตอนนี้ รันสองคำสั่งจากส่วนก่อนหน้าอีกครั้ง
รักษาเซิร์ฟเวอร์ให้ทันสมัย
Livepatch จะ Apply Security Updates ที่จำเป็นทั้งหมดให้ Kernel ของคุณ อย่างไรก็ตาม คุณควร Upgrade ส่วนที่เหลือของระบบเป็นประจำด้วยคำสั่งอย่าง:
sudo apt update && sudo apt upgrade
ควรทำทุกสัปดาห์ หรือบ่อยกว่านั้น หากทำได้ Package สำคัญของระบบอาจแจ้งเตือนว่าต้อง Restart เพื่อ Apply Security Fixes ล่าสุด
เหล่านี้มักเป็น Graceful Restarts หมายถึงไม่รบกวน Service ในกระบวนการ ตัวอย่าง ในกรณีนี้ SSH Daemon ถูก Restart โดยไม่ Interrupt Active SSH Session
ในสถานการณ์อื่น คุณอาจ Restart Services เองเพื่อให้แน่ใจว่าโค้ดที่ Patch แล้วถูก Reload และ Security Fixes ถูก Apply ตัวอย่าง หากสังเกตว่า Package nginx ถูก Upgrade คุณสามารถรัน:
systemctl restart nginx.service
เพื่อ Reload Nginx Daemon เข้า Memory อีกครั้ง มิฉะนั้น แม้ Package จะ Upgrade แล้ว มันอาจยังรันกับโค้ดเก่าที่เปราะบาง ทำให้เซิร์ฟเวอร์เสี่ยงต่อการโจมตีที่รู้จัก บาง Package Upgrades ทำให้อัตโนมัติ แตบางตัวไม่ นั่นคือเหตุผลที่ควรสนใจสิ่งที่ "apt upgrade" ทำ และ Restart บาง Services หากจำเป็น คุณยังดู Logs ได้ว่ามีการทำอัตโนมัติหรือไม่
สรุป
เห็นได้ว่า Canonical ทำให้ Implement นี้บนเซิร์ฟเวอร์ง่ายดาย สำหรับ Kernel ไม่มีงานบำรุงรักษาที่ต้องทำจากคุณ สิ่งเดียวที่คุณทำได้คือรัน
canonical-livepatch status
เพื่อเช็คสถานะจากเวลาไปเวลา