Ubuntu 24.04 เปิดใช้งาน unattended-upgrades อัตโนมัติไหม
Ubuntu Server 24.04 ติดตั้ง unattended-upgrades มาให้พร้อมใช้งานผ่าน 20auto-upgrades โดยค่าเริ่มต้นจะไม่อัปเกรดแบบรีบูตอัตโนมัติ คุณสามารถตรวจสอบรายการอัปเดตได้ด้วย dry-run
เหตุผลที่ควรตั้งค่าการอัปเดตความปลอดภัยอัตโนมัติ
เซิร์ฟเวอร์ที่ไม่ได้แพตช์คือเป้าหมายที่ง่ายที่สุดบนอินเทอร์เน็ต การบุกรุกเซิร์ฟเวอร์ขนาดเล็กส่วนใหญ่ไม่ได้เกิดจากเทคนิคที่ซับซ้อน แต่เกิดจากช่องโหว่ที่เป็นที่รู้จักในแพ็กเกจเก่าที่เจ้าของไม่เคยอัปเดต Ubuntu มีเครื่องมือที่ช่วยปิดช่องว่างนี้โดยอัตโนมัติ คือ unattended-upgrades ซึ่งจะติดตั้งการอัปเดตความปลอดภัยตามกำหนดเวลาโดยที่คุณไม่ต้องล็อกอินเข้าไปทำเอง นี่คือการลงทุนด้านความปลอดภัยที่คุ้มค่าที่สุดสำหรับ VPS และบน Ubuntu ใช้เวลาตั้งค่าเพียงไม่กี่นาที
เครื่องมือนี้ถูกออกแบบมาให้มีความระมัดระวังเป็นพิเศษ โดยค่าเริ่มต้นจะใช้เฉพาะการอัปเดตความปลอดภัยเท่านั้น ไม่ใช่การอัปเกรดทุกแพ็กเกจ เพราะแพตช์ความปลอดภัยมีความเสี่ยงต่ำและควรติดตั้งทันทีโดยไม่ต้องตรวจสอบ ในขณะที่การอัปเกรดฟีเจอร์อาจเปลี่ยนพฤติกรรมของซอฟต์แวร์ที่คุณใช้งานอยู่ ค่าเริ่มต้นนี้เหมาะสมที่สุดสำหรับเซิร์ฟเวอร์ส่วนใหญ่ และคู่มือนี้จะคงค่าดังกล่าวไว้พร้อมแนะนำการตั้งค่าบางอย่างที่ควรปรับเปลี่ยน
ขั้นตอนที่ 1: ติดตั้งและเปิดใช้งาน
บน Ubuntu Server 24.04 แพ็กเกจจะถูกติดตั้งและเปิดใช้งานมาให้โดยค่าเริ่มต้น เอกสารประกอบของ Ubuntu Server ระบุว่า unattended-upgrades ถูกติดตั้งไว้ล่วงหน้าและมีการเปิดใช้งานการติดตั้งอัปเดตความปลอดภัยอัตโนมัติทันทีหลังการติดตั้ง คำถามเกี่ยวกับการเปิดใช้งานที่แพ็กเกจถามระหว่างการติดตั้งจะถูกตั้งค่าเริ่มต้นเป็น yes ดังนั้นหากไม่มีใครเลือกตอบ no ไว้อย่างชัดเจน งานประจำวันก็จะทำงานอยู่แล้ว อย่างไรก็ตาม อิมเมจของผู้ให้บริการที่ถูกปรับแต่งหรือตัดทอนฟีเจอร์ออกอาจมีความแตกต่างกัน ดังนั้นควรตรวจสอบให้แน่ใจแทนการคาดเดา คำสั่งเหล่านี้ปลอดภัยไม่ว่าจะในกรณีใดก็ตาม โดยจะทำการติดตั้งแพ็กเกจหากยังไม่มี และถามคำถามเดิมอีกครั้งเพื่อเปิดใช้งาน:
sudo apt update
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgradesพรอมต์ dpkg-reconfigure จะถามคำถามแบบใช่หรือไม่เพียงข้อเดียว คือต้องการดาวน์โหลดและติดตั้งอัปเดตที่มีความเสถียรโดยอัตโนมัติหรือไม่ ให้ตอบ yes ซึ่งจะเป็นการเขียนไฟล์ที่เปิดใช้งานงานประจำวัน:
cat /etc/apt/apt.conf.d/20auto-upgradesAPT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";บรรทัดแรกจะรีเฟรชรายการแพ็กเกจทุกวัน ส่วนบรรทัดที่สองจะรัน unattended upgrade ทุกวัน การตั้งค่าทั้งสองเป็น 1 หมายความว่าเครื่องจะตรวจสอบและติดตั้งอัปเดตความปลอดภัยทุกวันผ่าน systemd timer โดยที่คุณไม่ต้องดำเนินการใดๆ เพิ่มเติม
ขั้นตอนที่ 2: ตัดสินใจว่าจะให้สิ่งใดอัปเดตโดยอัตโนมัติ
นโยบายดังกล่าวอยู่ใน /etc/apt/apt.conf.d/50unattended-upgrades ให้เปิดไฟล์นี้ขึ้นมาแล้วดูที่บล็อก Allowed-Origins บริเวณส่วนบนของไฟล์:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
"${distro_id}ESMApps:${distro_codename}-apps-security";
"${distro_id}ESM:${distro_codename}-infra-security";
};บรรทัด -security คือส่วนที่สำคัญ และถูกเปิดใช้งานไว้เป็นค่าเริ่มต้น นี่คือนโยบายแบบอนุรักษ์นิยม: อัปเดตความปลอดภัยจะถูกติดตั้งให้โดยอัตโนมัติ ส่วนอัปเดตฟีเจอร์ทั่วไปคุณต้องเป็นผู้เลือกติดตั้งเองเมื่อต้องการ คุณสามารถนำเครื่องหมายคอมเมนต์ออกจากบรรทัด "${distro_id}:${distro_codename}-updates" ในบล็อกเดียวกันเพื่อให้อัปเดตแบบ stable ปกติของ Ubuntu ติดตั้งโดยอัตโนมัติได้เช่นกัน การทำเช่นนี้จะขยายขอบเขตนโยบายไปยังคลัง -updates ของ Ubuntu เท่านั้น ไม่ใช่ทุก repository หรือ PPA บนเครื่อง และยังคงมีการตรวจสอบตามปกติ: เครื่องมือจะระงับแพ็กเกจใดก็ตามที่อาจทำให้เกิดการแจ้งเตือนให้ตั้งค่าไฟล์ (configuration-file prompt) และจะไม่ติดตั้งสิ่งใดหาก dependency ไม่ได้มาจากแหล่งที่อนุญาต สำหรับเซิร์ฟเวอร์ที่โฮสต์บริการที่คุณให้ความสำคัญ การติดตั้งเฉพาะแพตช์ความปลอดภัยโดยอัตโนมัติถือเป็นค่าเริ่มต้นที่ปลอดภัยกว่า ให้คงค่านี้ไว้ตามที่ตั้งมาแต่เดิม เว้นแต่คุณจะมีเหตุผลเฉพาะเจาะจงที่จะไม่ทำเช่นนั้น
ขั้นตอนที่ 3: จัดการการรีบูต
การอัปเดตบางอย่าง เช่น kernel หรือไลบรารีหลัก จะมีผลสมบูรณ์ก็ต่อเมื่อรีบูตเครื่องเท่านั้น unattended-upgrades จะไม่รีบูตเซิร์ฟเวอร์ของคุณเว้นแต่คุณจะสั่ง ซึ่งหมายความว่า kernel ที่แพตช์แล้วอาจค้างอยู่โดยไม่ได้ใช้งานจนกว่าคุณจะรีสตาร์ทเครื่อง ให้ตัดสินใจว่าต้องการจัดการเรื่องนี้อย่างไรและตั้งค่าใน 50unattended-upgrades:
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";การตั้งค่านี้จะรีบูตเซิร์ฟเวอร์ตอนตีสี่ เฉพาะในกรณีที่การอัปเดตจำเป็นต้องรีบูตเท่านั้น สำหรับ VPS เครื่องเดียวที่ไม่มีระบบ cluster เพื่อทำ failover การรีบูตสั้นๆ ในช่วงเช้ามืดมักเป็นสิ่งที่คุ้มค่าเพื่อแลกกับการมี kernel ที่ทันสมัยอยู่เสมอ หากเซิร์ฟเวอร์ของคุณรันบริการที่ไม่สามารถรีสตาร์ทโดยไม่คาดคิดได้ ให้ปิดการรีบูตอัตโนมัติไว้และสร้างนิสัยในการรีบูตด้วยตนเองหลังจากตรวจสอบ /var/run/reboot-required
ขั้นตอนที่ 4: ตรวจสอบการทำงาน
อย่ารอจนถึงวันถัดไปเพื่อดูว่างานรันหรือไม่ ให้ลองรันแบบจำลอง (dry run) เพื่อดูว่าระบบจะอัปเดตอะไรบ้างโดยไม่มีการเปลี่ยนแปลงจริง:
sudo unattended-upgrade --dry-run --debugผลลัพธ์จะแสดงรายการแพ็กเกจที่ระบบพิจารณาและแหล่งที่มา เพื่อให้คุณเห็นนโยบายการทำงานจริง หลังจากที่งานจริงรันไปแล้วอย่างน้อยหนึ่งครั้ง บันทึกจะอยู่ที่นี่:
cat /var/log/unattended-upgrades/unattended-upgrades.loglog นี้คือคำตอบของคำถามที่ว่า "เซิร์ฟเวอร์ของฉันกำลังอัปเดตตัวเองอยู่จริงหรือไม่" หากแสดงรายการแพ็กเกจความปลอดภัยที่ถูกติดตั้งตามกำหนดเวลา แสดงว่างานทำงานปกติ
ตำแหน่งของเครื่องมือนี้ในระบบ
การอัปเดตอัตโนมัติเป็นเพียงชั้นหนึ่งของการเสริมความปลอดภัยให้เซิร์ฟเวอร์ ไม่ใช่ทั้งหมด มันช่วยป้องกันไม่ให้ช่องโหว่ที่ทราบกันดีคงอยู่ยาวนาน แต่ไม่ได้ช่วยเรื่องการควบคุมผู้ที่ล็อกอินเข้ามาหรือสิ่งที่ถูกเปิดเผยสู่สาธารณะ ควรใช้งานร่วมกับ การเสริมความปลอดภัย SSH โดยใช้ key เท่านั้นเพื่อป้องกันการ brute-force, ใช้ UFW firewall แบบ default-deny เพื่อให้เข้าถึงได้เฉพาะพอร์ตที่คุณอนุญาต และใช้ unprivileged service users เพื่อไม่ให้แอปที่ถูกบุกรุกสามารถเข้าถึงทั้งระบบได้ แอปที่คุณโฮสต์เองก็มีความลับของมัน ดังนั้นหากเครื่องนี้รัน password vault ให้ใช้ Vaultwarden hardening pass เพื่อดูแล admin token และไฟล์สำรองข้อมูล ซึ่งการทำ apt patching ปกติไม่สามารถป้องกันได้ การแพตช์ช่วยปิดรูรั่วที่คุณรู้จัก ส่วนชั้นอื่นๆ จะช่วยจำกัดความเสียหายจากสิ่งที่คุณยังไม่รู้
FAQ
unattended-upgrades อัปเดตทุกอย่างหรือเฉพาะความปลอดภัย?
โดยค่าเริ่มต้นจะอัปเดตเฉพาะความปลอดภัยเท่านั้น บล็อก Allowed-Origins ใน /etc/apt/apt.conf.d/50unattended-upgrades จะเปิดใช้งานเฉพาะ origin -security และปล่อยให้การอัปเดตฟีเจอร์ทั่วไปเป็นหน้าที่ของคุณในการจัดการเอง นี่เป็นความตั้งใจของระบบ: แพตช์ความปลอดภัยมีความเสี่ยงต่ำและควรติดตั้งอัตโนมัติ ในขณะที่การอัปเกรดฟีเจอร์อาจเปลี่ยนพฤติกรรมของโปรแกรม ดังนั้นเซิร์ฟเวอร์ส่วนใหญ่ควรคงค่าเริ่มต้นที่เน้นความปลอดภัยไว้
การอัปเดตอัตโนมัติจะรีบูตเซิร์ฟเวอร์ของฉันหรือไม่?
จะรีบูตก็ต่อเมื่อคุณสั่งเท่านั้น ให้ตั้งค่า Unattended-Upgrade::Automatic-Reboot "true" และ Automatic-Reboot-Time ในไฟล์คอนฟิก แล้วเซิร์ฟเวอร์จะรีบูตในเวลานั้นหากการอัปเดตต้องการ เช่น หลังจากแพตช์ kernel หากปิดไว้ kernel ที่แพตช์แล้วจะรอจนกว่าคุณจะรีบูตเอง ให้ตรวจสอบ /var/run/reboot-required เพื่อดูว่ามีการรอรีบูตอยู่หรือไม่
ฉันจะตรวจสอบได้อย่างไรว่าการอัปเดตอัตโนมัติทำงานอยู่?
รัน sudo unattended-upgrade --dry-run --debug เพื่อดูว่าจะมีการอัปเดตอะไรบ้างโดยไม่มีการเปลี่ยนแปลงจริง และอ่าน /var/log/unattended-upgrades/unattended-upgrades.log เพื่อดูบันทึกการทำงานที่ผ่านมา การติดตั้งอัตโนมัติทุกครั้งจะถูกบันทึกใน /var/log/apt/history.log ด้วย หาก log แสดงว่ามีการติดตั้งแพ็กเกจความปลอดภัยตามกำหนดเวลา แสดงว่า timer ทำงานปกติ หากการรันแบบ dry run แสดงผล No packages found that can be upgraded unattended แสดงว่าทุกอย่างเป็นเวอร์ชันล่าสุดแล้ว หรือแหล่งที่มา (origins) ที่อนุญาตไว้แคบเกินไปจนไม่ตรงกับ repository ความปลอดภัย
unattended-upgrades เพียงพอที่จะทำให้เซิร์ฟเวอร์ปลอดภัยหรือไม่?
ไม่เพียงพอ แต่เป็นชั้นที่จำเป็น มันช่วยป้องกันไม่ให้ช่องโหว่ที่ทราบกันดีคงอยู่โดยไม่ได้รับการแก้ไข ซึ่งช่วยหยุดการบุกรุกรูปแบบที่พบบ่อยที่สุด แต่ไม่ได้ควบคุมการเข้าถึงหรือการเปิดเผยข้อมูล ควรใช้งานร่วมกับการเสริมความปลอดภัย SSH, firewall แบบ default-deny และการใช้ service users ที่มีสิทธิ์จำกัด เพื่อให้ได้เซิร์ฟเวอร์ที่ยากต่อการบุกรุกอย่างแท้จริง