ชี้ 10 จุดตาย..ระบบปฏิบัติการลินุกซ์

เราต่างทราบกันดีว่า ซอฟต์แวร์ทุกชนิดล้วนมีข้อบกพร่องให้โปรแกรมเมอร์ต้องแก้ไข ปรับปรุง พัฒนากันไม่รู้จบ โชคดีที่ระบบปฏิบัติการลีนุกซ์ถูกสร้างขึ้นโดยอาศัยโมเดลการพัฒนาซอฟต์แวร์ โอเพ่นซอร์ส ทำให้ได้รับการปรับปรุงแก้ไขต่อเนื่องไม่มีวันจบสิ้น แต่ถึงอย่างไรก็ตามในโลกนี้ใม่มีอะไรที่จะสมบูรณ์แบบไปทั้งหมด แม้แต่ระบบปฏิบัติการลีนุกซ์เองก็ยังคงมี “จุดอ่อน” ที่เมื่อสะกิดโดนเมื่อใดก็ถือเป็น “จุดตาย” ได้ทันที ด้วยการทำความเข้าใจอย่างลึกซึ้งเท่านั้นจึงจะเป็น “เกราะป้องกัน” ได้อย่างดีที่สุด “จุดตาย” ที่ผู้เขียนนำมาเสนอนี้ มีจุดประสงค์เพื่อบอกเล่าประสบการณ์ และเป็นแนวทางให้แก่ผู้สนใจ ศึกษาระบบปฏิบัติการลีนุกซ์ได้นำไปวางแผนป้องกัน เพิ่มความระมัดระวังในการปฏิบัติงาน รวมไปถึงช่วยให้เข้าใจการทำงานของระบบปฏิบัติการลีนุกซ์มากยิ่งขึ้นในโอกาส ต่อไป มาเริ่มกันเลยนะครับ จุดตายที่ 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 จุด พร้อมเสนอแนะแนวทางการป้องกัน ตลอดจนเครื่องมือที่เกี่ยวข้อง ในทางปฏิบัติแล้วผู้ดูแลระบบควรตั้งอยู่บนความไม่ประมาท ควรศึกษาหาความรู้ และมีกำหนดการที่จะตรวจตราดูสภาพการทำงานของระบบทั้งหมดอย่างสม่ำเสมอ อย่าปล่อยให้เซิร์ฟเวอร์ลีนุกซ์ของเราต้องตกอยู่ในสภาพ “เฉียดตาย” แล้วจึงจะหาทางแก้ปัญหา เพราะเมื่อถึงเวลานั้นมันอาจจะสายเกินไปแล้วก็ได้

โพสต์ยอดนิยมจากบล็อกนี้

ปัญหาและเฉลยธรรม นักธรรมชั้นโท สอบในสนามหลวง พ.ศ. ๒๕๔๓ วันพฤหัสบดี ที่ ๑๖ พฤศจิกายน พ.ศ. ๒๕๔๓

ปัญหาและเฉลยวินัยบัญญัติ นักธรรมชั้นเอก สอบในสนามหลวง พ.ศ. ๒๕๔๓ วันเสาร์ ที่ ๑๘ พฤศจิกายน พ.ศ. ๒๕๔๓

ปัญหาและเฉลยวิชาธรรม นักธรรมชั้นโท สอบในสนามหลวง วันเสาร์ ที่ ๑๙ พฤศจิกายน พ.ศ. ๒๕๔๘