เราต่างทราบกันดีว่า
ซอฟต์แวร์ทุกชนิดล้วนมีข้อบกพร่องให้โปรแกรมเมอร์ต้องแก้ไข ปรับปรุง
พัฒนากันไม่รู้จบ
โชคดีที่ระบบปฏิบัติการลีนุกซ์ถูกสร้างขึ้นโดยอาศัยโมเดลการพัฒนาซอฟต์แวร์
โอเพ่นซอร์ส ทำให้ได้รับการปรับปรุงแก้ไขต่อเนื่องไม่มีวันจบสิ้น
แต่ถึงอย่างไรก็ตามในโลกนี้ใม่มีอะไรที่จะสมบูรณ์แบบไปทั้งหมด
แม้แต่ระบบปฏิบัติการลีนุกซ์เองก็ยังคงมี “จุดอ่อน”
ที่เมื่อสะกิดโดนเมื่อใดก็ถือเป็น “จุดตาย” ได้ทันที
ด้วยการทำความเข้าใจอย่างลึกซึ้งเท่านั้นจึงจะเป็น “เกราะป้องกัน”
ได้อย่างดีที่สุด
“จุดตาย” ที่ผู้เขียนนำมาเสนอนี้ มีจุดประสงค์เพื่อบอกเล่าประสบการณ์
และเป็นแนวทางให้แก่ผู้สนใจ
ศึกษาระบบปฏิบัติการลีนุกซ์ได้นำไปวางแผนป้องกัน
เพิ่มความระมัดระวังในการปฏิบัติงาน
รวมไปถึงช่วยให้เข้าใจการทำงานของระบบปฏิบัติการลีนุกซ์มากยิ่งขึ้นในโอกาส
ต่อไป มาเริ่มกันเลยนะครับ
จุดตายที่ 1 MBR
MBR ย่อมาจาก Master Boot Record
เป็นจุดเริ่มต้นของระบบปฏิบัติการทุกชนิดที่บูตด้วยฮาร์ดดิสก์
พื้นที่ขนาดจิ๋วแค่ 512 ไบต์ที่อยู่บริเวณส่วนแรกสุดของฮาร์ดดิสก์นี้เอง
เป็นที่เก็บโปรแกรมประเภท Boot Loader ไว้
สำหรับระบบปฏิบัติการลินุกซ์รุ่นปัจจุบันนิยมใช้กันก็คือโปรแกรมชื่อ GRUB
นั่นเอง ซึ่งโปรแกรม GRUB
นี้มีหน้าที่เริ่มต้นโหลดเคอร์เนลลินุกซ์เข้าสู่หน่วยความจำของเครื่องพีซี
อันเป็นขั้นตอนสำคัญที่สุดของการเริ่มต้นระบบเลยก็ว่าได้
ส่วนของโปรแกรม GRUB ที่ติดตั้งอยู่ที่ MBR นี้
ไม่ใช่ตัวโปรแกรมทั้งหมด หากแต่เป็นเพียงเฉพาะส่วนหนึ่งที่เรียกกันว่า
Stage 1 ของ GRUB เท่านั้น ซึ่งมันจะค้นหา Stage 1.5
ของตัวมันเองไล่ลำดับไปจนถึงเคอร์เนลในที่สุด จากความสำคัญดังกล่าวมานี้
จะเห็นได้ว่าหาก MBR และ GRUB
ที่ฝังอยู่ในส่วนต้นของฮาร์ดดิสก์ได้รับความเสียหายย่อมส่งผลให้ระบบไม่
สามารถทำงานได้ นั่นคือ
ระบบปฏิบัติการลินุกซ์ของเราจะบูตไม่ขึ้นอย่างแน่นอน
และถือว่าเป็นจุดตายที่พบค่อนข้างบ่อยมากอาการหนึ่ง
แนวทางป้องกัน “จุดตายที่ 1” ทำได้โดยสำรอง MBR ไว้ในแผ่นดิสก์
โดยใช้คำสั่งหรือโปรแกรมสำเร็จรูปก็ได้
และในกรณีที่ต้องการใช้หลายระบบปฏิบัติการในเครื่องเดียวกันควรติดตั้งระบบ
ปฏิบัติการวินโดวส์ “ก่อน” ลีนุกซ์เสมอ
เพราะการติดตั้งวินโดวส์จะเขียนข้อมูลทับ GRUB Stage 1 ให้เสียหายได้
ส่วนการแก้ไขปัญหากรณีที่ GRUB Stage 1 โดนทำลายไปแล้ว
จะต้องใช้แผ่นบูตของลีนุกซ์บูตแทนฮาร์ดดิสก์ หรือใช้เทคนิคที่เรียกว่า
Linux Rescue ก็ได้เช่นกัน
จุดตายที่ 2 คอนฟิกของ GRUB
เราได้ทราบถึงความสำคัญของโปรแกรม GRUB ไปพอสมควรแล้ว และทราบแล้วว่า
GRUB ไม่ได้อยู่ที่ MBR เท่านั้น แต่ยังมีส่วนประกอบอื่นๆ อีกในไดเร็คทอรี่
/boot/grub เรียกว่าเป็นคอนฟิกทั้งหมดของ GRUB ก็ได้
ในพื้นที่นี้มีไฟล์สำคัญๆ ได้แก่ grub.conf stage1 e2fs_stage1_5 และ
stage2
โดยเฉพาะไฟล์ grub.conf นั้น มีรายละเอียดการทำงานระบุไว้ภายใน
ทั้งยังเป็นไฟล์ข้อความธรรมดาอีกด้วย
จึงมีความเสี่ยงสูงมากที่จะถูกเปลี่ยนแปลงแก้ไข
จนมีผลทำให้ระบบไม่สามารถบูตได้ตามปรกติ
หรือมีโอกาสที่ผู้ที่บุกรุกเข้าสู่ระบบจะทำการแก้ไขคอนฟิกเพื่อให้เคอร์เนล
(ซึ่ง GRUB เป็นผู้กระตุ้นให้ทำงาน)
มีการทำงานที่เอื้อต่อการเปิดช่องโหว่ขึ้น
ซึ่งอาจนำไปสู่หายนะที่ร้ายแรงยิ่งขึ้นสำหรับเซิร์ฟเวอร์ในระบบอินเตอร์เน็ต
แนวทางการป้องกัน “จุดตายที่ 2” คือ ควรใช้เซ็ต immutable bit
เพื่อป้องกันการแก้ไขไฟล์โดยไม่ตั้งใจ และ
ควรกำหนดพารามิเตอร์ในการเม้าต์พื้นที่นี้เป็นแบบอ่านได้เท่านั้น (Read
Only)
สำหรับการแบ๊คอัพคอนฟิกไว้คงไม่ต้องกล่าวให้เปลืองเวลาเพราะเป็นภารกิจปรกติ
ของผู้ดูแลระบบที่ทราบกันดีอยู่แล้ว
จุดตายที่ 3 เคอร์เนลและไฟล์ประกอบทั้งหมด
คงปฏิเสธไม่ได้ว่า เคอร์เนล คือ หัวใจสำคัญของระบบปฏิบัติการลีนุกซ์
“จุดตายที่ 3” จึงตกอยู่ที่ /boot
ซึ่งเป็นไดเร็คทอรี่ที่จัดเก็บไฟล์เคอร์เนลรวมทั้งไฟล์อื่นๆ
ที่ร่วมกันทำงานกับเคอร์เนล
โดยเฉพาะในขั้นตอนของการบูตระบบในครั้งแรกที่เปิดเครื่อง
เราไม่อาจย้ายตำแหน่งที่เก็บเคอร์เนลไปที่อื่นได้
เหตุผลเนื่องมาจากข้อจำกัดของโปรแกรมประเภท Boot Loader (เช่น GRUB)
จะต้องสามารถค้นหาและโหลดไฟล์เคอร์เนลได้ง่ายที่สุดนั่นเอง
ไดเร็คทอรี่ /boot จึงกลายเป็น “เป้านิ่ง”
ให้ผู้ไม่หวังดีโจมตีได้ง่ายมาก
โดยเฉพาะเมื่อโปรแกรมแอปพลิเคชั่นที่กำลังทำงานอยู่มีช่องโหว่ด้านความ
ปลอดภัยทางเครือข่าย ประเด็นสำคัญอีกข้อก็คือ
เนื่องจากไฟล์เคอร์เนลและไฟล์ประกอบทั้งหลายใน /boot
นี้ไม่ใช่ไฟล์ข้อความธรรมดา การโจมตีจึงเป็นลักษณะ “เช็คบิล” ล้วนๆ คือ
ทำลายให้เสียหายเท่านั้น ผลลัพธ์คือ บูตไม่ได้นั่นเอง
สำหรับแนวทางการป้องกัน ยังคงเหมือนกับ /boot/grub ที่ได้กล่าวไปแล้ว
เพราะทั้งสองพื้นที่นี้อยู่ร่วมกัน การแยกเม้าต์เฉพาะ /boot
และทำให้เม้าต์แบบ Read Only
จึงเป็นวิธีการที่เหมาะสมที่สุดสำหรับทั้งจุดตายที่ 2 และจุดตายที่ 3
จุดตายที่ 4 SELinux
SELinux ย่อมาจาก Security Enhanced Linux
เป็นคุณสมบัติด้านการรักษาความปลอดภัยที่เพิ่มเติมขึ้นในเคอร์เนลลีนุกซ์
รุ่นใหม่ตั้งแต่ 2.6 ขึ้นไปก็จะมีรวมไว้เสมอ
ซึ่งมีความซับซ้อนในการบริหารจัดการอยู่พอสมควร
และยังถือว่าเป็นของใหม่สำหรับหลายๆ ท่านอยู่ในเวลานี้
ดังนั้นคุณสมบัตินี้จึงถูกออกแบบให้ผู้ใช้งานสามารถเลือกโหมดในการทำงานและ
สามารถเปิดปิดการทำงานได้ตามความต้องการ
มีข้อดีอย่างนี้แล้ว SELinux จะเป็น “จุดตายที่ 4” ได้อย่างไร
ดังที่ได้กล่าวไปแล้วว่า SELinux มีความสัมพันธ์ใกล้ชิดกับเคอร์เนลมาก คือ
เป็นส่วนหนึ่งในเคอร์เนลเลยทีเดียว
ดังนั้นเมื่อมีความผิดปรกติใดก็ตามเกี่ยวกับ SELinux
ย่อมทำให้การทำงานของเคอร์เนลผิดปรกติไปด้วยอย่างหลีกเลี่ยงไม่ได้
ตัวอย่างหนึ่งก็คือ ไฟล์คอนฟิกของ SELinux ที่มีปรากฏในลีนุกซ์ตระกูล
Red Hat ทั้งหมด ได้แก่ Red Hat Enterprise Linux ,Fedora Core ,CentOS
จะมีไฟล์ชื่อ /etc/sysconfig/selinux
ซึ่งใช้ในการกำหนดการทำงานให้แก่เคอร์เนลในเรื่องเกี่ยวกับ SELinux
หากไฟล์นี้ถูกแก้ไขผิดเพี้ยนไป ผลลัพธ์ที่เกิดขึ้นคือ บูตไม่ขึ้นครับ
อาการที่ปรากฏก็คือ ถึงกับ Kernel Panic เลยทีเดียว
เพราะฉะนั้นจึงใคร่ขอแนะนำว่า
การที่จะไปแก้ไขคอนฟิกไฟล์โดยตรงด้วยโปรแกรมแก้ไขข้อความ ( vim หรือ nano )
เป็นทางเลือกที่ต้องระมัดระวัง
หากสามารถใช้โปรแกรมคำสั่งที่กำหนดให้ใช้ก็จะปลอดภัยกว่า
แต่ถ้าถนัดที่จะแก้ไขโดยตรงเองก็ต้องเพิ่มความละเอียดรอบคอบมากยิ่งขึ้น
สรุปแล้ว “จุดตายที่ 4” นี้ เป็นตัวอย่างหนึ่งของสิ่งที่เราเรียกกันว่า “Admin Error” ก็คงไม่ผิด
จุดตายที่ 5 ไฟล์ธรรมดา..ที่ไม่ธรรมดา
จุดตายที่ 5 นี้ อันที่จริงยังไม่ถึงขั้นร้ายแรงนัก เรียกว่า
แค่เอ๋อ..ยังไม่ถึงตาย ไฟล์คอนฟิกบางไฟล์นั้น ดูเผินๆ
ก็เป็นแค่ไฟล์ธรรมดาที่คุ้นๆ กันอยู่ (ผ่านไปผ่านมา..ไม่เคยสนใจ)
แต่อาจจะสร้างความผิดปรกติให้ระบบได้อย่างคาดไม่ถึง
และมีอำนาจมากพอจะเปลี่ยนให้ “แอดมินผู้เชี่ยวชาญ” ให้กลายเป็น
“แอดมึนผู้มืดมน” ไปได้ง่ายๆ
ยกตัวอย่างเช่นไฟล์ /etc/hosts
ซึ่งเป็นไฟล์ที่มีปรากฏในโฮสต์ทุกระบบปฏิบัติการที่ทำงานกับระบบเครือข่าย
TCP/IP
โดยหน้าที่แล้วไฟล์นี้ใช้เก็บรายชื่อโฮสต์จับคู่กับหมายเลขไอพีไว้เท่านั้น
เอง ไม่ว่าเมื่อใดก็ตามที่มีการติดต่อกับโฮสต์ต่างๆ
แม้แต่การติดต่อกับโฮสต์ตัวเองก็จะต้องเปิดไฟล์นี้เพื่ออ้างอิงชื่อและหมาย
เลขไอพีที่ถูกต้อง แล้วเพราะเหตุใดจึงนับว่าเป็น “จุดตาย”
ประเด็นอยู่ตรงที่โปรแกรมแอปพลิเคชั่นทุกๆ
โปรแกรมที่ทำงานเกี่ยวข้องกับชื่อโฮสต์ จะต้องสามารถอ้างอิงถึง “ตัวเอง”
ได้ เช่น localhost หรือชื่อใดๆ ที่ตั้งขึ้นก็ตาม
เพื่อให้วงจรของการสื่อสารดำเนินไปอย่างถูกต้อง ดังนั้นหากชื่อโฮสต์ของ
“ตัวเอง” ที่ระบุไว้ในไฟล์นี้ ไม่ถูกต้องแล้ว
ผลก็คือจะทำให้โฮสต์ของเราไม่รู้จัก “ตัวเอง” ว่าชื่ออะไรกันแน่
ผลที่เกิดขึ้นจะทำให้ระบบของเราเกิดอาการ “เอ๋อ”
ได้อย่างไม่ต้องแปลกใจ เช่น โฮสต์ของเราชื่อ nomnam.example.com
เมื่อได้รับอีเมล์ที่ส่งมาถึง user@nomnam.example.com
โฮสต์ของเราก็ไปมองในไฟล์ /etc/hosts ปรากฏว่าระบุไว้เป็นชื่ออื่น
โฮสต์ของเราก็จะปฏิเสธ (reject) อีเมล์ฉบับนั้นไปซะนี่
แทนที่จะรับไว้ให้แก่ user ซึ่งมันคงคิดไปว่า “ฉันไม่ได้ชื่อ
nomnam.example.com ซะหน่อย..นี่ไม่ใช่อีเมล์ของฉัน..”
เพราะฉะนั้นโปรดอย่ามองข้ามจุดเล็กๆ น้อยๆ มิฉะนั้นมันอาจกลายเป็น “จุดตาย”
ขึ้นมาก็ได้
จุดตายที่ 6 เข้าเกียร์ไม่ได้..ก็จอดสนิท
ลีนุกซ์ทุกสายพันธุ์จะมีศูนย์กลางของการควบคุมการทำงานของโปรเซสที่รับ
ช่วงต่อจากเคอร์เนลที่เหมือนกันหมด คือ โปรแกรม init
และไฟล์คอนฟิกที่ทำงานคู่กันก็คือไฟล์ /etc/inittab
เปรียบเสมือนฟันเฟืองชิ้นเล็กๆ ที่ใช้ควบคุมการส่งกำลังของรถยนต์
ไฟล์ทั้งสองนี้มีหน้าที่ควบคุมการบูตเข้าสู่การทำงานในโหมดต่างๆ
ของระบบปฏิบัติการลีนุกซ์ไปจนถึงการปิดเครื่องหรือการรีบูตเครื่อง
ซึ่งโหมดต่างๆ เหล่านี้เราเรียกว่า Run Level
โดยใช้ค่าตัวเลขในการแทนความหมาย เช่น runlevel 0 หมายถึงการปิดเครื่อง
(halt) เป็นต้น
จากความสำคัญที่กล่าวมา จึงทำให้เราค้นพบ “จุดตาย” อีกจุดหนึ่ง
ซึ่งโอกาสที่ /sbin/init จะถูกโจมตีในลักษณะ Rootkits ก็มีปรากฏมาแล้ว
(ถูกดัดแปลงโค๊ดภายในจนกลายเป็นเครื่องมือของแฮกเกอร์) ไฟล์ /etc/inittab
ที่มีสภาพเป็นไฟล์ข้อความธรรมดาย่อมถูก “รบกวน” ได้ไม่ยากเลย
แม้กระทั่งความผิดพลาดของผู้ดูแลระบบเองก็ทำให้ถึงกับ “จอดสนิท” ได้เช่นกัน
ไม่เพียงเท่านั้น ภายใต้การทำงานของโปรแกรม init ยังมีไฟล์ย่อยๆ
อีกจำนวนมาก ที่รวมกันทำงานเพื่อควบคุมการเริ่มต้นทำงานของระบบปฏิบัติการ
คือ /etc/rc.d/rc.sysinit และ /etc/rc.d/rc
ซึ่งมีหน้าที่ควบคุมระบบย่อยที่เรียกว่า System Services แบบ SysV
เพื่อเริ่มต้นการทำงานหรือยุติการทำงานของโปรแกรมบริการ (เช่น
บรรดาเซิร์ฟเวอร์ต่างๆ) ทั้งหมดในระบบอีกด้วย
หนทางป้องกัน “จุดตายที่ 6” นี้ คงหนีไม่พ้น “immutable bit” เท่านั้น
เนื่องจากทุกส่วนที่เกี่ยวข้องกับเรื่องนี้อยู่ร่วมกันในเม้าต์พอยต์ “/”
ทั้งสิ้น เรียกว่า One Problem One Solution จริงๆ
(ไม่เช่นนั้นคงไม่เรียกว่า “จุดตาย” จริงไหมครับ)
จุดตายที่ 7 ร่างกาย..ขาดรุ่งริ่ง
โครงสร้างของทุกสรรพสิ่งในโลกของเรา เกิดจากส่วนประกอบย่อยๆ
นำมาประกอบเข้าด้วยกัน การที่ระบบปฏิบัติการจะรวมกันและทำงานได้นั้น
จำเป็นต้องมี “ข้อต่อ” ที่ช่วยยึดส่วนต่างๆ เช่นเดียวกัน
ศูนย์กลางของการเชื่อมโยงดิสก์พาร์ทิชั่นทั้งหลายของระบบปฏิบัติการลีนุกซ์
ก็คือ “จุดตาย” ที่จะกล่าวถึง ในที่นี้ก็คือไฟล์ /etc/fstab ซึ่งเป็น
“ผู้ให้ข้อมูล”
เกี่ยวกับการเชื่อมโยงดิสก์พาร์ทิชั่นทั้งหมดของระบบปฏิบัติการลีนุกซ์เข้า
ด้วยกัน ทั้งระบบไฟล์ที่เชื่อมโยง (mount) แบบถาวร
และระบบไฟล์ของอุปกรณ์ประเภทถอดเปลี่ยนได้ (Removable Data Storage)
ไฟล์ /etc/fstab เป็นไฟล์ข้อความธรรมดา จึงมีปัญหาที่คล้ายกับ
“จุดตาย” อื่นๆ ที่ได้กล่าวมาแล้ว มันถูกเปลี่ยนแปลงข้อความภายในได้ง่าย
สิ่งที่อยู่ภายในมีความสำคัญต่อการเชื่อมโยงระบบไฟล์ทั้งหมดเข้าด้วยกัน
แล้วจะมีอะไรที่ “เสี่ยง” มากไปกว่านี้อีก
ในเบื้องลึกไฟล์ /etc/fstab ไม่ได้ทำงานอย่างเอกเทศ
แต่มันยังมีส่วนประกอบอื่นๆ ที่ “ยากต่อการป้องกัน” อีกด้วย
ตั้งแต่โปรแกรมคำสั่ง /bin/mount ซึ่งทำหน้าที่ในการเชื่อมโยงระบบไฟล์ต่างๆ
เข้าด้วยกัน โดยอ้างอิงข้อมูลจาก /etc/fstab อีกที
แถมโบนัสความเสี่ยงด้วยการที่มีการกำหนดสิทธิแบบพิเศษเป็น SUID อีกต่างหาก
ซึ่งทำให้ผู้ที่รันโปรแกรม mount นี้จะมีสิทธิ์สูงเทียบเท่า root
เลยทีเดียว ลองคิดดูสิครับว่าอะไรจะเกิดขึ้นถ้าไฟล์ mount นี้ถูกสวมรอยโดย
Rootkits ...???
นอกจากนี้ในกระบวนการ mount อันเป็นสิ่งปรกติในระบบปฏิบัติการลีนุกซ์
ยังมีส่วนประกอบที่คุณไม่สามารถ “ป้องกันการเขียน” (Write Protect)
ได้อีกด้วย นั่นคือไฟล์ /etc/mtab
ซึ่งคล้ายกับกระดาษทดที่ใช้ตลอดเวลาที่มีการ mount เกิดขึ้น
ถ้าไฟล์นี้เสียหายหรือเปลี่ยนแปลงไประบบย่อมเพี้ยนไปอย่างแน่นอน
จุดตายที่ 8 แหล่งกบดาน..ของวายร้าย
ถ้าสิ่งที่กล่าวมานี้เป็นฝันร้ายแล้วล่ะก็...
คุณคงจะต้องนิยามความหมายของคำว่าฝันร้ายใหม่ซะแล้ว เพราะ “จุดตาย”
ที่จะชึ้ให้เห็นต่อไปนี้เป็นเสมือนแหล่งซ่อนตัวหรือกบดานของเหล่าวายร้ายที่
จะแฝงเข้ามาอาศัยในเซิร์ฟเวอร์ของเรา
แล้วจากนั้นจะใช้เครื่องของเราเป็นฐานในการโจมตีผ่านเครือข่ายไปยังโฮสต์
อื่นๆ ต่อไป ซึ่งพฤติกรรมเช่นนี้จะคุ้นเคยกันในชื่อต่างๆ เช่น Backdoor
หรือTrojans นอกจากนี้ยังเป็นช่องทางที่เหล่าวายร้ายจะนำสิ่งที่เรียกว่า
Shell Code มาฝังไว้ได้
โดยจะทยอยส่งโค๊ดเข้ามาทีละเล็กทีละน้อยจนกลายเป็นโปรแกรมใหญ่มากพอที่จะทำ
งานได้ตามที่ต้องการ
แน่นอนว่าพื้นที่เหล่านี้จะต้องมีช่องโหว่มากพอที่ใครก็ตามสามารถ
“เขียน” ข้อมูลลงไปได้ คือ มี Permission Mode เป็น w (write) ตามมาด้วย
Permission Mode เป็น x (Execute) ซึ่งจะทำให้โค๊ดที่ผ่านการ “ประกอบร่าง”
สำเร็จแล้วสามารถรันได้อีกด้วย
“จุดตายที่ 8” นี้ มีอยู่ทั่วไปในระบบปฏิบัติการลีนุกซ์
ที่เห็นได้ชัดเจนว่ามี Permission Mode สูงพอสำหรับการ “เขียน” และการ
“รัน” ( ค่าของ Permission Mode สูงประมาณ 755 ขึ้นไป) ได้แก่ /tmp
,/var/tmp และ /dev/shm ทั้งสามจุดนี้มี Permission Mode เป็น drwxrwxrwt
หรือ 1777
การป้องกันทำได้โดยแยก mount point ออกไปจาก mount point “/” กำหนด
option ของการเม้าต์ไม่อนุญาตให้สามารถรันโปรแกรมได้ และใช้โปรแกรมประเภท
Local IDS ต่างๆ มาช่วยในการเฝ้าระวัง
(ถึงแม้จะได้แค่เฝ้าระวังก็ยังดีกว่าไม่รู้ว่าเกิดอะไรขึ้นบ้าง)
สิ่งสำคัญที่ต้องเตือนให้ทราบไว้ก็คือ กรุณาอย่าคิดว่าจะไปเปลี่ยน
Permission Mode ของ “จุดตาย” เหล่านี้ให้น้อยลงนะครับ
เพราะจะส่งผลกระทบต่อระบบและโปรแกรมต่างๆ ทำให้ทำงานผิดปรกติได้ เท่ากับไป
“วางยา” ตัวเองเสียอีก
จุดตายที่ 9 ไม่ขาด..แต่เกินก็มีปัญหาได้
เป็นที่เข้าใจกันดีอยู่แล้วว่า ถ้าส่วนประกอบของระบบสูญหายไป
ย่อมทำให้ระบบทำงานไม่ได้หรือเกิดความผิดปรกติขึ้น เช่น
ไฟล์คอนฟิกสำคัญหายไป หรือข้อความภายในผิดเพี้ยนไป เป็นต้น แต่ในทางกลับกัน
ถ้ามีไฟล์แปลกปลอมหลงเข้าไปในระบบบ้างล่ะ จะเกิดปัญหาได้หรือไม่
“จุดตายที่ 9” นี้ เป็น พื้นที่ไดเร็คทอรี่ที่มีความอ่อนไหวเป็นพิเศษ
ส่วนใหญ่แล้วจะเป็นพื้นที่เก็บคอนฟิกไฟล์ของโปรแกรมต่างๆ
ทั้งส่วนที่เกี่ยวข้องกับตัวระบบปฏิบัติการมากๆ
ไปจนถึงส่วนเฉพาะโปรแกรมบริการบางโปรแกรม ที่มีข้อจำกัดในด้านการทำงานมากๆ
ถ้ามีไฟล์ “ส่วนเกิน” หลงเข้าไปแล้วล่ะก็จะไม่สามารถทำงานต่อไปได้
ความเปราะบางเช่นนี้พิจารณาดูดีๆ แล้ว น่าจะจัดว่าเป็น “ข้อบกพร่อง” (Bug)
ของโปรแกรมก็คงไม่ผิด
ยกตัวอย่างเช่น พื้นที่ /etc/xinetd.d/
ที่ไดเร็คทอรี่นี้จะเป็นที่เก็บไฟล์คอนฟิกย่อยๆ ของ Xinetd ซึ่งเป็น Super
Server ที่ให้บริการด้านระบบเครือข่ายต่างๆ
เนื่องจากรูปแบบของไฟล์คอนฟิกย่อยๆ เหล่านี้จะต้องมีไวยกรณ์ต่างๆ
ตรงตามกำหนดไว้เท่านั้น ผิดเพี้ยนแม้แต่น้อยก็จะทำให้ Super Server
หรือลูกพี่ใหญ่เริ่มต้นทำงานไม่ได้เลย
ดังนั้นหากมีไฟล์อะไรก็ตามหลงเข้ามาปะปนในพื้นที่นี้
การแปลความหมายก็จะเข้าใจว่าเป็นไวยกรณ์ที่ผิดปรกติ
และส่งผลให้ไม่สามารถทำงานต่อไปได้ในที่สุด
บริการเซิร์ฟเวอร์ทั้งหลายภายใต้ Xinetd
ก็พลอยได้รับผลกระทบตามไปด้วยนั่นเอง
กรณีปัญหาที่เกิดจากไฟล์ “ขาดหาย” ไม่ครบตามปรกติคงเป็นปัญหาที่แสนธรรมดามากเมื่อเทียบกับปัญหาที่มีไฟล์ “เกิน” เข้ามาในระบบเช่นนี้
จุดตายที่ 10 ยังไม่ถึงตาย...แค่หายใจติดขัด
ปัญหาบางลักษณะที่เกิดขึ้นกับเซิร์ฟเวอร์ลีนุกซ์ของเรา
บางครั้งจะไม่ถึงขนาดที่รุนแรงนัก เพียงแต่สร้างความไม่ปรกติให้เห็นได้
หรือส่งผลกระทบกับบางเรื่องเท่านั้น
แต่ถ้าไม่เตรียมการป้องกันไว้ก็จะเกิดปัญหาขึ้นบ่อยๆ
หรือหากเกิดปัญหาขึ้นก็จำเป็นต้องเร่งแก้ไขอยู่ดี
ดังนั้นหากจะนับรวมเป็นอีกหนึ่ง “จุดตาย” ก็คงไม่ผิดกติกา
ตัวอย่างของอาการปัญหาประเภทนี้ ได้แก่ ปัญหาเนื้อที่ดิสก์เต็ม (Disk
Full) ในบางจุด โดยเฉพาะที่พบบ่อยมากๆ คือ พื้นที่ /tmp และ /var
เนื่องจากโปรแกรมบางตัวไม่มีระบบป้องกันตัวเองเมื่อพื้นที่จัดเก็บข้อมูล
เกิดความขัดข้อง ทำให้ไม่สามารถบันทึกหรือเขียนข้อมูลได้ เช่น
โปรแกรมประเภทเว็บที่เขียนด้วยภาษา PHP หรือโปรแกรมในกลุ่มฐานข้อมูล
อาจจะออกแบบให้พักข้อมูลที่ /tmp
เมื่อใดก็ตามที่พื้นที่นี้เต็มหรือไม่สามารถเขียนข้อมูลลงไปได้
ก็จะมีอาการผิดปรกติขึ้นทันที และเป็นเช่นนั้นไปจนกว่าจะได้รับการแก้ไข
ปัญหาทำนองเดียวกันนี้จะพบได้ในเรื่องของการจัดเก็บบันทึกไฟล์สถานะ
หรือ Log ต่างๆ อีกด้วย เช่น พื้นที่ /var/log
เกิดอาการเต็มขึ้นมาระบบจะไม่สามารถบันทึก log ต่อไปได้
อาจมีผลทำให้โปรแกรมต่างๆ หยุดทำงานได้เช่นกัน
หนทางป้องกันก็คือ
ควรตรวจดูว่าแต่ละโปรแกรมที่เราใช้งานนั้นมีการพักข้อมูลที่ใดบ้าง
ควรจัดสรรให้มีเนื้อที่เพียงพอต่อการทำงานของระบบและโปรแกรมต่างๆ ทั้งหมด
บางโปรแกรมจะสามารถกำหนดค่าในคอนฟิกได้ว่าจะย้ายไปใช้พื้นที่อื่นๆ หรือไม่
ซึ่งมีประโยชน์มากเมื่อต้องการเปลี่ยนแปลงในภายหลัง
หรือขยับมิให้โปรแกรมหลายๆ โปรแกรมมาใช้พื้นที่เดียวกันมากจนเกินไป
และสมควรเป็นอย่างยิ่งที่จะนำโปรแกรมที่ช่วยบริหารจัดการดิสก์
ระบบจัดการเกี่ยวกับบันทึก Log File ได้แก่ Log watch ,Log Rotate และ
SysLOG มาช่วยจัดการก็จะลดภาระผู้ดูแลระบบไปได้มาก
ถึงเวลา..สำรวจจุดตาย
ผู้เขียนได้ชี้ “จุดตาย” ในระบบปฏิบัติการลีนุกซ์ให้ได้ทราบกันแล้วถึง
10 จุด พร้อมเสนอแนะแนวทางการป้องกัน ตลอดจนเครื่องมือที่เกี่ยวข้อง
ในทางปฏิบัติแล้วผู้ดูแลระบบควรตั้งอยู่บนความไม่ประมาท ควรศึกษาหาความรู้
และมีกำหนดการที่จะตรวจตราดูสภาพการทำงานของระบบทั้งหมดอย่างสม่ำเสมอ
อย่าปล่อยให้เซิร์ฟเวอร์ลีนุกซ์ของเราต้องตกอยู่ในสภาพ “เฉียดตาย”
แล้วจึงจะหาทางแก้ปัญหา เพราะเมื่อถึงเวลานั้นมันอาจจะสายเกินไปแล้วก็ได้
0 ความคิดเห็น:
แสดงความคิดเห็น