1/30/2556

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

เราต่างทราบกันดีว่า ซอฟต์แวร์ทุกชนิดล้วนมีข้อบกพร่องให้โปรแกรมเมอร์ต้องแก้ไข ปรับปรุง พัฒนากันไม่รู้จบ โชคดีที่ระบบปฏิบัติการลีนุกซ์ถูกสร้างขึ้นโดยอาศัยโมเดลการพัฒนาซอฟต์แวร์ โอเพ่นซอร์ส ทำให้ได้รับการปรับปรุงแก้ไขต่อเนื่องไม่มีวันจบสิ้น แต่ถึงอย่างไรก็ตามในโลกนี้ใม่มีอะไรที่จะสมบูรณ์แบบไปทั้งหมด แม้แต่ระบบปฏิบัติการลีนุกซ์เองก็ยังคงมี “จุดอ่อน” ที่เมื่อสะกิดโดนเมื่อใดก็ถือเป็น “จุดตาย” ได้ทันที ด้วยการทำความเข้าใจอย่างลึกซึ้งเท่านั้นจึงจะเป็น “เกราะป้องกัน” ได้อย่างดีที่สุด “จุดตาย” ที่ผู้เขียนนำมาเสนอนี้ มีจุดประสงค์เพื่อบอกเล่าประสบการณ์ และเป็นแนวทางให้แก่ผู้สนใจ ศึกษาระบบปฏิบัติการลีนุกซ์ได้นำไปวางแผนป้องกัน เพิ่มความระมัดระวังในการปฏิบัติงาน รวมไปถึงช่วยให้เข้าใจการทำงานของระบบปฏิบัติการลีนุกซ์มากยิ่งขึ้นในโอกาส ต่อไป มาเริ่มกันเลยนะครับ
http://www.xda-developers.com/wp-content/uploads/2012/11/Linux.jpg?f39ce1
จุดตายที่ 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 ความคิดเห็น:

แสดงความคิดเห็น