Security
น้องๆ เคยสงสัยไหมว่าทำไม Linux ถึงขึ้นชื่อเรื่องความปลอดภัย? หนึ่งในเคล็ดลับสำคัญก็คือกลไกอย่าง SELinux และ AppArmor นี่แหละ สมัยผมทำร้านเน็ต SiamCafe.net เมื่อนานมาแล้ว (ตั้งแต่ปี 1997 โน่น!) ความปลอดภัยของระบบเป็นเรื่องที่ต้องให้ความสำคัญอันดับต้นๆ เลยนะ เพราะข้อมูลลูกค้าสำคัญมากๆ ถ้าโดนแฮกนี่เรื่องใหญ่
SELinux (Security-Enhanced Linux) และ AppArmor เป็นเหมือน "บอดี้การ์ด" ที่คอยควบคุมว่าแต่ละโปรแกรมในระบบของเรามีสิทธิ์ทำอะไรได้บ้าง มันทำงานโดยอิงจากนโยบาย (policy) ที่เรากำหนดไว้ เช่น ห้ามโปรแกรม A เข้าถึงไฟล์ของโปรแกรม B หรือห้ามโปรแกรม C เปิดพอร์ตบางพอร์ต อะไรทำนองนี้
ทำไมต้องมีบอดี้การ์ด? ลองคิดดูว่าถ้ามีโปรแกรมที่ติดมัลแวร์ (malware) เข้ามาในระบบของเรา แล้วโปรแกรมนั้นมีสิทธิ์เข้าถึงไฟล์ทุกอย่างได้หมด มันก็จะสามารถขโมยข้อมูล แก้ไขไฟล์ หรือแม้แต่ควบคุมระบบของเราได้เลย แต่ถ้าเรามี SELinux หรือ AppArmor คอยควบคุมอยู่ มัลแวร์ตัวนั้นก็จะถูกจำกัดสิทธิ์ ไม่สามารถทำอะไรได้ตามใจชอบ
ก่อนจะไปลงมือใช้งาน SELinux และ AppArmor เรามาทำความเข้าใจพื้นฐานกันก่อนนิดนึงนะ
SELinux ทำงานโดยอาศัยสิ่งที่เรียกว่า "context" ซึ่งเป็นเหมือนป้ายกำกับ (label) ที่ติดอยู่กับทุกสิ่งในระบบ ไม่ว่าจะเป็นไฟล์ โฟลเดอร์ โปรแกรม หรือแม้แต่ผู้ใช้ Context จะบอกว่าสิ่งนั้นคืออะไร และมีสิทธิ์อะไรบ้าง ยกตัวอย่างเช่น ไฟล์ /var/www/html/index.html อาจจะมี context เป็น httpd_sys_content_t ซึ่งหมายความว่าเป็นไฟล์ที่เว็บเซิร์ฟเวอร์ (httpd) สามารถอ่านได้
เมื่อโปรแกรมพยายามที่จะเข้าถึงไฟล์ ระบบจะตรวจสอบ context ของทั้งโปรแกรมและไฟล์ แล้วเปรียบเทียบกับนโยบายที่กำหนดไว้ ถ้า context ของโปรแกรมมีสิทธิ์ที่จะเข้าถึง context ของไฟล์ได้ ก็จะอนุญาตให้เข้าถึงได้ แต่ถ้าไม่มีสิทธิ์ ก็จะปฏิเสธการเข้าถึง
AppArmor จะทำงานโดยใช้สิ่งที่เรียกว่า "profile" ซึ่งเป็นเหมือนกฎเกณฑ์ (rules) ที่กำหนดว่าโปรแกรมแต่ละโปรแกรมมีสิทธิ์ทำอะไรได้บ้าง ยกตัวอย่างเช่น profile ของเว็บเซิร์ฟเวอร์อาจจะอนุญาตให้เว็บเซิร์ฟเวอร์อ่านไฟล์ใน /var/www/html/ ได้ แต่ไม่อนุญาตให้เขียนไฟล์ใน /etc/
AppArmor จะตรวจสอบการทำงานของโปรแกรมอยู่ตลอดเวลา ถ้าโปรแกรมพยายามทำอะไรที่ขัดกับ profile ที่กำหนดไว้ AppArmor ก็จะปฏิเสธการทำงานนั้น
เอาล่ะ ทีนี้เรามาดูวิธีการใช้งาน SELinux และ AppArmor กันบ้าง
ก่อนอื่นเลย เราต้องตรวจสอบก่อนว่า SELinux เปิดใช้งานอยู่หรือไม่ และอยู่ในโหมดไหน โดยใช้คำสั่ง sestatus
sestatus
ผลลัพธ์ที่ได้จะบอกสถานะของ SELinux (enabled/disabled) และโหมด (enforcing/permissive/disabled)
โดยทั่วไป เราจะเริ่มต้นด้วยโหมด Permissive ก่อน เพื่อดูว่ามีโปรแกรมไหนที่ทำงานผิดปกติหรือไม่ แล้วค่อยเปลี่ยนเป็นโหมด Enforcing เมื่อแน่ใจว่าทุกอย่างทำงานได้อย่างถูกต้อง
AppArmor จะเน้นการสร้าง profile ให้กับแต่ละโปรแกรม ซึ่งเราสามารถใช้เครื่องมือ aa-genprof เพื่อช่วยสร้าง profile ได้
sudo aa-genprof /usr/sbin/apache2
คำสั่งนี้จะเริ่มกระบวนการสร้าง profile สำหรับโปรแกรม Apache2 จากนั้นเราก็ใช้งานโปรแกรม Apache2 ตามปกติ เมื่อ AppArmor ตรวจพบการกระทำที่ยังไม่มีใน profile มันจะถามเราว่าจะอนุญาตหรือปฏิเสธการกระทำนั้น
การสร้าง profile ที่ดีต้องใช้เวลาและความเข้าใจในการทำงานของโปรแกรม แต่ผลลัพธ์ที่ได้คือระบบที่ปลอดภัยมากขึ้น
นอกจาก SELinux และ AppArmor แล้ว ก็ยังมีทางเลือกอื่นๆ ในการรักษาความปลอดภัยของ Linux อีก เช่น
SELinux และ AppArmor เป็นเหมือน "layer" เพิ่มเติมที่ช่วยเสริมความแข็งแกร่งให้กับระบบ Linux ของเรา
| คุณสมบัติ | SELinux | AppArmor |
|---|---|---|
| Context-Based Security | ใช่ | ไม่ใช่ |
| Profile-Based Security | ไม่ใช่ | ใช่ |
| ความซับซ้อน | สูง | ปานกลาง |
| การตั้งค่าเริ่มต้น | Red Hat, CentOS, Fedora | Ubuntu, SUSE |
สรุปแล้ว SELinux และ AppArmor ต่างก็มีข้อดีข้อเสียแตกต่างกันไป การเลือกใช้ขึ้นอยู่กับความต้องการและความถนัดของแต่ละคน แต่ที่สำคัญที่สุดคือการทำความเข้าใจหลักการทำงานและนโยบายต่างๆ อย่างละเอียด เพื่อให้สามารถใช้งานได้อย่างมีประสิทธิภาพ
หวังว่าบทความนี้จะเป็นประโยชน์กับน้องๆ นะ ถ้ามีคำถามอะไรเพิ่มเติม ถามมาได้เลยครับ อย่าลืมแวะไปดูบทความอื่นๆ ที่ SiamCafe Blog ด้วยนะ
และถ้าอยากรู้เรื่อง Cloud Computing เพิ่มเติม ลองดูที่ SiamCafe Blog ได้เลย
สวัสดีน้องๆ วันนี้มาต่อกันเรื่อง Security บน Linux หลังจากที่เราคุยกันเรื่อง SELinux และ AppArmor ไปแล้ว คราวนี้มาดู Best Practices หรือเคล็ดลับที่พี่ใช้จริงสมัยทำร้านเน็ตกันบ้าง ขอบอกเลยว่าเรื่องพวกนี้สำคัญมาก เพราะมันช่วยลดความเสี่ยงที่เราจะโดนแฮก หรือเครื่องมีปัญหาได้เยอะเลย
สมัยก่อนร้านเน็ตพี่นี่โดนมาหมดแล้ว ตั้งแต่ไวรัสกินเครื่อง ไปจนถึงโดนแฮกเข้าระบบ ดังนั้นเรื่อง Security นี่พี่เลยให้ความสำคัญเป็นพิเศษ มาดูกันว่ามีอะไรบ้าง
1. Update ระบบสม่ำเสมอ
อันนี้เบสิคมากๆ แต่สำคัญสุดๆ น้องๆ ต้องอัพเดทระบบปฏิบัติการ (OS) และโปรแกรมต่างๆ ให้เป็นเวอร์ชั่นล่าสุดอยู่เสมอ เพราะว่าพวกช่องโหว่ (Vulnerabilities) มักจะถูกแก้ไขในเวอร์ชั่นใหม่ๆ เสมอ
สมัยก่อนพี่จะตั้ง cron job ให้มันอัพเดทอัตโนมัติทุกวันเลย สะดวกดี ไม่ต้องมานั่งทำเอง
# crontab -e
0 3 * * * apt update && apt upgrade -y
2. ใช้ Firewall
Firewall นี่เหมือนยามหน้าประตูบ้าน ช่วยกรอง traffic ที่เข้ามาในเครื่องเรา ใครที่ไม่ได้ขออนุญาตก็กันออกไป
พี่แนะนำให้ใช้ ufw (Uncomplicated Firewall) ใช้งานง่ายดี
sudo ufw enable
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
3. ปิด Services ที่ไม่ได้ใช้
Services อะไรที่เราไม่ได้ใช้ ก็ปิดมันไปเลยครับ เพราะยิ่งเราเปิด services เยอะ ก็ยิ่งมีโอกาสโดนโจมตีมากขึ้น
สมัยก่อนพี่จะไล่ดูเลยว่ามี services อะไรบ้าง แล้วปิดที่ไม่จำเป็นทิ้ง
sudo systemctl stop [service_name]
sudo systemctl disable [service_name]
4. ติดตั้ง Intrusion Detection System (IDS) / Intrusion Prevention System (IPS)
IDS/IPS พวกนี้เหมือนระบบเตือนภัย ที่จะคอยตรวจจับพฤติกรรมที่น่าสงสัยในระบบของเรา ถ้าเจออะไรผิดปกติก็จะแจ้งเตือนเรา หรือป้องกันไม่ให้เกิดเหตุการณ์ร้ายแรงได้
พี่เคยใช้ Snort อยู่พักนึง แต่หลังๆ มาใช้พวก cloud-based IDS/IPS แทน สะดวกกว่าเยอะ
มันตอบยากนะน้อง เพราะแต่ละตัวก็มีข้อดีข้อเสียต่างกัน แต่ถ้าให้พี่แนะนำ พี่ว่าลองศึกษาทั้งสองตัว แล้วเลือกใช้ให้เหมาะกับความต้องการของเราดีกว่า บางทีอาจจะใช้ทั้งสองตัวควบคู่กันไปเลยก็ได้
SELinux มันก็ซับซ้อนจริงๆ แหละ แต่พี่แนะนำให้เริ่มจาก Mode ที่เป็น permissive ก่อน แล้วค่อยๆ ปรับไปเป็น enforcing ทีละ step จะช่วยให้เราเข้าใจการทำงานของมันได้ง่ายขึ้น
AppArmor ก็อาจจะมีผลกระทบบ้าง แต่ส่วนใหญ่จะไม่เยอะเท่า SELinux เพราะ AppArmor มันเน้นการจำกัดสิทธิ์การเข้าถึงไฟล์และ Network เป็นหลัก
อันดับแรกเลยคือ รีบ disconnect เครื่องออกจาก Network ก่อน เพื่อป้องกันไม่ให้มันแพร่กระจายไปยังเครื่องอื่นๆ จากนั้นก็ทำการตรวจสอบ Log files เพื่อหาสาเหตุของการโดนแฮก และทำการแก้ไขช่องโหว่ที่เกิดขึ้น สุดท้ายก็ทำการ restore ระบบจาก backup (ถ้ามี)
Security บน Linux มันเป็นเรื่องที่ไม่จบไม่สิ้น เราต้องคอยเรียนรู้และปรับตัวอยู่เสมอ เพราะว่า Hacker เขาก็พัฒนาวิธีการโจมตีอยู่ตลอดเวลา สิ่งสำคัญที่สุดคือเราต้องมีสติ และอย่าประมาท
น้องๆ ลองเอาเทคนิคที่พี่แนะนำไปปรับใช้ดูนะครับ รับรองว่าช่วยให้ระบบของเราปลอดภัยขึ้นเยอะเลย ถ้ามีคำถามอะไรเพิ่มเติมก็ถามมาได้เลยนะครับ
อย่าลืมแวะไปดูความรู้เรื่อง Forex ที่ iCafeForex นะครับ เผื่อใครสนใจลงทุน
แล้วก็เข้าไปอ่านบทความอื่นๆ ที่ SiamCafe Blog ได้เลย มีเรื่อง IT สนุกๆ อีกเยอะ