ในปัจจุบัน สามารถพบได้ว่ามีผู้ไม่ประสงค์ดี พยายามในการ access เข้าใช้งานระบบโดยไม่ได้รับอนุญาตเป็นจำนวนเพิ่มขึ้น ทั้งจากช่องโหว่ในส่วน OS system, Software หรือ จาก script ที่มีการเขียนเพื่อใช้งาน service ต่างบน server

สำหรับบทความนี้ จะนำเสนอ การเพิ่มความปลอดภัยเบื้องต้นให้กับ Centos 7 server  หลังจากที่มีการติดตั้ง Centos7 minimal เรียบร้อยแล้ว ซึ่งผู้ใช้งาน CentOS 7 ควรเลือกปรับแต่งตามความเหมาะสมในเรื่องต่างๆ ดังนี้

การแยก partition เพื่อใช้งาน

ในการติดตั้ง linux server ควรมีการแยกส่วนของ partition ที่ใช้งานสำหรับ system ออกจากส่วนที่มีการเรียกใช้หรือเข้าถึงข้อมูลจากภายนอก ทั้งนี้เพื่อให้สามารถกำหนดสิทธ์ ของผู้เข้าใช้งานได้มีประสิทธิภาพยิ่งขึ้น

ตัวอย่าง เช่น สามารถแยกเป็น

/

/boot

/home

/tmp

/var

การเพิ่มความปลอดภัยสำหรับ Boot loader

เมื่อมีการติดตั้ง CentOS เรียบร้อยแล้ว บน linux server จะมี level ต่างๆ ให้เลือก boot เพื่อใช้งานตามต้องการของ user ในการเลือกนำไปใช้งาน เช่น level 3 คือ multi-user ซึ่งเป็น text mode หรือ level 5 เป็น graphic mode

ทั้งนี้ สำหรับ linux operating system จะมี GRand Unified Bootloader (GRUB) ซึ่งเป็น default bootloader เพื่อให้ใช้งาน

ในกรณีที่ไม่สามารถเปิดใช้งาน level 3 หรือ level 5 ได้ อาจจะด้วยปัญหาใดๆ ก็ตาม linux จะมี level 1 หรือที่รู้จักกันในชื่อ single user mode ซึ่งผู้ดูแลระบบนิยมใช้งานในการเข้าจัดการแก้ไขระบบ โดยใน mode นี้ มักจะไม่มีการป้องกันการเข้าใช้งาน ซึ่งทำให้ผู้ใดก็สามารถเข้าใช้งานและแก้ไขส่วนต่างๆ ได้

ตัวอย่าง เมื่อ server ทำการ boot และยังไม่มีการกำหนดค่า password

เพื่อป้องกันการเข้าใช้งาน GRUB จากผู้ไม่ประสงค์ดี เราสามารถกำหนดรหัสผ่านได้ดังนี้

สร้างรหัสผ่านด้วยคำสั่งด้านล่างนี้และใส่ค่ารหัสผ่านเมื่อกำหนดเรียบร้อย ระบบจะแสดงค่า MD5 hash รหัสผ่านกลับมา

เปิดไฟล์ /boot/grub/grub.conf หรือ /boot/grub/menu.lst เพื่อเพิ่มค่า MD5 จากคำสั่งก่อนหน้านี้ลงไปยังไฟล์

บันทึกไฟล์ และทดสอบโดยการสั่ง reboot server

ตัวอย่าง เมื่อ server ทำการ boot มีการกำหนดค่ารหัสผ่านแล้ว


การกำหนดค่าบนไฟล์ fstab

สำหรับไฟล์ fstab นั้นจะเป็นไฟล์ที่มีการเก็บข้อมูลของ partition ,disk จากอุปกรณ์ต่างๆ ที่ต้องการ mount เพื่อใช้งาน สำหรับไฟล์นี้จะอยู่ที่ /etc/fstab

ข้อมูลในไฟล์ fstab จะประกอบ ด้วย 6 คอลัมน์ คือ
คอลลั่มที่ 1,2 คือ คอลัมน์สำหรับอุปกรณ์ และ mount point
คอลัมน์ที่ 3 คือ filesystem type ที่ต้องการ mount เช่น ext3, ext4, swap, ntfs เป็นต้น
คอลลั่มที่ 4 คือ การกำหนดค่า option สำหรับการ mount
คอลลั่มที่ 5,6 คือ การ dump ข้อมูล และ การกำหนดการ check system
(ข้อมูลเพิ่มเติม: fstab)

ตัวอย่างไฟล์ fstab

จะเห็นได้ว่า แต่ละ partition มีการกำหนด option (คอลลั่มที่ 4) แตกต่างกันไปตามการใช้งาน เช่น partition /tmp ซึ่งถือเป็นที่เก็บข้อมูลชั่วคราวต่างๆ เช่น session หรือไฟล์ที่ไม่มีการใช้งานในระยะยาว ไม่จำเป็นต้อง run ไฟล์ binary ได้ ซึ่งจากตัวอย่างจะมีการป้องกันเพิ่มเติมดังนี้

  • Option nosuid เป็นการกำหนดเพื่อ ปิดกั้นการทำงานของ suid (set user ID upon execution) และ sgid bits (set group ID upon execution) ซึ่งโดยปกติการกำหนดค่า setuid และ setgid กำหนดด้วยคำสั่งchmod
  • Option nodev กำหนดเพื่อไม่ให้มีการสร้าง block devices ใดๆ บน partition นี้
  • Option noexec เป็นการกำหนดให้ไม่สามารถ run ไฟล์ binary ที่อยู่ใน partition นั้นๆ ได้ ซึ่งเหมาะกับ partition ที่ไม่ต้องการให้มีการ run binary เช่น tmp เป็นต้น

จากตัวอย่างด้านบนจะเห็นว่ามีการแยกส่วน partition ที่ใช้งาน system หลัก(/) และส่วนที่มีการใช้งานอื่นๆ ออกจากกัน เพื่อให้สะดวกในกำหนด option ในคอลลั่มที่ 4 ในการสร้างความปลอดภัยให้กับการเข้าใช้งานใน partition ที่แตกต่างกันตามสิทธิ์การใช้งาน

การติดตั้งและยกเลิก service หรือ package  

ปัจจุบัน ผู้ดูแลระบบสามารถติดตั้ง program ต่างๆ ได้ง่ายยิ่งขึ้นด้วยการ run คำสั่ง yum

การติดตั้ง program, application, service ที่มากเกินความจำเป็น หรือเลือกทุกตัวเลือก หากมีคำถามในการติดตั้งใดๆ ถือเป็นความเสี่ยงที่อาจทำให้เกิดช่องโหว่ให้กับของระบบได้ ดังนั้นควรเลือกติดตั้งเฉพาะโปรแกรมที่จำที่ต้องใช้งานเท่านั้น

ทั้งนี้เนื่องจาก server แต่ละเครื่องมีการติดตั้งแตกต่างกันไป ตามการในใช้งาน ดังนั้น ณ ที่นี้จึงไม่สามารถแจ้งได้ว่า package ใดมีความจำเป็นหรือไม่จำเป็นในการติดตั้ง ซึ่งส่วนนี้ขึ้นอยู่กับการพิจารณาของผู้ดูแลระบบเอง ในความเหมาะสม

การตรวจสอบ package ที่มีการติดตั้ง

การตรวจสอบ service ที่มีการติดตั้ง

การตรวจสอบ port ที่มีการเปิดใช้งานสำหรับ service ต่างๆ ด้วยคำสั่ง

การปิด service ที่ไม่ต้องการใช้งาน

การลบ package ที่ไม่ต้องการใช้งาน

สำหรับผู้ใช้งาน x86_64 หากต้องการลบ package สำหรับ i386/i686 สามารถทำได้โดย

และเพิ่มค่าตามด้านล่างนี้ที่ไฟล์ /etc/yum.conf เพื่อหากมีการใช้งานคำสั่ง yum จะไม่มีการ update ไฟล์ i386/i686

 

การ update ระบบ

การ update package ต่างๆ ที่ใช้งานบน server ถือเป็นเรื่องสำคัญอย่างยิ่งที่ผู้ดูแลระบบควรดำเนินการอย่างสม่ำเสมอ ทั้งนี้ โดยปกติโปรแกรมต่างๆ มักจะมีการ update ช่องโหว่หรือ fix bug อย่างต่อเนื่องอยู่แล้ว

ทั้งนี้สามารถ update ได้จากคำสั่ง

หรือเพื่อให้มีการ update อย่างต่อเนื่อง สามารถกำหนดเป็น cron job โดยการติดตั้ง yum-cron

แก้ไขที่ไฟล์

จากนั้นให้ใส่รหัสผ่านของ user ที่ใช้งาน ณ. ขณะนั้น  และดำเนินการ เปลี่นค่าจาก apply_updates = no เป็น apply_updates = yes

ซึ่ง yum-cron จะมีการทำงานทุกวัน ตาม cron.daily ของระบบ ดังนั้นระบบจะมีการ update อย่างสม่ำเสมอ

อีกทั้งผู้ดูแลระบบสามารถรับข่าวสารจาก NSA (National Security Agency) หรือ CentOS-Announce mailing list เพื่อติดตามการ update หรือช่องโหว่ต่างๆ ได้อีกด้วย

กรณีที่มีการ update kernel นั้น จำเป็นต้องมีการ reboot server เพื่อใช้มีการใช้งาน kernel ตัวใหม่

 

การกำหนดรูปแบบของรหัสผ่าน

ก่อนที่จะเริ่มต้นสร้าง user สำหรับใช้งาน เบื้องต้นเราควรกำหนดรูปแบบของรหัสผ่านของ user เพื่อเพิ่มความปลอดภัยในการใช้งาน โดยรูปแบบของรหัสผ่านที่ปลอดภัย เช่น

  • ควรมี อักษรตัวพิมพ์เล็ก, อักษรตัวพิมพ์ใหญ่, ตัวเลข, อักขระพิเศษ (เช่น $%&@ เป็นต้น) และควรมีความยาวเกินกว่า 8 ตัวอักษร
  • ควรมีรูปแบบที่ยากต่อการคาดเดา รูปแบบการกำหนดทีไม่ใช่การจัดเรียงที่เป็นรูปแบบคำที่ง่ายมากจนเกินไป
  • ควรมีการเปลี่ยนรหัสผ่านอย่างสม่ำเสมอเช่น ทุกๆ 60, 90 หรือ 180 วัน
  • ไม่ควรมีการเปลี่ยนรหัสผ่านมากกว่า 2 ครั้งใน 1 วัน

กำหนดเมื่อมีการสร้าง user ใหม่

โดยให้รหัสผ่านมีอายุ 60 วัน

และอนุญาติให้สามารถเปลี่ยนรหัสผ่านได้ 2 ครั้งใน 1 วัน

กำหนดเพื่อใช้เมื่อมีการเปลี่ยนแปลงรหัสผ่าน โดยกำหนดไม่ให้มีการใช้งานรหัสผ่านซ้ำเดิมสำหรับรุ่น 5 ในอดีต

กำหนดข้อบังคับเมื่อ user มีการกำหนดรหัสผ่าน

เมื่อกำหนดค่าเรียนร้อยให้ บันทึกไฟล์ดังกล่าว

การ update ระบบให้มีการเข้ารหัสแบบ SHA512 แทน MD5

ทดสอบเปลี่ยนรหัสผ่านที่ง่ายต่อการคาดเดา เช่น ตัวเลข 3-4 ตัว จะไม่สามารถกำหนดได้

ตรวจสอบรายละเอียดของ user

 

กำหนดสิทธิ์ user ที่ใช้งาน

ในการกำหนดสิทธิ์การใช้งานให้แต่ละ user ในระบบ ควรกำหนดให้อยู่ในขอบเขตที่ต้องการใช้งานเท่านั้น โดย user ที่สำคัญและมีสิทธิ์สูงที่สุดในระบบคือ user: root ซึ่งผู้ดูแลระบบนิยมใช้ในการจัดการระบบ และเนื่องด้วยสิทธิ์สูงสุดที่สามารถดำเนินการใดๆ ได้โดยไม่มีข้อยกเว้น ดังนั้นอาจจะส่งผลกระทบ กรณีที่เกิดข้อผิดพลาดในการใช้งานได้

เพื่อความปลอดภัย จึงควรสร้าง user ตามหน้าที่ ที่ต้องการใช้งาน และสำหรับผู้ดูแลระบบนั้นสามารถจัดการระบบได้ผ่าน คำสั่ง sudo

ตัวอย่างการสร้าง user สำหรับผู้ดูแลระบบ

กำหนดให้ใช้งานใน group ของ wheel

ตรวจสอบรายละเอียดของ user

ทดสอบ run คำสั่งที่เป็นสิทธิ์ของ root เช่น

ทั้งนี้กรณีที่ต้องการสร้าง user แต่ไม่ต้องการให้สามารถ shell ใช้งาน server ได้ สามารถกำหนดได้ดังนี้

 

การกำหนดค่า permission ของไฟล์ด้วย umask

ค่า umask หรือค่า user file-creation mode mask ใช้สำหรับกำหนดค่าตั้งต้นสำหรับ permission ของไฟล์นั้นๆ เมื่อมีการสร้างไฟล์ขึ้นใหม่ ซึ่งประกอบด้วยตัวเลข 4 หลัก(หลักซ้ายสุด มีค่า default เป็น 0) ซึ่งสามารถกำหนดได้โดย

– Symbolic values

เช่น umask u=rwx,g=,o=  ซึ่งกลุ่มชุดตัวอักษรหมายถึง

r : read

w : write

x : execute

u : user คือเจ้าของไฟล์

g : group ของเจ้าของไฟล์

o : กลุ่ม user อื่น

 

– Octal values

เช่น umask 027  ซึ่งกล่มชุดตัวเลขหมายถึง

0 : Full permissions (Read, Write, Execute)

1 : Write and read

2 : Read and execute

3 : Read only

4 : Write and execute

5 : Write only

6 : Execute onlyadminadmin

7 : No permissions

สำหรับค่า default ของ umask จะมีค่าเป็น 0022 (022) หรือ 0002 (002)

ซึ่งผู้ดูแลระบบสามารถกำหนดค่า umask สำหรับทุกๆ user (ค่า global) เมื่อมีการสร้างไฟล์ใหม่เพื่อให้มีความปลอดภัยเพิ่มขึ้นได้ที่ /etc/profile

หรือสามารถเจาะจงสำหรับแต่ละ user ได้ที่ไฟล์ ~/.bashrc ของ user นั้นๆ

ตัวอย่างการทดสอบสร้างไฟล์มีการกำหนดค่า umask 027 แล้ว

จะเห็นได้ว่า เมื่อมีการสร้างไฟล์หรือไดเรกทอรี จะมีการจำกัดสิทธิ์ของผู้ที่สามารถใช้งานได้ ได้อย่างมีขอบเขตยิ่งขึ้น

ทั้งนี้กรณีที่ต้องการเปลี่ยนแปลง permission ของไฟล์ สามารถเปลี่ยนได้จากคำสั้ง chmod

แต่ไม่ควรกำหนดค่าด้วย chmod 777 โดยค่าดังกล่าวหมายถึง ทุก user บนระบบสามารถอ่าน, เขียนและแก้ไขไฟล์หรือไดเรกทอรีนั้นๆได้ ซึ่งถือว่าไม่ปลอดภัยอย่างยิ่ง

 

การกำหนดให้มีการ logout โดยอัตโนมัติ

เมื่อผู้ดูแลระบบหรือ user มีการ login เข้าสู่ในระบบ และเมื่อดำเนินการส่วนต่างๆ เรียบร้อย อาจไม่มีการ logout หรือใช้งานต่อ แต่สถานะยังคงมี connection ค้างอยู่

ทั้งนี้ สามารถกำหนดให้มีการ logout user โดยอัตโนมัติได้ หาก user นั้นๆ ไม่มีการดำเนินการใดๆ ในช่วงเวลาที่กำหนด โดยสร้างไฟล์ /etc/profile.d/autologout.sh และกำหนดค่า ตามด้านล่าง

จากนั้นให้บันทึกไฟล์ และกำหนดให้สามารถ execute ไฟล์ได้

จากการกำหนดค่า หมายถึงจะมีการยกเลิกการใช้งาน user ออกจากระบบ หากไม่มีการใช้งานหรือดำเนินการใดภายใน 10 นาที เป็นต้น

 

การเพิ่มความปลอดภัยให้ Secured Shell service

ในการใช้งาน linux server เพื่อให้สามารถจัดการระบบได้อย่างสะดวกยิ่งขึ้น service ที่จำเป็นต้องเปิดใช้งานตัวหนึ่งคือ sshd service ทั้งนี้เราสามารถปรับค่าต่างๆ ในการใช้งาน เพื่อให้การ remote server ปลอดภัยขึ้นได้ ดังนี้

เตรียม ทำการสร้าง public key จากเครื่องที่ต้องการใช้เป็นเครื่อง client ซึ่ง ssh เข้าสู่ server

Linux client

Run คำสั่งด้วย user ที่ต้องการ remote จาก client ไปยัง server

และกด Enter เพื่อใช้ชื่อ default คือ id_rsa และ id_rsa.pub โดยไฟล์จะสร้างและวางไว้ที่ $HOME/USERNAME/.ssh

เมื่อได้ไฟล์ public key เรียบร้อยแล้ว ให้นำไฟล์นี้ไปติดตั้งยังเครื่อง server ด้วยคำสั่ง

Windows client

สามารถเลือกใช้การ generate key ผ่านโปรแกรม

1) winscp

2) putty

เมื่อนำไฟล์ public key ไปวางบน server เรียบร้อยแล้ว ให้เปลี่ยน permission ของไฟล์ให้ถูกต้อง

เปิดไฟล์ /etc/ssh/sshd_config ที่ server เพื่อทำการปรับค่าดังนี้

และ save ไฟล์ให้เรียบร้อย

โดยก่อนทำการ restart service ให้ทำการเปิด port ใหม่ที่จะใช้งานสำหรับ SSH ให้เรียบร้อย

คำสั่งกรณีที่มีการใช้งาน FirewallD

เมื่อปรับค่าต่างๆ เรียบร้อยจึงทำการ restart service

 

การใช้งาน Firewall

เมื่อมีการนำ server ไปใช้งานเป็น production หรือ public สิ่งที่จำเป็นและช่วยป้องการ server ได้ดียิ่งขึ้นคือ firewall       สำหรับ centos 7 จะมี FirewallD ให้ใช้งาน หรือสามารถเลือกงาน iptables ได้เช่นกัน

ในปัจจุบันจะมี firewall ให้เลือกใช้งานอย่างหลากหลาย โดยที่นิยมใช้งานเช่น CSF, IPCop, Shorewall เป็นต้น ซึ่งสามารถเลือกใช้งานได้ตามแต่ลักษณะของ server เพื่อความเหมาะสม

 

การปรับค่าของ Kernel

ทั้งนี้อีกส่วนบน server ที่สามารถปรับค่าได้คือ Kernel ของระบบนั้น โดยสามารถปรับค่าของ Kernel ได้ที่ไฟล์ /etc/sysctl.conf

ตัวอย่างการปรับค่า เช่น

และทำการ reload config อีกครั้ง

 

จากตัวอย่างของการปรับแต่งค่าต่างๆ ข้างต้นที่ได้กล่าวมาทั้งหมดในบนความนี้ เป็นเพียงบางส่วนที่สามารถช่วยป้องกันให้ server ปลอดภัยขึ้นได้ อย่างไรก็ดี การปรับค่าในส่วนของการใช้งานตาม service ต่างๆ บน server เอง ก็มีความสำคัญ ทั้งนี้เนื่องจากความต้องการในการใช้งาน server ในแต่ละระบบมีความแตกต่างกัน ดังนั้นผู้ดูแลระบบต้องเลือกปรับค่าต่างๆ ตามความเหมาะสมเพื่อให้สามารถใช้งาน server ได้อย่างมีประสิทธิ์ภาพ

ข้อมูลเพิ่มเติม https://wiki.centos.org/HowTos

Share this:Share on FacebookTweet about this on TwitterShare on Google+Pin on Pinterest