ข้อแนะนำการติดตั้ง Linux ให้ปลอดภัยระดับเบื้องต้น

กล่าวนำ

สังเกตุได้ว่าหลายองค์กรไม่ว่าจะเป็นองค์กรของรัฐหรือเอกชนมีการใช้งาน Linux server กันอย่างแพร่หลายโดยเฉพาะการใช้งานด้าน Internetwork server ปัญหาที่เกิดขึ้นก็คือ เมื่อทำการติดตั้งโดยตรงจาก linux box หมายถึงว่าไม่มีการ configure ใดๆ กับระบบ ระบบ Linux ที่ได้ติดตั้งเรียกได้ว่าไม่ค่อยมีความปลอดภัย เพื่อแก้ไขปัญหาเหล่านี้ ขั้นตอนต่างๆ ที่จะกล่าวถึงสามารถใช้ในการ secure (การรักษาความปลอดภัย) ระบบ Linux ได้แก่ การ secure ในช่วงเริ่มการติดตั้งระบบ การประเมินค่าความปลอดภัยภายหลังติดตั้งเสร็จ การเพิ่มเติมการ audit และ log ที่เหมาะสม การเพิ่มเติมการบริหารและจัดการในเรื่องเกี่ยวกับการรักษาความปลอดภัย สำหรับเอกสารนี้จะกล่าวถึงเฉพาะในส่วนของ 2 ขั้นตอนแรก สำหรับ 2 ขั้นตอนที่เหลือจะนำเสนอต่อไปในภายหลัง
เมื่อได้ตกลงใจที่จะใช้ Linux เป็น OS จะต้องถามตัวเองก่อนว่า จุดมุ่งหมายของการใช้ระบบเพื่ออะไร การตอบคำถามนี้จะช่วยในการ secure ระบบต่อไป เพราะจะเป็นข้อมูลสำหรับการตัดสินใจต่อไปว่า ต้องการใช้หรือเปิด service อะไรสำหรับเครื่องหรือระบบ ผู้ใช้คนใดบ้างที่ต้องการใช้หรือเข้าถึง (access) เครื่อง ผู้ใช้จะเข้าถึงเครื่องได้อย่างไร (อาจจะเป็นทาง console, Secure Shell, Telnet, หรืออื่นๆ ) และเรื่องอื่นๆเกี่ยวกับ network

เริ่มการติดตั้ง
การ Secure ระบบ Linux จำเป็นต้องเริ่มตั้งแต่การติดตั้ง อาจจะดูว่าเป็นเรื่องเล็ก แต่เป็นสิ่งที่ผู้ดูแลระบบหลายๆคนมักจะมองข้ามไป การเตรียมตัวในการติดตั้งจะต้องพิจารณาถึงประเด็นต่อไปนี้
  • อย่าต่อเข้ากับ network จะต้องมั่นใจว่าตลอดการติดตั้งไม่ได้ต่อเข้ากับ Internet หรือ network อื่นใด มีเหตุการณ์เกิดขึ้นบ่อยที่ระบบถูกเจาะ ภายในเวลาอันสั้นหลังจากการต่อเข้ากับระบบ network ที่ไม่ปลอดภัย วิธีที่ดีที่สุดคือ ถอดปลั๊กสาย Lan ก่อน จะเสียบปลั๊กก็ต่อเมื่อมั่นใจว่าระบบปลอดภัยหรือมีการ secure แล้วเท่านั้น การติดตั้งในกรณีนี้กระทำได้ในกรณีที่ติดตั้งจาก CD ROM เท่านั้น
  • Installation media การติดตั้งด้วยวิธีอื่นๆ ซึ่งต้องใช้การติดตั้งผ่านระบบ network จำเป็นต้องพิจารณา media (แหล่งข้อมูล) ที่เราจะใช้ในการติดตั้งนั้นมีความปลอดภัยมากน้อยเพียงใด ก่อนจะทำการติดตั้งให้ตรวจสอบ source code เสียก่อน
  • Installation type ให้เลือก Custom เพราะว่าเป็นตัวเลือกที่เหมาะสมกว่าตัวเลือกอื่นๆ และอนุญาตให้ผู้ติดตั้งควบคุมการติดตั้งได้มากกว่า ซึ่งทำให้ผู้ติดตั้งมีโอกาสเลือกตัวเลือกอื่นที่มีความปลอดภัยกว่า
  • Disk Partitioning ถือว่ามีความสำคัญในระดับหนึ่ง โดยทั่วไปจะเลือก root partition มีขนาดใหญ่เท่าที่จะทำได้ แต่มี partition ที่น่าจะมีเพิ่มเติมที่จำเป็น คือ /var และ swap โดย swap partition เลือกขนาดเท่ากับ สองเท่าของ ram ส่วน /var นั้นต้องเลือกให้มีขนาดใหญ่พอที่จะรับพวก log files และ E-mail ต่างๆ นอกจากนี้น่าจะมี partition /export/home แยกต่างหาก สำหรับ Apache
  • Installing Lilo LILO เป็นระบบการ boot เครื่องที่อนุญาตให้ผู้ใช้เลือก image ที่จะ boot อาจจะมี หลายๆระบบอยู่ในเครื่องเดียวกัน หรือใช้ในการส่งพารามิเตอร์ต่างๆให้กับ command line ขอแนะนำว่าอย่าติดตั้ง LILO ถ้าไม่มีความจำเป็น ยกตัวอย่างเช่น ในกรณีที่จะใช้เครื่องเป็น web server แต่เพียงอย่างเดียว แต่ถ้าตัดสินใจว่าจะใช้ LILO จะต้องมีการ secure เพิ่มเติม ซึ่งจะกล่าวถึงภายหลัง ขอแนะนำให้สร้าง bootdisk เลย ซึ่งจะทำให้ประหยัดเวลาในกรณีที่เครื่องเกิดปัญหา เช่น boot จาก harddisk โดยตรงไม่ได้
  • Network Configuration ให้ทำการ set ในภายหลัง ซึ่งจะเป็นขั้นตอนสุดท้ายที่สำคัญก่อนจะทำการต่อเข้ากับ Internet ต่อไป
  • User Account Configuration ถ้าเครื่องนี้ใช้สำหรับเป็น Web/email server สร้าง account สำหรับผู้ใช้คนเดียวก็เพียงพอ ดังนั้นโดยทั่วไปมีความจำเป็นต้องสร้าง account สำหรับ root และ account ผู้ใช้เพิ่มเติมอีกหนึ่ง โดยเฉพาะการกำหนด password สำหรับ root นั้นจะต้องระมัดระวังและพิถีพิถัน อย่างน้อยจะต้องมีความยาว 8 ตัวอักษร และจะต้องเป็นการผสมผสานระหว่างตัวหนังสือ หมายเลขและ ตัวสัญลักษณ์ เพื่อป้องกันการเจาะระบบโดยวิธีเดาสุ่ม password สาเหตุที่ต้องมี account ผู้ใช้ทั่วไป ก็คือ เวลาใช้งานทั่วไปหรือต้องการตรวจสอบระบบว่าทุกอย่างเรียบร้อยหรือไม่ ก็ให้ใช้ account ผู้ใช้ทั่วไป นอกจากนี้ยังสามารถใช้ account นี้ในการทำงานแทน root โดยใช้คำสั่ง sudo เพื่อความปลอดภัยของระบบ
  • Authentication Configuration ควรทำการ enable MD5 และ shadow password โดยที่ MD5 ทำให้สามารถใช้ password ที่มีความยาวมากได้ สำหรับ shadow password ใช้สำหรับป้องกันผู้ใช้คนอื่นๆอ่าน password ที่ผ่านการเข้ารหัสได้
  • Package Selection and Install สุดท้ายเป็นการเลือก package ที่จะทำการติดตั้ง จุดมุ่งหมาย คือ ติดตั้งเฉพาะที่ต้องการใช้หรือจำเป็นจริงๆ ยิ่งติดตั้ง package น้อยเท่าไร ก็ยิ่งเปิดช่องโหว่หรือยิ่งปลอดภัยมากเท่านั้น packages ที่จะทำการติดตั้งขึ้นอยู่กับวัตถุประสงค์การใช้งานของเครื่อง ยกตัวอย่าง ถ้าใช้เป็น web server ก็ไม่มีความจำเป็นที่จะติดตั้ง X-window หรือแม้กระทั่งตัว compiler ดังนั้นขอแนะนำว่าให้เลือกติดตั้ง package เป็นรายตัวไป สำหรับ web server นั้นในช่วงแรกอาจจะต้องมีตัว compiler ไว้ใช้ในการติดตั้ง Apache เวอร์ชันล่าสุด แต่ควรจะทำการเอาออกทีหลัง

เพิ่มความปลอดภัยให้กับ Applications

  • เริ่มต้น ติดตั้ง patches หลังจากการติดตั้งระบบเบื้องต้นและทำการ reboot เครื่องแล้ว จำเป็นต้องมีการใช้ patches และติดตั้ง application ที่จำเป็นเพิ่มเติม ขณะที่เครื่องยังไม่ได้ต่อเข้ากับ internet จำเป็นต้อง download ไฟล์ต่างๆผ่านเครื่องอื่นและเก็บไว้ใน CD ROM แล้วใช้ CD ROM นั้นมาติดตั้งกับเครื่องใหม่ที่ยังไม่ secure สำหรับ Redhat 6.1 มี patches สามารถ download ได้ที่ http://www.redhat.com/errata โดย patches เหล่านี้มาในรูปแบบแตกต่างกัน 3 แบบ คือ security advisory, bug fixes, และ package updates โดยที่ patches แต่ละอย่างจะเกี่ยวข้องกับ package แต่ละอย่างแตกต่างกัน ขอให้เลือกติดตั้ง patches ที่เกี่ยวข้องเท่านั้น การติดตั้ง patches ทำได้ง่ายมาก โดยใช้คำสั่ง rpm - Uvh filename.rpm
  • ติดตั้ง Application ทำการติดตั้ง Application ที่จำเป็น เช่น สำหรับการใช้งานเป็น web server ให้ติดตั้ง Apache โดยก่อนอื่นต้องทำการตรวจสอบ Application เวอร์ชันล่าสุด แล้วทำการ download โดยผ่านเครื่องอื่นแล้วเก็บไว้ใน CD ROM ดังวิธีติดตั้ง patches
  • BASTILLE LINUX พิจารณาการติดตั้ง Bastille-Linux เพิ่มเติม Bastille-Linux เป็น script ที่ทำให้ระบบ OS ที่ใช้ Linux Redhat 6.0 แข็งแกร่งและทำให้ยากต่อการเจาะระบบโดย Hacker โดยทำหน้าที่คล้ายๆกับ เครื่องมือสำหรับ OS อื่นๆ เช่น Titan สำหรับ Sun Solaris การติดตั้ง Bastille-Linux นั้นควรติดตั้งทันทีที่ติดตั้ง Redhat เสร็จ

หลังการติดตั้ง

  • Securing service การติดตั้ง Linux โดย default นั้นจะมีการใช้ service ที่มีประโยชน์อื่นๆอีก ขอให้ทำการตรวจสอบและกำจัด service ที่ไม่จำเป็นเหล่านั้นออก โดยให้ตรวจสอบในไฟล์ /etc/inetd.conf ไฟล์ๆนี้จะเป็นตัวกำหนดว่า service ใดบ้างที่ ใช้งานได้ การกำจัด service ที่ไม่ต้องการ ทำได้โดย เติมเครื่องหมาย # หน้าบรรทัด service นั้นๆในไฟล์ แล้วทำการตรวจสอบอีกครั้งโดยใช้คำสั่ง grep -v "^#" /etc/inetd.conf เพื่อดูว่ามี service อะไรที่ยังมีอยู่
  • Securing LILO เนื่องจาก system admin ส่วนมากมักจะติดตั้ง LILO กับ LINUX จึงมีความจำเป็นต้องกล่าวถึง LILO คือ Linux Loader เป็นส่วนที่ใช้สำหรับเลือก image ที่จะ boot ระบบเมื่อทำการเปิดเครื่องและยังสามารถผ่านพารามิเตอร์ต่างๆผ่านทาง command line อีกด้วย LILO มักจะเป็นสิ่งที่ถูกมองข้ามไป ถ้าผู้ไม่ประสงค์ดีผ่านค่าพารามิเตอร์บางอย่าง ทำให้สามารถ bypass การตรวจสอบ security ได้ดังตัวอย่างต่อไป Linux init = /bin/sh
  • พารามิเตอร์ ที่ส่งไปทำให้ผู้ใช้สามารถเข้าสู่ Linux โดยตรงและได้ root privileges คือ สามารถทำทุกอย่างได้หรือรันคำสั่งเช่นเดียวกับ root โดยไม่ต้องใส่ password จากตัวอย่างจะเห็นได้ว่าจำเป็นมีมาตรการการควบคุมการส่งค่าพารามิเตอร์ต่อ LILO โดยให้แก้ไขในไฟล์ /etc/lilo.conf

Boot=/dev/had
map=/boot/map
install=/boot/boot.b
Prompt
timeout=10

image=/boot/vmlinuz-2.2.12-20
label=linux
initrd=/boot/initrd
read-only
root=/dev/hda1
restricted
password=PASSWORD

  • จาก ไฟล์ดังกล่าวนี้ได้ตั้งค่า timeout ไว้ที่ 10 วินาที ถ้าไม่มีคำสั่ง หรือ line command ภายใน 10 วินาที LILO จะทำการ boot ค่า default ในไฟล์ /etc/lilo.conf คือ เป็นการจำกัดเวลาในการส่งคำสั่งรวมทั้งค่าพารามิเตอร์ นอกจากนี้ผู้ใช้ยังต้องใส่ password เมื่อต้องการรันคำสั่งใดๆ เนื่องจากว่า password จะถูกเก็บเป็นตัวอักษรธรรมดา จึงจำเป็นต้องเป็น mode ไฟล์ให้เป็น mode 640 คือ จะอนุญาตให้ root เพียงผู้เดียวที่ทำการอ่านและเขียนได้ การแปลง mode ทำโดยใช้คำสั่ง
    chmod 640 /etc/lilo.conf
  • File Permissions ระบบไฟล์ system ของ Linux มีลักษณะคล้ายกับระบบ Unix โดยทั่วไป คือ แต่ละๆไฟล์จะมีไฟล์ permission ที่แสดงคุณสมบัติว่าเป็นไฟล์ประเภทใดและผู้ใดบ้างที่สามารถอ่าน แก้ไข หรือ รันคำสั่งได้ ดังนั้นเพื่อความปลอดภัย ถ้ามีการตรวจสอบคุณสมบัติของไฟล์ในไดเร็คทอรี่ ยกตัวอย่างเช่น ในไดเร็คทอรี่ /bin/mount file โดยทั่วไป ไฟล์ permission เป็น -rwsr-xr-x หมายความว่าผู้ใช้ทั่วไปสามารถรันคำสั่งไฟล์นี้ได้ ซึ่งในแง่ของความปลอดภัย จะเป็นการเสี่ยงเพราะไฟล์ที่ถูก mount นี้อาจจะทำลายระบบของเราได้ เพื่อป้องกันเหตุเหล่านี้ ไฟล์ต่างๆในระบบจึงจำเป็นต้องมีการตรวจสอบและแก้ไขให้สอดคล้องกับความจำเป็น ในการใช้งานจริงๆ โดยเฉพาะไฟล์ในไดเร็คทอรี่ทีสำคัญต่างๆเช่น /etc/bin, /usr/bin, /usr/sbin
  • ขั้นตอนอื่นๆที่จำเป็น ขั้นตอนแรก ให้ทำการตรวจสอบในไฟล์ /etc/passwd ว่ามี account อื่นๆที่ไม่จำเป็นเช่น gopher, news, mail, ftp หรือไม่ ถ้ามีให้ทำการลบออก ต่อไป ให้ตรวจสอบว่าระบบมีการใช้ shadow password หรือยัง โดยใช้คำสั่ง pwconv และ grpconv สุดท้ายกำหนดให้ root ต้อง login จาก console เพียงอย่างเดียว จะทำการ login แบบ remote ไม่ได้ จึงกำหนดโดยตรวจสอบว่าไฟล์ /etc/securetty มีแต่เฉพาะ ttyx เท่านั้น ถ้ามีนอกเหนือจากนี้ให้ลบออก มาตรการอื่นๆ อาจมีการจำกัดเครื่องที่ผู้ใช้ ทำการ login โดยแก้ไขในไฟล์ /etc/security/access.conf หรือแทนที่จะให้ผู้ใช้ที่ทำการ login แบบ remote ซึ่งค่อนข้างอันตรายหากมีการดักจับข้อมูลในเครือข่ายของเรา เพราะ Hacker อาจจะดักจับ password ได้ จึงจะปลอดภัยกว่า ถ้าให้ผู้ใช้ผ่าน SSH session ซึ่งมีการ encrypt ข้อมูลไว้ ซึ่งจะกล่าวในรายละเอียดในบทความหน้า นอกจากนี้ หากต้องการให้จำกัดเวลาและจำนวนผู้ใช้ ยังสามารถกำหนดได้ในไฟล์ /etc/security/time.conf และ /etc/security/limits.conf
  • Configure the network เป็นการ configure เพื่อต่อเข้ากับ network โดยจะต้องใส่ค่าต่างๆที่จำเป็น เช่น IP address, hostname, gateway, DNS server และอื่นๆ อาจจะใช้ tool ต่างๆในการป้อนค่า เช่น Control-panel, netconfig
  • Plugin the Ethernet Card เมื่อ configure เสร็จแล้วให้ reboot เครื่องแล้ว เสียบสาย lan เครื่องก็พร้อมจะใช้งานได้ แต่อย่าลืมว่า ขณะนี้เรายังมีตัว Compiler อยู่ในเครื่อง เพื่อใช้ในการ compile application อื่นๆ ที่จำเป็นได้แก่ logging tool หรือ audit tool ซึ่งจะกล่าวถึงในบทความต่อไป
สรุป

ในบทความนี้ เราได้กล่าวถึง วิธีการในการติดตั้ง Linux Web Server ให้ปลอดภัย โดยยึดหลักว่าจำกัด software ที่ติดตั้งให้น้อยที่สุด ทำการกำจัด services ต่างๆที่ไม่จำเป็น และทำการตรวจสอบในหลายๆขั้นตอนเพื่อให้ระบบ secure มากที่สุด แต่อย่างไรก็ตามแม้ปฏิบัติตามขั้นตอนเหล่านี้ ระบบก็ยังไม่ปลอดภัย 100 % ยังต้องมีมาตรการอื่นๆอีก ซึ่งรวมไปถึงการตั้งค่า log และ audit และการใช้ security tool อื่นๆ ร่วมด้วย ซึ่งในบทความต่อจากนี้จะกล่าวถึงขั้นตอนในการออกแบบและการเพิ่มเติมมาตรการ เหล่านั้น

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

I miss you all กับ I miss all of you ต่างกันอย่างไร

ปัญหาและเฉลยวิชาธรรม นักธรรมชั้นตรี สอบในสนามหลวง วันอังคาร ที่ ๒๙ กันยายน พ.ศ.๒๕๕๒

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