SSD Nodes Learn 🎉 VPS เริ่ม $5.50/เดือน
คู่มือ Matt Connorโดย Matt Connor · อัปเดตเมื่อ 2026-08-13

วิธีอัปเดตความปลอดภัย FreeBSD ด้วย freebsd-update และ pkg

เรียนรู้วิธีจัดการความปลอดภัยบน FreeBSD ที่แยกการอัปเดต base system ผ่าน freebsd-update และตรวจสอบช่องโหว่ของแพ็กเกจด้วย pkg audit เพื่อป้องกันความเสี่ยงที่ตกหล่นไป

วิธีการจัดการอัปเดตความปลอดภัยของ FreeBSD

FreeBSD จัดการอัปเดตความปลอดภัยด้วยเครื่องมือแยกกันสองตัว เนื่องจากเซิร์ฟเวอร์ FreeBSD ประกอบด้วยส่วนประกอบสองส่วนที่แยกจากกัน ระบบพื้นฐาน (base system) ซึ่งหมายถึง kernel และ userland ที่มาพร้อมกับรุ่นที่ปล่อยออกมา จะได้รับการแพตช์ด้วย freebsd-update ส่วนทุกสิ่งที่ติดตั้งเพิ่มเติมหลังจากนั้นจะถือเป็นแพ็กเกจ ซึ่งจะได้รับการแพตช์ด้วย pkg หากคุณรันเครื่องมือตัวหนึ่งแล้วข้ามอีกตัวหนึ่งไป เครื่องของคุณจะได้รับการแพตช์เพียงครึ่งเดียว และไม่มีระบบใดในเครื่องที่จะแจ้งเตือนคุณเกี่ยวกับเรื่องนี้

SSD Nodes ไม่มีอิมเมจ FreeBSD ให้บริการ แผนบริการของเราทำงานบน Linux โพสต์นี้ถูกเขียนขึ้นเนื่องจากกลุ่มผู้ใช้งานมีความทับซ้อนกันอย่างสมบูรณ์ ผู้ที่ใช้งานเซิร์ฟเวอร์ Ubuntu และ Debian ของเรามักจะใช้งาน FreeBSD บนไฟร์วอลล์หรือบนเครื่องที่ได้รับมอบหมายมา รูปแบบการแพตช์แบบแยกส่วนนี้เป็นจุดที่ผู้ดูแลระบบ Linux มักจะพลาด จึงเป็นเหตุผลที่ควรบันทึกไว้ ทุกคำสั่ง รูปแบบคำแนะนำ และวันที่สนับสนุนด้านล่างนี้ได้รับการตรวจสอบกับ หน้าความปลอดภัยของ FreeBSD และหน้า manual ของโปรเจกต์ในเดือนสิงหาคม 2026 แล้ว

ข้อควรทราบก่อนใช้คำสั่ง FreeBSD ไม่ได้ติดตั้ง sudo มาให้ในระบบพื้นฐาน ทุกคำสั่งที่นี่ต้องการสิทธิ์ root ให้ใช้ su - หรือติดตั้ง sudo หรือ doas จากแพ็กเกจก่อนเริ่มใช้งาน

ระบบพื้นฐานและแพ็กเกจเป็นคนละส่วนกันโดยสิ้นเชิง

บน Ubuntu นั้น apt เป็นเจ้าของเครื่องทั้งหมด ทั้งเคอร์เนล, openssl, nginx และเครื่องมือที่คุณติดตั้งเองล้วนมาในรูปแบบไฟล์ .deb จากแหล่งเดียว และ apt upgrade จะจัดการอัปเดตทุกอย่างไปพร้อมกัน

FreeBSD แยกส่วนนี้ออกเป็นสองส่วน ระบบพื้นฐานถูกสร้างและกำหนดเวอร์ชันเป็นหน่วยเดียวกัน: 15.1-RELEASE-p3 คือตัวเลขชุดเดียวที่ครอบคลุมทั้งเคอร์เนล, C library, sshd และ OpenSSL เวอร์ชันที่อยู่ใน /usr/lib ทั้งหมดนี้ไม่ได้มาจาก pkg ส่วนซอฟต์แวร์อื่นทั้งหมดจะอยู่ใน /usr/local ซึ่งมาในรูปแบบไบนารีแพ็กเกจที่สร้างจาก ports tree และมีเวอร์ชันแยกต่างหาก

ดังนั้น ในหนึ่งเครื่องจึงสามารถมี OpenSSL สองชุด: ชุดพื้นฐานใน /usr/lib ซึ่งจะได้รับการแพตช์ผ่าน freebsd-update เท่านั้น และชุดแพ็กเกจใน /usr/local/lib ซึ่งจะได้รับการแพตช์ผ่าน pkg เท่านั้น โปรแกรมจะใช้งานชุดใดขึ้นอยู่กับว่าโปรแกรมนั้นถูกลิงก์ไว้กับชุดไหน และซอฟต์แวร์ที่ติดตั้งจากแพ็กเกจมักจะลิงก์กับชุดแพ็กเกจ การแพตช์ชุดหนึ่งจะไม่มีผลกับอีกชุดหนึ่ง

คำสั่งสามคำสั่งต่อไปนี้จะช่วยให้คุณทราบสถานะของระบบ:

freebsd-version -u
freebsd-version -k
uname -r

freebsd-version -u จะแสดงระดับการแพตช์ของ userland ที่ติดตั้งอยู่ freebsd-version -k จะแสดงระดับการแพตช์ของเคอร์เนลที่ติดตั้งอยู่ และ freebsd-version(1) จะอธิบายอย่างชัดเจนว่าเหตุใดค่านี้จึงไม่เหมือนกับ uname: "หากมีการติดตั้งเคอร์เนลใหม่แต่ระบบยังไม่ได้รีบูต freebsd-version จะแสดงเวอร์ชันและระดับการแพตช์ของเคอร์เนลตัวใหม่" uname -r จะแสดงเคอร์เนลที่กำลังทำงานอยู่จริงในขณะนี้ นอกจากนี้ยังมี freebsd-version -r ซึ่งแสดงเคอร์เนลที่กำลังทำงานอยู่เช่นกัน แต่ "ไม่ได้รับผลกระทบจาก environment variables" ซึ่งมีความสำคัญเมื่อใช้งานภายใน jail ที่มักจะมีการตั้งค่า UNAME_r เป็นค่าอื่น

ประกาศแจ้งเตือนด้านความปลอดภัยและรายการแก้ไขข้อผิดพลาด

ทีมงานด้านความปลอดภัยของ FreeBSD จะออกประกาศแจ้งเตือน 2 ประเภท ซึ่งมีความหมายแตกต่างกัน

Security Advisory ครอบคลุมช่องโหว่ด้านความปลอดภัยในระบบพื้นฐาน ตัวระบุจะมีรูปแบบดังนี้ FreeBSD-SA-26:55.elf: ประกอบด้วยตัวอักษร SA, เลขปี 2 หลัก, ลำดับเลขที่เพิ่มขึ้นตามปีนั้นๆ และตามด้วยชื่อคอมโพเนนต์ที่ได้รับผลกระทบ ตัวอย่างเช่น FreeBSD-SA-26:52.if_wg และ FreeBSD-SA-26:50.kqueue ทั้งสองฉบับถูกเผยแพร่เมื่อวันที่ 2026-07-29 โดยสามารถดูรายการทั้งหมดได้ที่ หน้าประกาศแจ้งเตือนของ FreeBSD

Errata Notice ครอบคลุมปัญหาด้านความถูกต้องหรือเสถียรภาพที่ควรผลักดันเข้าสู่ release branch โดยไม่มีผลกระทบด้านความปลอดภัย รูปแบบจะเหมือนกันแต่ใช้ EN แทนที่ SA เช่น FreeBSD-EN-26:19.zfs, FreeBSD-EN-26:18.tzdata ตัวอย่างที่พบบ่อยคือการอัปเดตข้อมูลเขตเวลา (time zone data) ซึ่งไม่มีใครสามารถใช้ข้อมูลเขตเวลาที่ล้าสมัยมาโจมตีคุณได้ แต่เวลาที่แสดงบนระบบของคุณจะคลาดเคลื่อนจนกว่าคุณจะติดตั้งตัวแก้ไข รายการ Errata ทั้งหมดจะแสดงอยู่ที่ หน้าประกาศแจ้งเตือน Errata ของ FreeBSD

ประกาศทั้งสองประเภทจะถูกลงนามด้วย PGP (pretty good privacy) key ของเจ้าหน้าที่ความปลอดภัยและจัดเก็บไว้ที่ security.FreeBSD.org อีกทั้งยังถูกส่งมายังเครื่องของคุณผ่านทาง freebsd-update อีกด้วย

ส่วนนี้คือจุดที่ผู้ดูแลระบบ Linux มักเข้าใจผิด: ประกาศทั้งสองประเภทไม่ครอบคลุมถึงแพ็กเกจ หน้าเว็บด้านความปลอดภัยระบุไว้อย่างชัดเจนว่า ปัญหาที่พบใน FreeBSD Ports Collection "จะถูกแยกไปอยู่ในเอกสาร FreeBSD VuXML" ช่องโหว่ระยะไกลในแพ็กเกจ nginx จะไม่มีวันได้รับหมายเลข SA หากคุณติดตามเพียงแค่ฟีดของ advisory คุณจะไม่มีทางทราบถึงปัญหาเหล่านั้นเลย

ฉันจะทราบข่าวการอัปเดตความปลอดภัยของ FreeBSD ได้อย่างไร

รายชื่ออีเมลที่คุณควรเข้าร่วมคือ freebsd-security-notifications รายชื่อนี้มีการกลั่นกรองเนื้อหาและมีปริมาณข้อความต่ำ โดยจะส่งประกาศแจ้งเตือนความปลอดภัย (advisories) และประกาศแก้ไขข้อผิดพลาด (errata notices) โดยตรง คุณสามารถสมัครรับข้อมูลได้ที่ lists.freebsd.org

freebsd-announce เป็นรายชื่อที่มีการกลั่นกรองเช่นกันและจะส่งประกาศแจ้งเตือนความปลอดภัยควบคู่ไปกับประกาศการออกรุ่นซอฟต์แวร์ ดังนั้นจึงเหมาะหากคุณต้องการรายชื่อเดียวที่ครอบคลุมทุกเรื่อง ส่วน freebsd-security เป็นรายชื่อสำหรับการอภิปราย ซึ่งมีเนื้อหาที่เป็นประโยชน์ในการอ่าน แต่ไม่ใช่ช่องทางที่คุณจะใช้เพื่อรับทราบว่าคุณจำเป็นต้องติดตั้งแพตช์หรือไม่

รายชื่อทั้งหมดนี้แจ้งเฉพาะข่าวสารของระบบพื้นฐาน (base system) เท่านั้น ข้อมูลช่องโหว่ของแพ็กเกจจะไม่ถูกส่งผ่านทางอีเมล คุณสามารถตรวจสอบข้อมูลเหล่านั้นได้โดยการรันคำสั่งที่เกี่ยวข้อง

pkg audit และฐานข้อมูลเบื้องหลัง

VuXML หรือ Vulnerabilities and Exposures Markup Language คือบันทึกปัญหาความปลอดภัยของ ports และ packages ในโครงการ FreeBSD แต่ละรายการจะระบุชื่อ package ที่ได้รับผลกระทบ, ช่วงเวอร์ชันที่มีช่องโหว่, รหัส CVE (Common Vulnerabilities and Exposures) และคำอธิบายโดยย่อ คุณสามารถเรียกดูข้อมูลทั้งหมดได้ที่ ดัชนี VuXML ซึ่งจัดเรียงตามชื่อ package, ตามรหัส CVE หรือตามวันที่

pkg audit คือเครื่องมือที่ใช้สำหรับอ่านข้อมูลดังกล่าว:

pkg audit -F

-F จะดึงฐานข้อมูลฉบับล่าสุดมาก่อนเริ่มการตรวจสอบ ควรใช้งานคำสั่งนี้ทุกครั้ง หากไม่มี -F ระบบจะตรวจสอบเทียบกับฐานข้อมูลเดิมที่ค้างอยู่ในเครื่อง ซึ่งอาจล้าหลังไปหลายเดือน ทำให้ผลลัพธ์ที่ได้ไม่มีความหมาย คำสั่งนี้จะเปรียบเทียบเวอร์ชันของ package ที่ติดตั้งอยู่กับรายการใน VuXML ทั้งหมด จากนั้นจะแสดงรายการที่พบพร้อมหมายเลข CVE และลิงก์ไปยังหน้า VuXML และปิดท้ายด้วยสรุปจำนวนปัญหาที่พบใน package ที่ติดตั้งอยู่

ยังมีอีก 2 flags จาก pkg-audit(8) ที่ควรทราบ pkg audit -r จะ "แสดงรายการ package ที่มี dependency เชื่อมโยงกับ package ที่มีช่องโหว่ ซึ่งอาจได้รับผลกระทบไปด้วย" ทำให้คุณทราบว่า library ที่มีช่องโหว่นั้นส่งผลกระทบต่อสิ่งอื่นที่ติดตั้งอยู่ถึง 6 รายการ ส่วน pkg audit -R จะแสดงผลลัพธ์ในรูปแบบ JSON หรือรูปแบบอื่นที่เครื่องอ่านได้ ซึ่งเหมาะสำหรับการนำไปใช้กับระบบตรวจสอบ (monitoring)

package pkg จะติดตั้งสคริปต์ periodic ไว้ที่ /usr/local/etc/periodic/security/410.pkg-audit โดยจะทำงานเป็นส่วนหนึ่งของการตรวจสอบความปลอดภัยประจำวันและส่งอีเมลผลลัพธ์ไปยัง root คุณสามารถตรวจสอบว่าเปิดใช้งานอยู่หรือไม่ด้วยบรรทัดคำสั่งใน /etc/periodic.conf:

daily_status_security_pkgaudit_enable="YES"

อีเมลประจำวันดังกล่าวคือสิ่งที่ใกล้เคียงที่สุดที่ FreeBSD มีเมื่อเทียบกับ แนวทางการอัปเดตอัตโนมัติบน Ubuntu แต่ความแตกต่างคือหัวใจสำคัญของเรื่องนี้: unattended-upgrades จะติดตั้งการแก้ไขให้คุณในขณะที่คุณหลับ แต่ pkg audit จะทำหน้าที่เพียงแจ้งให้คุณทราบว่าจำเป็นต้องมีการแก้ไขเท่านั้น pkg audit ทำหน้าที่รายงานผล ไม่มีการแพตช์ระบบให้ ไม่มีสิ่งใดในระบบ FreeBSD มาตรฐานที่จะติดตั้งการอัปเดตความปลอดภัยโดยที่คุณไม่ได้เป็นผู้ดำเนินการเอง

การแก้ไขแพ็กเกจที่มีช่องโหว่

pkg update
pkg upgrade

ในคลังแพ็กเกจของ FreeBSD ไม่มีช่องทางสำหรับอัปเดตเฉพาะความปลอดภัย (security-only pocket) โดยเฉพาะ Ubuntu สามารถดึงข้อมูลจาก noble-security เพียงอย่างเดียวและปล่อยให้แพ็กเกจอื่นคงสถานะเดิมไว้ได้ แต่ FreeBSD ไม่มีกลไกที่เทียบเท่ากัน ดังนั้นการแก้ไขแพ็กเกจที่มีช่องโหว่เพียงตัวเดียวจึงหมายถึงการยอมรับเวอร์ชันล่าสุดที่คลังแพ็กเกจมีอยู่ในขณะนั้น รวมถึงการอัปเดต dependency อื่นๆ ที่เกี่ยวข้องตามไปด้วย ควรวางแผนการแพตช์แพ็กเกจให้เป็นส่วนหนึ่งของการเปลี่ยนแปลงระบบ ไม่ใช่การทำงานเบื้องหลังทั่วไป

สาขาของคลังแพ็กเกจ (repository branch) ที่คุณเลือกใช้จะเป็นตัวกำหนดความเร็วในการได้รับแพตช์แก้ไข ค่าเริ่มต้นคือสาขา quarterly ซึ่ง คู่มือ อธิบายไว้ว่าให้ "ประสบการณ์ที่คาดการณ์ได้และเสถียรกว่า" โดยจะรับเฉพาะการอัปเดตที่ไม่ใช่ฟีเจอร์ใหม่ ส่วนสาขา latest จะได้รับเวอร์ชันใหม่ล่าสุดของทุกซอฟต์แวร์ ดังนั้นเมื่อ pkg audit -F รายงานว่าแพ็กเกจมีช่องโหว่ แต่ pkg upgrade แจ้งว่าไม่มีรายการให้อัปเดต นั่นหมายความว่าแพตช์แก้ไขยังไม่ถูกส่งเข้ามายังสาขาที่คุณใช้งานอยู่ และนี่คือกลไกที่ทำให้เกิดความสับสนดังกล่าว

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

mkdir -p /usr/local/etc/pkg/repos
cp /etc/pkg/FreeBSD.conf /usr/local/etc/pkg/repos/FreeBSD.conf

เปลี่ยน quarterly เป็น latest ในบรรทัด url ของไฟล์สำเนา จากนั้นรันคำสั่ง pkg update -f เพื่อดึงแคตตาล็อกใหม่ ควรใช้วิธีคัดลอกไฟล์แทนการพิมพ์ชื่อคลังแพ็กเกจจากความจำ เนื่องจากชื่อที่อยู่ภายใน /etc/pkg/FreeBSD.conf คือชื่อที่ระบบของคุณใช้งานจริง และไฟล์ที่อยู่ภายใต้ /usr/local/etc/pkg/repos จะแทนที่คลังแพ็กเกจที่มีชื่อตรงกันทุกประการเท่านั้น

การติดตั้งแพตช์พื้นฐานของระบบ

freebsd-update fetch
freebsd-update install

fetch จะดาวน์โหลดแพตช์สำหรับรุ่นที่คุณใช้งานอยู่และแสดงรายการไฟล์ที่จะถูกเปลี่ยนแปลง หากไม่มีรายการใดต้องดำเนินการ โปรแกรมจะแสดงข้อความ No updates needed to update system to 15.1-RELEASE-p3. แล้วจบการทำงาน หากมีรายการที่ต้องทำ โปรแกรมจะแจ้งให้คุณเรียกใช้คำสั่งติดตั้ง การเปลี่ยนแปลงจะยังไม่เกิดขึ้นจนกว่าคุณจะเรียกใช้ freebsd-update install ดังนั้นการเรียกใช้ fetch จึงมีความปลอดภัยและสามารถทำได้ตลอดเวลา

freebsd-update(8) ให้บริการอัปเดตแบบไบนารีสำหรับรุ่น ALPHA, BETA, RC และ RELEASE เท่านั้น ไม่รองรับรุ่น PRERELEASE, STABLE หรือ CURRENT หากคุณติดตาม stable/15 คุณจะต้องสร้างระบบจากซอร์สโค้ด และเครื่องมือนี้จะไม่มีข้อมูลสำหรับคุณ

ให้ทำการดาวน์โหลดโดยอัตโนมัติแต่คงการติดตั้งไว้เป็นแบบแมนนวล บรรทัดสำหรับ /etc/crontab ในคู่มือมีดังนี้:

@daily                                  root    freebsd-update cron

freebsd-update cron จะหน่วงเวลาแบบสุ่มระหว่าง 1 ถึง 3600 วินาที จากนั้นจึงดาวน์โหลดอัปเดตเช่นเดียวกับ fetch และส่งอีเมลแจ้ง root เมื่อมีรายการรอการติดตั้ง การหน่วงเวลาแบบสุ่มมีไว้เพื่อป้องกันไม่ให้เครื่อง FreeBSD ทุกเครื่องบนอินเทอร์เน็ตเข้าถึงเซิร์ฟเวอร์อัปเดตพร้อมกันในวินาทีเดียว

มีสองสิ่งที่มักทำให้ผู้ใช้สับสนในผลลัพธ์ที่แสดง src component not installed, skipped เป็นเรื่องปกติสำหรับเซิร์ฟเวอร์ที่ไม่มีซอร์สทรีและไม่ใช่ข้อผิดพลาด ชุดของคอมโพเนนต์จะถูกควบคุมโดยบรรทัด Components ใน /etc/freebsd-update.conf โดยมีตัวเลือกคือ src, world และ kernel

หากการติดตั้งเกิดข้อผิดพลาด freebsd-update rollback จะถอนการติดตั้งอัปเดตล่าสุดที่เพิ่งติดตั้งไป หากคุณใช้ ZFS เป็น root คุณสามารถทำสิ่งที่ดียิ่งกว่านั้นได้โดยการสร้าง boot environment ไว้ก่อน:

bectl create pre-patch
freebsd-update fetch install

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

FreeBSD release ของฉันยังได้รับการสนับสนุนอยู่หรือไม่?

แต่ละ release จะได้รับการสนับสนุนในช่วงเวลาที่กำหนด ซึ่งเผยแพร่ไว้เป็นตาราง branch บนหน้า security ณ เดือนสิงหาคม 2026 ตารางดังกล่าวระบุไว้ดังนี้:

  • releng/15.1 ซึ่งคือ 15.1-RELEASE จนถึงวันที่ 31 มีนาคม 2027
  • releng/15.0 ซึ่งคือ 15.0-RELEASE จนถึงวันที่ 30 กันยายน 2026
  • releng/14.4 ซึ่งคือ 14.4-RELEASE จนถึงวันที่ 31 ธันวาคม 2026
  • stable/15 จนถึงวันที่ 31 ธันวาคม 2029
  • stable/14 จนถึงวันที่ 30 พฤศจิกายน 2028

Point release จะมีช่วงเวลาสนับสนุนที่สั้น 15.0-RELEASE จะสิ้นสุดการสนับสนุนหลังจากที่เขียนบทความนี้ประมาณเจ็ดสัปดาห์ เนื่องจาก 15.1 ได้ถูกปล่อยออกมาและเริ่มนับถอยหลังการสนับสนุนแล้ว ส่วน stable branch จะมีอายุการใช้งานนานหลายปี ซึ่งเป็น source branch ที่ freebsd-update ไม่ได้ให้บริการ

ตรวจสอบเวอร์ชันของคุณด้วย freebsd-version -u แล้วนำไปเปรียบเทียบกับตารางดังกล่าว นอกจากนี้ freebsd-update ยังคอยแจ้งเตือนคุณอีกด้วย เมื่อใกล้ถึงวันสิ้นสุดการสนับสนุน fetch จะแสดงข้อความ:

WARNING: FreeBSD 15.0-RELEASE is approaching its End-of-Life date.
It is strongly recommended that you upgrade to a newer
release within the next 2 months.

เมื่อพ้นกำหนดวันที่ดังกล่าว คำเตือนจะเปลี่ยนเป็น WARNING: FreeBSD 15.0-RELEASE HAS PASSED ITS END-OF-LIFE DATE. release ที่ไม่ได้รับการสนับสนุนแล้วจะยังคงทำงานต่อไปได้ แต่จะไม่ได้รับ security advisory อีกต่อไป ซึ่งหมายความว่าช่องโหว่ใน base system รายการถัดไปจะกลายเป็นความเสี่ยงที่คุณต้องแบกรับไว้ตลอดไป

การอัปเกรด release ทำได้โดยใช้ freebsd-update -r 15.1-RELEASE upgrade ตามด้วย freebsd-update install จากนั้นทำการ reboot แล้วใช้ freebsd-update install อีกครั้ง ตามด้วย pkg-static upgrade -f เพื่อติดตั้ง package ใหม่ทั้งหมดให้สอดคล้องกับ library เวอร์ชันใหม่ และปิดท้ายด้วย freebsd-update install ทั้งนี้ handbook ระบุว่าอาจมีขั้นตอนการติดตั้งเพียงสองระยะแทนที่จะเป็นสาม ขึ้นอยู่กับว่ามีการปรับเปลี่ยนเลขเวอร์ชันของ library หรือไม่ โปรดจองช่วงเวลาบำรุงรักษาและอ่าน คู่มือการตั้งค่าเซิร์ฟเวอร์ FreeBSD 15 ก่อนเริ่มดำเนินการ

การรีบูตหรือการรีสตาร์ทเซอร์วิสเพียงอย่างเดียวเพียงพอหรือไม่

FreeBSD ตอบคำถามนี้ด้วยการเปรียบเทียบเพียงหนึ่งรายการ:

freebsd-version -k
uname -r

freebsd-version -k คือเคอร์เนลที่อยู่บนดิสก์ ส่วน uname -r คือเคอร์เนลที่อยู่ในหน่วยความจำ หากสตริงทั้งสองไม่ตรงกัน หมายความว่ามีการติดตั้งเคอร์เนลใหม่และคุณยังไม่ได้ใช้งานเคอร์เนลนั้น ดังนั้นจึงจำเป็นต้องรีบูต หากสตริงตรงกัน หมายความว่าแพตช์ไม่ได้แตะต้องเคอร์เนลและการรีบูตก็ไม่ได้ประโยชน์อะไร

สำหรับการแพตช์ userland ให้รีสตาร์ททุกอย่างที่ใช้งานโค้ดที่ถูกแพตช์ การแก้ไข OpenSSL พื้นฐานใน /usr/lib จะไม่มีผลใดๆ ต่อ sshd ที่เริ่มทำงานไปเมื่อสามสัปดาห์ก่อนและยังคงโหลดไลบรารีเวอร์ชันเก่าไว้ในพื้นที่หน่วยความจำของตน ไฟล์บนดิสก์เป็นไฟล์ใหม่ แต่กระบวนการที่กำลังทำงานอยู่ไม่ใช่

service sshd restart

กฎเดียวกันนี้ครอบคลุมถึงแพ็กเกจต่างๆ pkg upgrade จะแทนที่ไบนารีบนดิสก์ในขณะที่กระบวนการที่กำลังทำงานอยู่ยังคงเปิดไฟล์เก่าค้างไว้ ดังนั้น service nginx restart จึงเป็นขั้นตอนที่ทำให้การแก้ไขมีผลจริง

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

การแพตช์เครื่องที่รัน jails

jail ใช้งาน kernel ร่วมกับ host ดังนั้นเมื่อมีประกาศแจ้งเตือนเกี่ยวกับ kernel จึงถือเป็นปัญหาของ host และทุก jail บนเครื่องนั้นจะได้รับผลกระทบไปด้วย การแพตช์ host และรีบูตเครื่องจะถือว่าการจัดการในส่วนของ kernel สำหรับทุก jail เสร็จสิ้นแล้ว ส่วน userland ภายในแต่ละ jail เป็นการติดตั้งแยกต่างหากซึ่งมีระดับการแพตช์ของตัวเอง โดย freebsd-version -j <jail> จะรายงานข้อมูลนี้จากฝั่ง host ส่วนแพ็กเกจภายใน jail ก็แยกจากกันเช่นกัน โดย pkg -j <jail> audit -F จะทำหน้าที่ตรวจสอบแพ็กเกจเหล่านั้นโดยไม่จำเป็นต้องเข้าไปใน jail การแบ่งแยก kernel ที่ใช้ร่วมกันกับ userland ที่แยกจากกันนี้ คือความแตกต่างเชิงโครงสร้างแบบเดียวกับที่กำหนด วิธีการเปรียบเทียบ jails กับ Docker containers

การแปลความหมายสำหรับ Ubuntu

นิสัยการใช้งาน FreeBSD แต่ละอย่างมีสิ่งที่เทียบเคียงกันได้ คุณจึงสามารถนำกิจวัตรเดิมไปปรับใช้ได้ทั้งสองทิศทาง

  • การแพตช์ระบบพื้นฐาน: ใช้ freebsd-update fetch ตามด้วย freebsd-update install สำหรับ Ubuntu ให้ใช้ apt update && apt upgrade ซึ่งครอบคลุมทั้งระบบพื้นฐานและส่วนประกอบอื่นๆ ทั้งหมดในคราวเดียว
  • ซอฟต์แวร์จากภายนอก: ใช้ pkg update && pkg upgrade บน FreeBSD ส่วนบน Ubuntu ให้ใช้ apt เช่นเดิม
  • การตรวจสอบช่องโหว่ที่ทราบ: ใช้ pkg audit -F บน FreeBSD สำหรับ Ubuntu 24.04 คำสั่งที่ใกล้เคียงที่สุดคือ pro security-status ซึ่งจะแสดงรายการอัปเดตความปลอดภัยสำหรับแพ็กเกจที่ติดตั้งไว้ รวมถึงเนื้อหาจาก Expanded Security Maintenance
  • การติดตั้งอัตโนมัติ: unattended-upgrades บน Ubuntu จะทำการอัปเดตความปลอดภัยให้คุณโดยอัตโนมัติ FreeBSD ไม่มีฟังก์ชันที่เทียบเท่ากัน ดังนั้น freebsd-update cron จะทำหน้าที่ดาวน์โหลดและส่งอีเมลแจ้งเตือนในขณะที่คุณดำเนินการติดตั้งด้วยตนเอง
  • ฟีดประกาศความปลอดภัย: freebsd-security-notifications จะแสดงรายการ FreeBSD-SA และ FreeBSD-EN ส่วน ubuntu-security-announce จะแสดงรายการ Ubuntu Security Notices
  • ฐานข้อมูลช่องโหว่: ใช้ VuXML สำหรับพอร์ตและแพ็กเกจของ FreeBSD ส่วน Ubuntu ใช้ Ubuntu CVE tracker สำหรับแพ็กเกจของ Ubuntu
  • การตรวจสอบการรีบูต: ใช้ freebsd-version -k เทียบกับ uname -r บน FreeBSD ส่วนบน Ubuntu ให้ตรวจสอบการมีอยู่ของไฟล์ /var/run/reboot-required
  • ระยะเวลาการสนับสนุน: ดูได้จากตาราง branch บนหน้าความปลอดภัยของ FreeBSD ส่วนบน Ubuntu ให้ดูจากตารางกำหนดการปล่อยซอฟต์แวร์และ pro security-status

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

FAQ

freebsd-update แพตช์แพ็กเกจของฉันด้วยหรือไม่?

ไม่ freebsd-update ครอบคลุมเฉพาะระบบพื้นฐานเท่านั้น ซึ่งหมายถึง kernel และ userland ที่มาพร้อมกับ release นั้นๆ ซอฟต์แวร์ที่ติดตั้งภายใต้ /usr/local มาจากแพ็กเกจและจะถูกแพตช์ด้วย pkg upgrade ให้รัน pkg audit -F เพื่อตรวจสอบว่าแพ็กเกจที่ติดตั้งตัวใดมีช่องโหว่ที่ทราบแล้ว เนื่องจากประกาศความปลอดภัยของระบบพื้นฐานจะไม่กล่าวถึงแพ็กเกจเหล่านี้ และ mailing list ด้านความปลอดภัยก็ไม่มีการแจ้งเตือนเรื่องดังกล่าว

ฉันจะทราบได้อย่างไรว่าการอัปเดต FreeBSD จำเป็นต้องรีบูตหรือไม่?

ให้เปรียบเทียบ freebsd-version -k กับ uname -r คำสั่งแรกจะแสดง kernel ที่ติดตั้งอยู่ในดิสก์ รวมถึงตัวที่เพิ่งเขียนลงไปแต่ยังไม่ได้บูต ส่วนคำสั่งที่สองจะแสดง kernel ที่กำลังทำงานอยู่ หากสตริงไม่ตรงกันแสดงว่าคุณจำเป็นต้องรีบูต หากสตริงตรงกันแสดงว่าแพตช์นั้นเป็นเพียงส่วนของ userland เท่านั้น ให้รีสตาร์ทบริการที่เกี่ยวข้องแทน เช่น service sshd restart เนื่องจากกระบวนการที่กำลังทำงานอยู่จะยังคงเรียกใช้ library เวอร์ชันเก่าที่ถูก map ไว้จนกว่าจะมีการรีสตาร์ท

Security Advisory และ Errata Notice แตกต่างกันอย่างไร?

Security Advisory เช่น FreeBSD-SA-26:55.elf จะแก้ไขช่องโหว่ด้านความปลอดภัยในระบบพื้นฐาน ส่วน Errata Notice เช่น FreeBSD-EN-26:18.tzdata จะแก้ไขปัญหาความถูกต้องหรือเสถียรภาพที่ไม่มีผลกระทบด้านความปลอดภัย เช่น ข้อมูลเขตเวลาที่ล้าสมัย ทั้งสองรูปแบบใช้รูปแบบปี ตามด้วยเครื่องหมายทวิภาค และเลขลำดับของคอมโพเนนต์ ทั้งคู่ได้รับการลงนามโดย Security Officer และส่งมอบผ่าน freebsd-update โดยที่ทั้งสองอย่างไม่ครอบคลุมถึงซอฟต์แวร์ที่ติดตั้งจาก ports หรือแพ็กเกจ

FreeBSD มีฟีเจอร์เทียบเท่ากับ unattended-upgrades หรือไม่?

ไม่มีในระบบพื้นฐาน freebsd-update cron จะดาวน์โหลดแพตช์พื้นฐานที่ค้างอยู่และส่งอีเมลแจ้ง root แต่จะไม่ติดตั้งให้โดยอัตโนมัติ สคริปต์ periodic ที่ pkg ติดตั้งไว้จะรัน pkg audit ทุกวันและส่งผลลัพธ์ทางอีเมล แต่ก็ไม่มีการอัปเกรดใดๆ การติดตั้งแบบอัตโนมัติเป็นสิ่งที่คุณต้องสร้างขึ้นเองด้วย cron job และเนื่องจากการอัปเกรดแพ็กเกจของ FreeBSD จะเป็นการดึงเวอร์ชันใหม่ล่าสุดแทนที่จะเป็น backport เฉพาะด้านความปลอดภัย ผู้ดูแลระบบส่วนใหญ่จึงเลือกที่จะอ่านอีเมลและติดตั้งด้วยตนเอง

ฉันจะตรวจสอบได้อย่างไรว่า FreeBSD release ของฉันยังได้รับการสนับสนุนอยู่หรือไม่?

ให้รัน freebsd-version -u เพื่อดูเวอร์ชันของ userland จากนั้นเปรียบเทียบกับตาราง branch ที่ได้รับการสนับสนุนในหน้าเว็บความปลอดภัยของ FreeBSD โดย point release จะมีช่วงเวลาสนับสนุนสั้น: ณ เดือนสิงหาคม 2026 รุ่น 15.0-RELEASE จะสิ้นสุดการสนับสนุนในวันที่ 30 กันยายน 2026 ในขณะที่ 15.1-RELEASE จะสนับสนุนถึงวันที่ 31 มีนาคม 2027 freebsd-update fetch จะแจ้งเตือนคุณเมื่อใกล้ถึงวันดังกล่าว และเมื่อผ่านวันที่กำหนดไปแล้ว ระบบจะแสดงบรรทัดที่ระบุว่า release ดังกล่าวได้สิ้นสุดอายุการใช้งาน (HAS PASSED ITS END-OF-LIFE DATE) แล้ว หลังจากจุดนั้นจะไม่มีประกาศความปลอดภัยใดๆ ที่เกี่ยวข้องกับคุณอีกต่อไป

#freebsd#security#patching#advisories#pkg