ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home อัปเดตแพ็กเกจและเปิด Security Update อัตโนมัติบน Ubuntu

อัปเดตแพ็กเกจและเปิด Security Update อัตโนมัติบน Ubuntu

ช่องโหว่ด้านความปลอดภัยของซอฟต์แวร์ถูกค้นพบและแก้ไขอยู่เสมอ เซิร์ฟเวอร์ที่ไม่ได้อัปเดตนาน ๆ จึงเป็นเป้าหมายที่ง่ายที่สุดของการโจมตีอัตโนมัติ Ubuntu มีเครื่องมือ unattended-upgrades ที่ติดตั้ง Security Update ให้เองทุกวัน โดยค่าเริ่มต้นจะติดตั้งเฉพาะแพ็กเกจจากช่องทาง Security ซึ่งเสี่ยงต่อการทำให้ระบบเปลี่ยนพฤติกรรมน้อยที่สุด

คู่มือนี้แบ่งเป็นสองส่วน คือการอัปเดตแพ็กเกจด้วยตนเองอย่างถูกวิธี และการเปิด Security Update อัตโนมัติ ใช้ได้กับ Ubuntu 22.04 และ 24.04

สิ่งที่ต้องเตรียม

  • Ubuntu 22.04/24.04 และผู้ใช้ที่ใช้ sudo ได้
  • Backup หรือ Snapshot ล่าสุดของเซิร์ฟเวอร์ก่อนอัปเดตครั้งใหญ่ ดู การ Backup Server บน Cloud ของ TDC
  • ช่วงเวลาที่รีบูตได้ เพราะการอัปเดต Kernel และไลบรารีหลักต้องรีบูตจึงจะมีผล

ส่วนที่ 1: อัปเดตแพ็กเกจด้วยตนเอง

ขั้นตอนที่ 1: ดึงรายการแพ็กเกจล่าสุด

sudo apt update

ท้ายผลลัพธ์จะบอกจำนวนแพ็กเกจที่อัปเดตได้ เช่น 23 packages can be upgraded. Run 'apt list --upgradable' to see them.

ขั้นตอนที่ 2: ดูรายการก่อนติดตั้ง

apt list --upgradable

ตรวจว่ามีแพ็กเกจสำคัญ เช่น ฐานข้อมูล, Web Server หรือ PHP อยู่ในรายการหรือไม่ ถ้ามี ควรเลือกทำในช่วงที่มีผู้ใช้น้อย

ขั้นตอนที่ 3: ติดตั้งอัปเดต

sudo apt upgrade

apt จะแสดงรายการและถาม Do you want to continue? [Y/n] ตอบ Y บน Ubuntu 22.04 ขึ้นไป เมื่อเสร็จ needrestart อาจแสดงหน้าจอถามว่าจะรีสตาร์ตบริการใดบ้าง โดยทั่วไปกด Enter เพื่อยอมรับรายการที่เลือกไว้ได้

apt upgrade จะไม่ลบแพ็กเกจและไม่ติดตั้งแพ็กเกจใหม่ แพ็กเกจที่ต้องทำเช่นนั้นจะขึ้นว่า kept back ถ้าต้องการติดตั้งส่วนนี้ด้วย ให้ใช้ sudo apt full-upgrade และอ่านรายการแพ็กเกจที่จะถูกลบให้ละเอียดก่อนยืนยัน บางแพ็กเกจที่ขึ้น kept back เป็นเพราะ Phased Update ของ Ubuntu ที่ทยอยปล่อยให้เครื่องทีละส่วน กรณีนี้รอสักระยะแล้วจะติดตั้งได้เอง

ขั้นตอนที่ 4: ตรวจว่าต้องรีบูตหรือไม่

cat /var/run/reboot-required 2>/dev/null
cat /var/run/reboot-required.pkgs 2>/dev/null

ถ้าคำสั่งแรกแสดง *** System restart required *** ให้วางแผนรีบูต คำสั่งที่สองบอกว่าแพ็กเกจใดต้องการการรีบูต ถ้าไม่แสดงอะไรเลย แปลว่ายังไม่ต้องรีบูต

ขั้นตอนที่ 5: ลบแพ็กเกจที่ไม่ใช้แล้ว

sudo apt autoremove --purge

ช่วยลบ Kernel รุ่นเก่าที่ไม่ได้ใช้ ทำให้ /boot และดิสก์ไม่เต็ม

ส่วนที่ 2: เปิด Security Update อัตโนมัติ

ขั้นตอนที่ 1: ติดตั้งและเปิดใช้งาน

Ubuntu Server ส่วนใหญ่ติดตั้ง unattended-upgrades มาแล้ว คำสั่งนี้จะยืนยันหรือติดตั้งให้

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

หน้าจอจะถาม Automatically download and install stable updates? เลือก Yes ขั้นตอนนี้สร้างไฟล์ /etc/apt/apt.conf.d/20auto-upgrades ตรวจเนื้อหาได้ด้วย

cat /etc/apt/apt.conf.d/20auto-upgrades

ต้องมีสองบรรทัดนี้ ค่า "1" หมายถึงทำทุกวัน

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

ขั้นตอนที่ 2: ปรับการตั้งค่า

การตั้งค่าหลักอยู่ที่ /etc/apt/apt.conf.d/50unattended-upgrades ไฟล์นี้เป็นของแพ็กเกจ ถ้าแก้แล้วอาจถูกถามเรื่องไฟล์ชนกันตอนอัปเกรดแพ็กเกจ ทางที่สะอาดกว่าคือสร้างไฟล์ใหม่ที่ถูกอ่านทีหลังเพื่อเขียนทับเฉพาะค่าที่ต้องการ

sudo nano /etc/apt/apt.conf.d/52unattended-upgrades-local
// ลบ Kernel และแพ็กเกจที่ไม่ใช้แล้วหลังอัปเดต
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";

// ไม่รีบูตเอง (เปลี่ยนเป็น "true" ถ้ายอมให้รีบูตอัตโนมัติ)
Unattended-Upgrade::Automatic-Reboot "false";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";

ค่า Automatic-Reboot ต้องเลือกให้เหมาะกับงาน ถ้าตั้งเป็น "true" เครื่องจะรีบูตตามเวลาที่กำหนดเมื่อมีอัปเดตที่ต้องรีบูต ซึ่งทำให้ระบบปลอดภัยต่อเนื่องแต่บริการจะหยุดไปชั่วครู่ ถ้าตั้งเป็น "false" ต้องคอยตรวจ /var/run/reboot-required และรีบูตเอง

ส่วนที่กำหนดว่าจะอัปเดตจากช่องทางใดอยู่ในบล็อก Unattended-Upgrade::Allowed-Origins ของไฟล์ 50unattended-upgrades ค่าเริ่มต้นอนุญาตช่องทาง Release หลักของเวอร์ชัน (ซึ่งไม่มีการเปลี่ยนแพ็กเกจหลังออกรุ่น) และช่องทางที่ลงท้ายด้วย -security (รวมถึง ESM ถ้าเครื่องเปิดใช้ Ubuntu Pro) ส่วนบรรทัด "${distro_id}:${distro_codename}-updates"; ถูกปิดไว้ด้วย // แนะนำให้คงค่าเริ่มต้นไว้สำหรับเซิร์ฟเวอร์ Production

ถ้ามีแพ็กเกจที่ไม่ต้องการให้อัปเดตเอง เช่น ฐานข้อมูลที่ต้องการควบคุมเวลาอัปเกรดเอง ให้เพิ่มลงในไฟล์ 52unattended-upgrades-local

Unattended-Upgrade::Package-Blacklist {
    "mariadb-server";
};

ตรวจไวยากรณ์ของไฟล์ทั้งหมดด้วย apt-config dump | grep -i unattended ถ้าไฟล์มีข้อผิดพลาด คำสั่งนี้จะแสดง Error พร้อมชื่อไฟล์และบรรทัด

ตรวจสอบผลลัพธ์

ทดลองรันแบบจำลอง (ไม่ติดตั้งจริง) เพื่อดูว่าระบบจะอัปเดตอะไร

sudo unattended-upgrade --dry-run --debug

ผลลัพธ์จะแสดงบรรทัด Allowed origins are: ตามด้วยช่องทางที่อนุญาต และรายการแพ็กเกจที่จะถูกอัปเดต ถ้าไม่มีอะไรต้องอัปเดตจะขึ้น No packages found that can be upgraded unattended

ตรวจว่า Timer ของ systemd ที่สั่งให้ทำงานทุกวันเปิดอยู่

systemctl list-timers 'apt-daily*'

ต้องเห็น apt-daily.timer (ดึงรายการแพ็กเกจ) และ apt-daily-upgrade.timer (ติดตั้งอัปเดต) พร้อมเวลาที่จะทำงานครั้งถัดไป หลังผ่านไปหนึ่งถึงสองวัน ดูประวัติการติดตั้งจริงได้ที่

sudo tail -n 50 /var/log/unattended-upgrades/unattended-upgrades.log

รายละเอียดแพ็กเกจที่ถูกติดตั้งอยู่ใน /var/log/apt/history.log

ปัญหาที่พบบ่อย

Could not get lock /var/lib/dpkg/lock-frontend

มี apt อีกตัวทำงานอยู่ ส่วนใหญ่คือ unattended-upgrades ที่กำลังติดตั้งอัปเดตตามรอบ โดยเฉพาะช่วงไม่กี่นาทีหลังบูตเครื่อง ให้รอจนเสร็จ ตรวจได้ด้วย ps aux | grep -E 'apt|dpkg|unattended' | grep -v grep ห้ามลบไฟล์ Lock เอง เพราะอาจทำให้ฐานข้อมูลแพ็กเกจเสียหาย

อัปเดตค้างกลางคันหรือไฟฟ้าดับระหว่างอัปเดต

ให้รันคำสั่งนี้เพื่อทำขั้นตอนที่ค้างให้เสร็จ แล้วรัน sudo apt upgrade อีกครั้ง

sudo dpkg --configure -a
sudo apt -f install

/boot เต็ม ติดตั้ง Kernel ใหม่ไม่ได้

Kernel เก่าสะสมจนเต็ม ตรวจด้วย df -h /boot แล้วรัน sudo apt autoremove --purge และเปิด Remove-Unused-Kernel-Packages ตามขั้นตอนที่ 2 เพื่อไม่ให้เกิดซ้ำ

อัปเดตแล้วบริการทำงานผิดปกติ

ดูใน /var/log/apt/history.log ว่าแพ็กเกจใดถูกอัปเดตในช่วงเวลานั้น ถ้าจำเป็นต้องย้อนกลับ ให้กู้จาก Backup หรือ Snapshot ที่ทำไว้ และเพิ่มแพ็กเกจนั้นใน Package-Blacklist ชั่วคราวระหว่างตรวจสอบ

หากต้องการคำแนะนำเรื่องการวางแผนอัปเดตหรือรีบูตเซิร์ฟเวอร์ Production ติดต่อทีมซัพพอร์ต THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security