Thursday, July 19, 2012

ขั้นตอนการติดตั้ง CentOS 6.2 แบบ Minimal

บทความนี้จะแนะนำการติดตั้งและใช้งาน CentOS http://www.centos.org/ ซึ่งเป็น Linux สาย Redhat ตัวหนึ่ง ในการนำมาใช้ทำเป็น Server โดยจะแบ่งเนื้อหาออกเป็นตอนๆ เพื่อความสะดวกของคนเขียน (ผมเอง) โดยจะมีเนื้อหาทั้งหมดคราวๆ ตามหัวข้อดังนี้
* CentOS Minimal Installation
* Web Server: Apache and PHP
* Secure Web Server : Apache & Mod SSL
* Database: MySQL & PHP MySQL Extension
* Database: Oracle & PHP OCI8 Extension
* Mail Server: Postfix
* DNS Server: BIND
* FTP Server: ProFTPD
* User & Group Management
เราจะเริ่มตั้งแต่ขั้นตอนการติดตั้งกันก่อน โดยจะทำการติดตั้งแบบ Minimal ซึ่งเป็นแบบที่ติดตั้งองค์ประกอบต่างๆน้อยที่สุด ไม่มี GUI ให้ใช้ เหมาะกับการเอาไปทำ Server เป็นอย่างยิ่ง และโปรแกรมอื่นๆที่จำเป็น เราจะมาทำการติดตั้งเพิ่มเติมเองในภายหลัง

อย่างแรกเราต้องทำการ Download ตัวติดตั้งมาก่อน ซึ่งจะมีให้เลือก Download อยู่ 2 แบบหลักๆ ตามชนิดของ CPU ของเราคือ i386 จะใช้สำหรับ CPU 32 บิท และ x86_64 จะใช้สำหรับ CPU แบบ 64 บิท
# i386 สำหรับ CPU 32 บิท
http://mirror.centos.org/centos/6.2/isos/i386/
# x86_64 สำหรับ CPU 64 บิท
http://mirror.centos.org/centos/6.2/isos/x86_64/
จากนั้นทำการ Download CentOS-6.2-i386-minimal.iso หรือ CentOS-6.2-x86_64-minimal.iso ตามชนิดของ CPU ของเรา
ขั้นตอนแรกเลือก Install or upgrade an existing system
CentOS-Minimal-Install
Skip ไปเลยเพราะว่าเราไม่ต้องการทำการตรวจสอบแผ่น
CentOS-Minimal-Install
เข้าสู่หน้าจอการติดตั้งแบบกราฟฟิกอันสวยงาม กด Next
CentOS-Minimal-Install
ทำการเลือกภาษา
CentOS-Minimal-Install
จากนั้นเลือก Keyboard Layout
CentOS-Minimal-Install
ทำการเลือก Basic Storage Device เพราะว่าเราใช้ Hard Disk ธรรมดาๆ
CentOS-Minimal-Install
กด Yes, discard any data เพื่อยืนยันว่าถ้ามีข้อมูลอยู่ใน Hard Disk ตัวนี้เราไม่เอามันแล้วนะให้ลบเลย
CentOS-Minimal-Install
ทำการตั้งชื่อเครื่อง ในที่นี้ผมตั้งว่า centos.unzeen.com
CentOS-Minimal-Install
จากนั้นคลิกที่ Configure Network เพื่อทำการกำหนด IP Address โดยเลือกไปที่ Wired และคลิก Edit ที่ eth0 ซึ่งเป็นการ์ดแลนของเราเอง
CentOS-Minimal-Install
ทำการคลิกถูกที่ Connect automatically (อันนี้ห้ามลืมเลยนะ) จากนั้นเลือกไปที่แท็บ IPv4 Setting กำหนดข้อมูลในช่อง Method เป็น Manual และทำการเพิ่ม IP Address, Netmask, Gateway, DNS Server โดยของผมกำหนดดังนี้
1
2
3
4
IP Address : 192.168.10.10
Netmask : 24
Gateway : 192.168.10.1
DNS Server : 8.8.8.8 //อันนี้ของกูเกิลเลยนะ
CentOS-Minimal-Install
ต่อไปทำการเลือกประเทศ
CentOS-Minimal-Install
กำหนดรหัสผ่านสำหรับ root //ตั้งรหัสผ่านยากๆ ไว้
CentOS-Minimal-Install
เลือก Use All Space เพราะว่าเราต้องการติดตั้งโดยไม่แบ่ง partition แต่ถ้าใครเชียวชาญมากแล้วก็เลือก Create Custom Layout ได้เลยไม่ว่ากัน
CentOS-Minimal-Install
คลิก Write changes to disk
CentOS-Minimal-Install
ระบบเริ่มทำการติดตั้ง CentOS ลงบน Hard Disk ของเรา รอสักครู่……
CentOS-Minimal-Install
เมื่อติดตั้งเรียบร้อยแล้วคลิก Reboot
CentOS-Minimal-Install
เมื่อ Reboot เรียบร้อยแล้วเราจะเห็นหน้าจอให้ใส่ Username และ Password (ไม่มีหน้าจอแบบ GUI ให้นะจ้ะ เพราะว่าเราจะเอามาทำ Server หน้าจอกราฟฟิกแบบ GUI คงไม่จำเป็น)
CentOS-Minimal-Install
ขั้นตอนต่อไปทำการลงโปรแกรมแรกในเครื่องกันก่อน อันนี้ผมลง nano เอาไว้แก้ไขเท็กไฟล์ต่างๆ เพราะผมใช้ vi หรือ vim ไม่คล่อง แต่สัญญาว่าจะหัดใช้ – -’
1
# yum install nano
CentOS-Minimal-Install
จากนั้นทำการ Disable SELinux โดยเข้าไปแก้ไขไฟล์คอนฟิกที่ /etc/selinux/config โดยแก้ไขให้ SELINUX=disabled (ใน nano ให้กด CTRL+O เพื่อทำการ save และกด CTRL+X เพื่อออกจากโปรแกรม)
1
# nano /etc/selinux/config
CentOS-Minimal-Install
ต่อไปทำการ Disable Firewall
1
# chkconfig iptables off
CentOS-Minimal-Install
เมื่อแก้ไขค่าต่างๆเรียบร้อยแล้วทำการ restart สักหนึ่งรอบ
1
# shutdown -r now
CentOS-Minimal-Install
เมื่อ Reboot เครื่องเสร็จแล้ว เราสามารถทำการ SSH เพื่อเข้าใช้งานได้
CentOS-Minimal-Install
เสร็จสินขั้นตอนการติดตั้ง CentOS 6.2 แบบ Minimal เพียงเท่านี้ คราวหน้าเราจะมาติดตั้ง Apache, mod_ssl และ php กันต่อ ^^

CentOS Linux เซิร์ฟเวอร์ทางเลือกสำหรับองค์กร


ในปัจจุบันซอฟต์แวร์สำหรับใช้ทำเป็นระบบ Intranet หรือ Internet Server ขององค์กรมีให้เลือกใช้งานหลายตัวด้วยกัน อาทิ เช่น Windows Server (Windows Server 2003, Windows Server 2008), Linux Server (RedHat, Fedora, CentOS, Ubuntu, Debian, Slackware, SuSE, Mandriva, OpenNA, IPCop, Linux-SIS), BSD Server (FreeBSD, OpenBSD, NetBSD), Solaris (Sun Solaris, OpenSolaris) เป็นต้น การที่จะเลือกระบบปฏิบัติการตัวใดมาทำเซิร์ฟเวอร์ใช้งานในองค์กรนั้น สำหรับ Admin มือเก๋าไม่น่าเป็นปัญหามากนักเพราะได้ทดสอบลองผิดลองถูกมาพอสมควร จะว่าไปแล้วในอดีตใครที่ติดตั้ง Linux และทำการคอนฟิกให้ระบบใช้งานผ่านได้ก็ถือว่าเก่งพอสมควร รวมทั้งหลังการติดตั้งเสร็จก็สามารถเปิดใช้งานได้ตามปกติ น้อยครั้งนักที่ระบบจะโดนแฮกซ์ แต่หากเป็น Admin น้องใหม่ในปัจจุบันการลองผิดลองถูกคงเป็นการยากแล้ว เนื่องจากปัจจุบันมีแฮกเกอร์ทั่วบ้านทั่วเมืองใครๆ ก็สามารถเรียนรู้วิธีการแฮกซ์ระบบเซิร์ฟเวอร์ผ่านเว็บ Google สำหรับ Admin น้องใหม่กว่าจะทดลองสำเร็จบางครั้งระบบโดนเจาะไปเรียบร้อยแล้ว
สำหรับบทความตอนนี้นับเป็นตอนแรกที่ผู้เขียนไปเปิดประเด็นในมุมของ Open Source ซึ่งผู้เขียนเองได้รับเชิญจากคุณสุวัจชัย บก. WindowsITPro ให้เขียนคอลัมป์นี้ ซึ่งเป็นคอลัมป์ที่พูดเรื่อง Open Source ล้วนๆ สำหรับเดือนนี้เป็นการแนะนำระบบปฏิบัติการเครือข่ายลีนุกซ์ที่ชื่อว่า CentOS โดยผู้เขียนได้แนะนำภาพรวมของระบบ รวมทั้งแนะนำแพ็กเกจยอดนิยมสำหรับนำไปใช้งานในองค์กร และส่วนสุดท้ายได้กล่าวถึงแนวทางในการติดตั้งระบบ CentOS ผู้เขียนคิดว่าขณะนี้หลายหน่วยงานใช้ระบบลีนุกซ์ตัวนี้อยู่ จากการสอบถามเพื่อนๆ ในวงการ Admin ได้คำตอบว่าหน่วยงานที่ใช้ระบบลีนุกซ์ตัวนี้มากที่สุดน่าจะเป็นศูนย์บริการ รับฝากเว็บไซต์หรือนิยมเรียกกันในชื่อ Web Hosting สำหรับองค์กรธุรกิจก็มีอยู่หลายองค์กรที่เบื้องหลังใช้ระบบลีนุกซ์ตัวนี้รัน อยู่ หลังจากอ่านบทความนี้แล้วผู้เขียนแนะนำให้ลองหาแผ่น CentOS มาทดสอบกันเพื่อจะได้เห็นผลลัพธ์อย่างแท้จริง เอาเป็นว่าเรามาทำความรู้จักเจ้าลีนุกซ์ตัวนี้กัน
จัก CentOS Linux

CentOS ย่อมาจาก Community ENTerprise Operating System เป็นลีนุกซ์ที่พัฒนามาจากต้นฉบับ RedHat Enterprise Linux (RHEL) โดยที่ CentOS ได้นำเอาซอร์สโค้ดต้นฉบับของ RedHat มาทำการคอมไพล์ใหม่โดยการพัฒนายังเน้นพัฒนาเป็นซอฟต์แวร์ Open Source ที่ถือลิขสิทธิ์แบบ GNU General Public License ในปัจจุบัน CentOS Linux ถูกนำมาใช้ในการทำ Web Hosting กันอย่างกว้างขวางเนื่องจากเป็นระบบปฏิบัติการที่มีต้นแบบจาก RedHat ที่มีความแข็งแกร่งสูง (ปัจจุบันเน้นพัฒนาในเชิงการค้า) การติดตั้งแพ็กเกจย่อยภายในสามารถใช้ได้ทั้ง RPM, TAR, APT หรือใช้คำสั่ง YUM ในการอัปเดทซอฟต์แวร์แบบอัตโนมัติ สามารถอ่านรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.centos.org

เว็บไซต์ http://www.centos.org
เหตุผลหลักที่องค์กรจะเลือกใช้ระบบ CentOS
สำหรับองค์กรธุรกิจเหมาะสมอย่างมากที่จะนำระบบตัวลีนุกซ์ตัวนี้มาทำเป็น เซิร์ฟเวอร์ใช้งานภายในองค์กร โดยพอสรุปเหตุผลหลักในการนำระบบนี้มาใช้งานได้ดังนี้
1. เพื่อประหยัดงบประมาณขององค์กร เนื่องจาก CentOS เป็นซอฟต์แวร์โอเพ่นซอส องค์กรไม่จำเป็นต้องจ่ายค่าลิขสิทธ์ซอฟต์แวร์ (เพียงแต่ผู้ดูแลระบบต้องลงทุนเรียนรู้ระบบก่อนการใช้งาน ในปัจจุบันสามารถเรียนรู้ได้ง่ายดายผ่านทางหน้าเว็บ Google.com)
2. เพื่อนำมาทำเซิร์ฟเวอร์บริการงานต่างๆ ในองค์กร ซึ่งภายใน CentOS มีแพ็กเกจย่อยที่นำมาใช้ทำเซิร์ฟเวอร์สำหรับใช้งานในองค์กรจำนวนมาก อาทิ เช่น Web Server(Apache), FTP Server(ProFTPd/VSFTPd), Mail Server(Sendmail/Postfix/Dovecot), Database Server(MySQL/PostgreSQL), File and Printer Server(Samba), Proxy Server(Squid), DNS Server(BIND), DHCP Server(DHCPd), Antivirus Server(ClamAV), Streaming Server, RADIUS Server(FreeRADIUS), Control Panel(ISPConfig) เป็นต้น
3. เพื่อนำมาทำเป็นระบบเซิร์ฟเวอร์สำหรับจ่ายไอพีปลอม (Private IP Address) ไปเลี้ยงเครื่องลูกข่ายในองค์กร รวมทั้งตั้งเป็นระบบเก็บ Log Files ผู้ใช้งาน เพื่อให้สอดคล้องกับพระราชบัญญัตว่าด้วยการกระทำความผิดเกี่ยวกับ คอมพิวเตอร์ปี 2550

การออกแบบเครือข่ายขนาดเล็ก-กลาง โดยใช้ CentOS เป็นเซิร์ฟเวอร์บริการงานต่างๆ
แพ็กเกจยอดนิยมสำหรับใช้งานบนระบบ CentOS
สำหรับในแผ่น CD ของ CentOS มีแพ็กเกจที่สามารถนำมาติดตั้งใช้งานได้ทันทีจำนวนมาก โดยสามารถนำมาติดตั้งใช้งานได้ทันที สำหรับแพ็กเกจที่ไม่มีอยู่ในแผ่น CD สามารถเข้าไปดาวน์โหลดได้ที่เว็บไซต์ http://www.rpmfind.net หรือ http://www.freshrpms.net คิดว่าคงเพียงพอต่อการใช้งาน สำหรับบทความตอนต่อๆ ไปผู้เขียนจะแนะนำการติดตั้งใช้งานซอฟต์แวร์เหล่านี้กัน โดยจะเน้นเป็นภาคปฏิบัติ เพื่อให้ผู้อ่านสามารถทดสอบหรือทดลองทำตามได้ เพื่อที่จะเป็นการยกระดับหรือพัฒนาความรู้ ความสามารถในวงการ Admin ไทย

เว็บไซต์ www.rpmfind.net

เว็บไซต์ www.freshrpms.net
จะหาดาวน์โหลดตัวติดตั้ง CentOS ได้ที่ไหน
สำหรับตัวติดตั้ง CentOS ผู้อ่านสามารถดาวน์โหลดตัวติดตั้งแบบ image file แล้วมาทำการเขียนแผ่น CD/DVD ใช้งานเอง แนะนำให้ไปดาวน์โหลดจากเว็บไซต์ http://isoredirect.centos.org/centos/5/isos/i386/ หรือไม่ก็ลองหาซื้อแผ่นที่เขาวางขายแถวพันทิพย์หรือฟอร์จูนดู

เว็บไซต์ http://isoredirect.centos.org/centos/5/isos/i386/
แนวทางเลือกวิธีการติดตั้ง
ในการติดตั้งระบบ CentOS Linux ใช้งานน่าจะอยู่ที่จุดประสงค์ของผู้จัดทำเป็นหลัก โดยการติดตั้งสามารถติดตั้งใช้งานได้หลายแนวทางด้วยกัน พอสรุปคร่าวๆ ได้ดังนี้
1.การติดตั้งระบบ Linux แยกกับระบบ Windows
การติดตั้งลักษณะนี้ในฮาร์ดดิก์สหนึ่งก้อนจะทำการติดตั้งระบบปฏิบัติการแยก กันระหว่างระบบ Linux กับระบบ Windows โดยติดตั้งระบบ Windows ได้ที่ไดร์ฟหลัก (C:\) และติดตั้งตั้งระบบ Linux ไว้ที่ไดร์ฟรอง สำหรับไดร์ฟที่ทำการติดตั้งระบบลีนุกซ์ต้องแบ่งอย่างน้อยสองพาร์ติชั่น คือ Linux Native สำหรับไว้เก็บข้อมูล และ Linux Swap สำหรับเป็นสว๊อพพาร์ติชั่น ในการแบ่งพาร์ติชั่นสามารถใช้ Fdisk แบ่งก่อนการติดตั้งระบบวินโดวส์ หรือใช้โปรแกรม Partition Magic แบ่งหลังการติดตั้งวินโดวส์ ผู้ติดตั้งสามารถเลือกวิธีการแบ่งพื้นที่ฮาร์ดดิสก์ได้ว่าจะใช้เก็บระบบ วินโดวส์กี่เปอร์เซ็นต์และใช้เก็บระบบลีนุกซ์กี่เปอร์เซ็นต์

การแบ่งพาร์ติชั่นแยกกันระหว่าง Windows กับ Linux
แบ่งฮาร์สดิสก์แบบ 50:50 (Windows = 50%, Linux = 50%)

การแบ่งพาร์ติชั่นแยกกันระหว่าง Windows กับ Linux
แบ่งฮาร์สดิสก์แบบ 70:30 (Windows = 70%, Linux = 30%)
2.การติดตั้งระบบ Linux ผ่านทางโปรแกรม Virtualization
การติดตั้งวิธีนี้ผู้ติดตั้งสามารถเลือกได้ว่าจะติดตั้งระบบปฏิบัติการตัวใด ลงไปก่อน หลังจากติดตั้งระบบปฏิบัติการเสร็จก็ทำการติดตั้งโปรแกรม Virtualization อาทิ เช่น VMWare, VirtualBox หรือ Microsoft Virtual PC ภายหลัง เสร็จแล้วก็ทำการติดตั้งระบบ Windows Server หรือ Linux Server ผ่านทางโปรแกรม Virtualization อีกครั้งหนึ่ง การติดตั้งวิธีนี้ระบบจะทำการหั่นพื้นที่ส่วนหนึ่งของฮาร์ดดิสก์มาติดตั้ง ระบบ โดยไม่ไปทำลายระบบวินโดวส์/ลีนุกซ์ กล่าวคือหากระบบปฏิบัติการภายในโปรแกรม Virtualization พัง จะไม่ส่งผลกระทบต่อระบบปฏิบัติการที่ใช้งานอยู่ การติดตั้งตามแนววิธีนี้เหมาะสำหรับห้อง LAB ในสถาบันการศึกษา สถาบันฝึกอบรมหลักสูตรคอมพิวเตอร์ นักเรียน นักศึกษา หรือผู้สนใจทั่วไปที่ต้องการทดสอบใช้งานลีนุกซ์

การติดตั้ง Linux ผ่านทางโปรแกรม Virtualization ในระบบ Windows

การติดตั้ง Windows ผ่านทางโปรแกรม Virtualization ในระบบ Linux

ตัวอย่างโปรแกรม VirtualBOX

ตัวอย่างโปรแกรม VMWare
3.การติดตั้งลีนุกซ์เพื่อใช้งานจริง
การติดตั้งวิธีนี้เป็นการติดตั้งระบบลีนุกซ์เพียงระบบเดียว ไม่มีระบบอื่นเข้ามาเกี่ยวข้อง เหมาะสำหรับติดตั้งใช้งานจริง ในการติดตั้งสามารถแบ่งพื้นที่ฮาร์ดดิสก์ได้ 2 ลักษณะ คือ
3.1 การแบ่งฮาร์ดดิสก์เป็น 2 พาร์ติชั่น
3.1.1 พาร์ติชั่นแรกแบ่งเป็น Linux Swap (Swap) โดยแบ่งเป็น 2 เท่าของ RAM ที่ใช้งานอยู่ ตัวอย่างเช่นกรณีมี RAM อยู่ 512 MB ก็กำหนดเป็น 512 x 2 = 1024 MB
3.1.2 พาร์ติชั่นที่สองแบ่งเป็น Linux Native (Ext3) สำหรับเก็บข้อมูลโดยใชพื้นที่ดิสก์ที่เหลืออยู่

การแบ่งฮาร์ดดิสก์เป็น 2 พาร์ติชั่น
3.2 การแบ่งฮาร์ดดิสก์โดยแบ่งพาร์ติชั่นแบบแยกอิสระ
การแบ่งวิธีนี้ผู้ติดตั้งต้องมีการจัดสรรพื้นที่ฮาร์ดดิสก์ใช้งานตามความ ต้องการ อาทิ แบ่งพื้นที่ห้อง /home ไว้สำหรับเก็บเว็บไซต์ผู้ใช้งาน/ลูกค้า, ห้อง /usr สำหรับใช้ติดตั้งแพ็กเกจต่างๆ ห้อง /var สำหรับเก็บล็อกไฟล์, ห้อง /tmp สำหรับเก็บไฟล์ชั่วคราว, ห้อง /cache สำหรับเก็บบันทึกเหตุการณ์ต่างๆ ของโปรแกรมพร็อกซี่เซิร์ฟเวอร์, ห้อง/สำหรับตั้งเป็นรู๊ทพาร์ติชั่น, ห้อง swap สำหรับทำสว๊อพพาร์ติชั่น เป็นต้น

การแบ่งฮาร์ดดิสก์โดยพาร์ติชั่นแบบแยกอิสระ

ซอฟต์แวร์แนะนำสำหรับองค์กร
Apache เป็นโปรแกรมที่ใช้ทำเว็บเซิร์ฟเวอร์ยอดนิยมในปัจจุบัน (ดูจากสถิติการใช้งานในเว็บไซต์ http://news.netcraft.com/archives/web_server_survey.html) ดูรายละเอียดของ Apache HTTP Server Project ได้ที่ http://httpd.apache.org Vsftpd เป็นโปรแกรมใช้ทำเอฟทีพีเซิร์ฟเวอร์ สำหรับส่งถ่ายไฟล์ ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.proftpd.org
VSFTPd เป็นโปรแกรมใช้ทำเอฟทีพีเซิร์ฟเวอร์สำหรับส่งถ่ายไฟล์ ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://vsftpd.beasts.org
Sendmail เป็นโปรแกรมใช้ทำเมลเซิร์ฟเวอร์ (MTA) ที่นิยมในอดีตจนถึงปัจจุบัน โดยที่ Sendmail ได้ถูกนำเป็นต้นแบบในการพัฒนาระบบเมล์ค่ายอื่นๆ อีกหลายๆ ค่าย ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.sendmail.org
Postfix เป็นโปรแกรมใช้ทำเมลเซิร์ฟเวอร์ (MTA) คาดว่าจะมาแทนที่ Sendmail ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.postfix.org
Dovecot เป็นโปรแกรม POP3/IMAP Server (MTA) ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.dovecot.org
BIND9 เป็นโปรแกรมใช้ทำดีเอ็นเอสเซิร์ฟเวอร์ สำหรับบริการโดเมนเนมใช้งานในหน่วยงาน ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ https://www.isc.org
MySQL เป็นโปรแกรมใช้ทำดาต้าเบสเซิร์ฟเวอร์ ปัจจุบันบริษัท Sun Microsystem ได้ซื้อไปแล้วแต่ยังคงมีในส่วนของการพัฒนาส่วน Open Source อยู่ ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.mysql.com
PostgreSQL เป็นโปรแกรมใช้ทำดาต้าเบสเซิร์ฟเวอร์ ที่มีความแข็งแกร่งสูง ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.postgresql.org
PHP เป็นภาษาที่ใช้พัฒนาเว็บไซต์ที่ได้รับความนิยมสูงสุดในปัจจุบัน ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.php.net
Python เป็นภาษาที่ใช้แอพลิเคชั่นได้ทั้งแบบออนไลน์และอ๊อฟไลน์ ที่กำลังมาแรงมาก เน้นพัฒนาไปในแนว OOP ปัจจุบันภาษา Python ถูกนำมาพัฒนาแอพลิเคชันชื่อดังหลายตัว อาทิ Google Apps ,Plone CMF, Mailman, รวมทั้งถูกนำไปพัฒนาใช้งานในองค์กรอวกาศ NASA เป็นต้น ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.python.org
SquirrelMail เป็นโปรแกรมที่ใช้ทำเว็บเบสอีเมล ที่ได้รับความนิยมสุดในปัจจุบัน สามารถใช้งานได้ทั้งบนระบบวินโดวส์และลีนุกซ์ ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.squirrelmail.org
IPTABLES เป็นโปรแกรมที่ใช้ทำไฟล์วอลสำหรับกรองแพ็กเกจต่างๆ ทั้งภายในและภายนอกระบบ ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์http://www.netfilter.org
Squid เป็นโปรแกรมใช้ทำพร็อกซี่เซิร์ฟเวอร์ ที่เป็นที่นิยมใช้งานอย่างมาก ส่วนใหญ่จะใช้คู่กับโปรแกรม IPTABLES และ DHCP เพื่อทำเป็นระบบ NAT หรือ DMZ สำหรับควบคุมเครื่องลูกข่ายในองค์กร ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.squid-cache.org
MRTG เป็นโปรแกรมใช้วิเคราะห์การจราจรบนระบบเครือข่าย
ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://oss.oetiker.ch/mrtg/
NMAP ย่อมาจาก Network Mapper เป็นโปรแกรมใช้ตรวจสอบติดตามการใช้งานระบบเครือข่าย สามารถใช้ตรวจสอบการใช้งานเครือข่าย รวมทั้งใช้ตรวจสอบซอฟต์แวร์ผิดกฎหมาย ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.nmap.org
Webalizer เป็นโปรแกรมใช้วัดสถิติการใช้งานเว็บไซต์โดยการเก็บ Log ของเว็บเซิร์ฟเวอร์มาตรวจสอบ ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.webalizer.org
Snort เป็นโปรแกรม IDS / IPS ใช้สำหรับตรวจสอบ เตือนก่อนผู้บุกรุกเข้าระบบ ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.snort.org
OpenSSL เป็นโปรแกรมสำหรับเซ็ตให้ระบบมีความปลอดภัยมากขึ้นโดยการใช้คีย์พิเศษ ทำผ่านโปรโตคอล SSL ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.openssl.org
Spamsession เป็นโปรแกรมใช้สำหรับกันสแปมเมล์ ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://spamassassin.apache.org/
ClamAV เป็นโปรแกรม Clam AntiVirus ที่ได้รับความนิยมค่อนข้างสูงสำหรับติดตั้งใช้งานบนเซิร์ฟเวอร์ สำหรับผู้ที่ใช้งานบนเครื่องเดสทอปจะมีโปรแกรมที่ชื่อว่า ClamWin ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.clamav.net
Samba เป็นโปรแกรมใช้ทำ File Server หรือ Pinter Server สามารถนำมาทำเป็นระบบแชร์ไฟล์ร่วมกับระบบวินโดวส์ที่มีอยู่เดิม ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.samba.org
FreeRADIUS เป็นโปรแกรมใช้ในการตรวจสอบสิทธ์ของผู้ใช้งาน โดยการรวบรวมแอคเคาน์หลายเซิร์ฟเวอร์มาตรวจสอบไว้ในที่ๆ เดียวกัน ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://freeradius.org
Webmin เป็นโปรแกรมใช้บริหารเซิร์ฟเวอร์ผ่านหน้าเว็บไซต์ ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.webmin.com
ISPConfig เป็น Control Panel สำหรับบริหารจัดการเซิร์ฟเวอร์ ผ่านหน้าเว็บไซต์ ทำให้การใช้งานต่างๆ ง่ายเป็นอย่างมาก ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.ispconfig.org
VHCS เป็น Control Panel สำหรับบริหารจัดการเซิร์ฟเวอร์ ผ่านหน้าเว็บไซต์ ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://vhcs.net
OpenSCE ใช้ในการทำระบบ Cluster ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://www.opensce.org
OpenMosix ใช้ในการทำระบบ Cluster ดูรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ http://openmosix.sourceforge.net
----

Tuesday, June 19, 2012

การติดตั้ง FreeRadius และ phpmyprepaid บน ubuntu 8.10

การติดตั้ง FreeRadius และ phpmyprepaid บน ubuntu 8.10



ขั้นตอน
  1. หากยังไม่ติดตั้ง apache และ php ให้ติดตั้งด้วยคำสั่ง
    apt-get install apache2 php5 php5-mysql
  2. สั่งให้ apache ทำงานด้วยคำสั่ง
    /etc/init.d/apache2 restart
  3. หากยังไม่ติดตั้ง mysql ให้ติดตั้งด้วยคำสั่ง
    apt-get install mysql-server
  4. หากยังไม่ติดตั้ง FreeRadius ให้ติดตั้งด้วยคำสั่ง
    apt-get install freeradius freeradius-mysql
  5. สั่งให้ FreeRadius ทำงานด้วยคำสั่ง
    /etc/init.d/freeradius start
  6. เข้าสู่โปรแกรม mysql ด้วย username คือ root และ password ที่ได้กำหนดไว้ด้วยคำสั่ง
    mysql –u root –p
    แล้วป้อนรหัสผ่าน
    ของ root
  7. ทำการสร้าง Database ชื่อ phpmyprepaid เพื่อใช้ในการเก็บบัญชีผู้ใช้งาน (สามารถจะใช้ชื่อฐานข้อมูลอื่นก็ได้) ด้วยคำสั่งดังนี้
    CREATE DATABASE phpmyprepaid;
  8. กำหนดสิทธิให้กับบัญชีผู้ใช้งานบน mysql ที่ชื่อว่า phpmyprepaid พร้อม password คือ radpass (user และ password สามารถเปลี่ยนแปลงได้ตามความเหมาะสม) ด้วยคำสั่ง
    GRANT ALL PRIVILEGES ON phpmyprepaid.* to 'phpmyprepaid'@'localhost' IDENTIFIED BY 'radpass';
    FLUSH PRIVILEGES;
  9. ออกจาก mysql ด้วยคำสั่ง quit
  10. แก้ไขไฟล์ /etc/freeradius/sql.conf เพื่อให้เรียกใช้ฐานข้อมูล phpmyprepaid ด้วยสิทธิผู้ใช้เป็น phpmyprepaid ซึ่งมี password เป็น radpass  ดังนี้
    # Connection info:
    server = "localhost"
    login = "phpmyprepaid"
    password = "radpass"
    # Database table configuration for everything except Oracle
    radius_db = "phpmyprepaid"
  11. ทำการกำหนด password ให้กับเครื่อง Client ที่จะเข้าใช้งาน FreeRadius ที่ไฟล์ /etc/freeradius/cliens.conf โดยกำหนดให้ client 127.0.0.1 (หรือ client localhost) มีค่า secret = radiussecret
    client localhost {
    secret = radiussecret
    {

    ในกรณีที่อนุญาตให้เครื่อง client อื่นเข้ามาใ้้ช้งาน FreeRadius เช่น client ที่มี IP เป็น 172.24.51.16 ก็ให้กำหนดค่าเพิ่มเติมดังนี้
    client 172.24.51.16 {
    secret = radiussecret
    shortname = chilli
    }
  12. แก้ไขไฟล์ /etc/freeradius/sql.conf กำหนดให้ค่า readclients = yes เพื่อที่จะทำให้ radius client อ่านค่าจาก database
  13. แก้ไขไฟล์ /etc/freeradius/site-enabled/default ดังนี้ (ถ้าเป็น freeradius บน ubuntu เวอร์ชันก่อนหน้านี้เป็นไฟล์ /etc/freeradius/radiusd.conf)
    • ในส่วนของ  accounting {……} ให้เอาเครื่องหมาย  # หน้าคำว่า sql ออก เพื่อเรียกใช้ข้อมูลจาก database ในการตรวจสอบ username , password ในการทำ accounting
    • ในส่วน session {……} ให้เอาเครื่องหมาย # หน้าคำว่า sql ออก เพื่อเรียกใช้ข้อมูลจาก database ในการตรวจสอบ username, password ในการทำ session
    • ในส่วนของ authorize {……} ให้เอาเครื่องหมาย # ไว้หน้าคำว่า files  และเอาเครื่องหมาย # ออกจากคำว่า sql
  14. ทำการ restart FreeRadius ด้วยคำสั่ง
    /etc/init.d/freeradius restart
  15. ตอนนี้ ทั้ง freeradius และ mysql พร้อม database phpmyprepaid ว่าง ๆ พร้อมแล้ว
    ต่อไปจะทำการติดตั้งโปรแกรม phpmyprepaid แล้วรันโปรแกรมผ่านเว็บบราวเซอร์
    จากนั้นจะเซ็ตค่าต่าง ๆ บนหน้าเว็บ ทำให้ได้ table ต่าง ๆ ที่จำเป็นใช้งานเกิดขึ้น
  16. ย้ายเข้าไปในไดเรกทอรี /var/www/ ด้วยคำสั่ง
    cd /var/www
  17. ดาวน์โหลดโปรแกรม phpmyprepaid เวอร์ชั่น 0.4 RC2 ด้วยคำสั่ง wget ดังนี้
    wget http://downloads.sourceforge.net/phpmyprepaid/phpmyprepaid04RC2.tgz
  18. คลายแฟ้มออกมาจะได้ไดเรกทอรี phpmyprepaid
    tar zxvf phpmyprepaid04RC2.tgz
  19. ติดตั้งโปรแกรม  rrdtool ด้วยคำสั่ง
    apt-get install rrdtool
  20. เปิด browser และเรียกไปที่ http://host/phpmyprepaid/www   แล้วระบบจะเปิดไฟล์ setup.php ดังรูป



  21. ขั้นที่ 2 เป็นเรื่องของ License ให้คลิ๊กช่อง I Accept แล้วคลิ๊กปุ่ม Next



  22. ขั้นตอนที่ 3 ถ้าเจอปัญหาดังรูป



    ให้ใช้คำสั่ง
    chmod 777 /var/www/phpmyprepaid/www
    แล้วจะได้ผลลัพท์ดังรูป



  23. ขั้นตอนที่ 4 จะเป็นดังรูป ให้ป้อนค่าให้ถูกต้องโดยเฉพาะค่า Phpmyprepaid path อาจจะต้องเปลี่ยนให้ตรงความเป็นจริง



  24. ขั้นตอนเป็นการคอนฟิก Radius ก็ให้ป้อนข้อมูลให้ตรงตามรูป



  25. ขั้นที่ 6 เป็นการจัดการเรื่อง User Interface ก็ให้ป้อนข้อมูลตามต้องการ แต่อย่าลืม user และ password ที่ได้กำหนดไว้ด้วย



  26. ขั้นตอนที่ 7 เป็นการคอนฟิกฐานข้อมูล ให้ป้อนข้อมูลตรงกับที่ได้กำหนดไว้ดังรูป



  27. เมื่อป้อนข้อมูลในขั้นตอนที่ 7 ถูกต้อง ก็จะได้ผลลัพท์ดังขั้นตอนที่ 8



  28. ขั้นตอนที่ 9 เป็นการป้อนข้อมูล Location ดังรูป



  29. ขั้นตอนที่ 11 เป็นการคอนฟิกข้อมูลทั่วไป ดังรูป



  30. ขั้นตอนที่ 11 เป็นขั้นตอนสุดท้าย ให้อ่านข้อความด้วยนะครับเพราะมีคำแนะนำบางอย่างที่ต้องทำตามด้วย



  31. จากนั้นเมื่อเราเรียกใช้งาน http://host/phpmyprepaid/www/ ก็จะได้หน้าตาดังรูป



  32. เมื่อ Login เข้าสู่ระบบได้แล้ว จะได้ผลลัพท์ดังรูป



  33. รูปข้างล่างเป็นตัวอย่างการเพิ่ม Account ที่สามารถกำหนดความเร็วในการ upload และ download ได้



  34. ทดสอบการทำงานของ FreeRadius ด้วยคำสั่ง radtest
    radtest  username  password  localhost 0 mysecret
    ถ้าเซ็ตอัพถูกต้องและป้อนค่าถูกต้องจะได้ผลลัพธ์ว่า Access-Accept ดังรูป
    ถ้าไม่ได้ให้ลองเปลี่ยนคำว่า localhost เป็น 127.0.0.1

ติดตั้ง psu-radius บน ubuntu

  • PSU-radius เป็น freeradius รุ่นที่ได้ปรับแต่งให้ติดตั้งพร้อมใช้งาน สามารถ authen กับ mail server และ PSU passport ได้
  • ทดสอบกับ ubuntu 10.04

รูปภาพการติดตั้ง
  1. ให้ดาวน์โหลดแฟ้ม http://ftp.psu.ac.th/pub/psu-radius/psu-radius.tgz มาเก็บไว้ก่อน
    ตัวอย่างดาวน์โหลดมาเก็บไว้ที่ /tmp ใช้คำสั่งประมาณว่า
    wget http://ftp.psu.ac.th/pub/psu-radius/psu-radius.tgz -N -P /tmp
  2. แตกแฟ้มที่ดาวน์โหลดมา เอาไปเก็บไว้ที่ /tmp ด้วยคำสั่งประมาณว่า
    tar -zxpvf /tmp/psu-radius.tgz -C /tmp
  3. เข้าไปทำงานใน directory ที่ถูกสร้างขึ้นมาตอนแตกแฟ้มนี้ ด้วยคำสั่งประมาณว่า
    cd /tmp/psu-radius
  4. เริ่มขั้นตอนติดตั้งด้วยคำสั่ง
    sudo sh install-psu-radius.sh
  5. ระบบจะเริ่มทำการติดตั้ง รอสักครู่ก็จะใช้งานได้
  6. ทดสอบ user ใน server แบบ localhost โดยตรง ใช้คำสั่งว่า
    sudo radtest mama 123456 127.0.0.1 0 testing123
  7. หากต้องการปรับตั้งค่าให้ radius server นี้บริการผ่าน network และปรับตั้ง key
    ให้แก้ไขรายการ client ผ่าน network ที่แฟ้ม /etc/freeradius/clients.conf
    ตัวอย่างประมาณว่า
    client 10.0.5.0/24 {
    secret = mytestkey
    shortname = private-network
    }
  8. ทดสอบ user ใน server ผ่าน network ใช้คำสั่งประมาณว่า
    sudo radtest mama 123456 server_ip 0 mytestkey
  9. ทดสอบ user@gmail.com ใช้คำสั่งประมาณว่า
    sudo radtest user@gmail.com yourpassword 127.0.0.1 0 testing123
  10. การยืนยันตัวตนใช้ username / password ตั้งให้ authen กับ server ต่างๆได้ที่แฟ้ม /etc/freeradius/imap-authen.sh เลือกตั้งค่าดังนี้

    AUTHEN_SHADOW="YES" หมายถึงให้ authen กับแฟ้ม /etc/passwd ด้วย

    AUTHEN_MAIL="YES" หมายถึงให้ authen กับ mail server ด้วย
    ให้ปรับค่า DEFAULT_MAIL_SERVER="your.domain" ให้เป็น mail server ที่ต้องการ

    AUTHEN_LDAP="NO" หมายถึงไม่ต้อง authen กับ ldap server
    ถ้าต้องการให้ authen กับ ldap server ต้องแก้ไขตัวแปรเปลี่ยนเป็น AUTHEN_LDAP="YES"
    แล้วแก้ไขแฟ้ม /etc/freeradius/check-ldap.sh ตั้งค่า LDAP SEVER ให้ถูกต้องเช่น
    LDAP_HOST="ldap://your.domain"
    LDAP_BASE="dc=aa,dc=bb"

    AUTHEN_SSH="NO" หมายถึงไม่ต้อง authen กับ ssh server
    ถ้าต้องการให้ authen กับ ssh server ต้องแก้ไขตัวแปรเปลี่ยนเป็น AUTHEN_SSH="YES"
    และปรับค่า SSH_SERVER="server.domain" ให้เป็น ssh server ที่ต้องการ

    AUTHEN_PSU_PASSPORT="NO" หมายถึงไม่ต้อง authen กับระบบ PSU passport
    ถ้าต้องการให้ authen กับระบบ PSU passport ต้องแก้ไขตัวแปรเปลี่ยนเป็น AUTHEN_PSU_PASSPORT="YES"
    CHECK_PREBLACKLIST="YES" หมายถึงตรวจสอบระบบ blacklist ด้วย
    รายชื่อ blacklist อยู่ในแฟ้ม /etc/freeradius/preblacklist.txt
    ถ้ามีชื่อปรากฏในแฟ้ม /etc/freeradius/preblacklist.txt ระบบจะไม่ไป authen เพื่อลดการโดน spam ถล่ม
  11. เมื่อ authen ด้วย username / password ถูกต้องผ่านมาได้แล้ว ต่อไปก็เป็นการตรวจสอบรายชือผู้มีสิทธิ์ใช้บริการ
    แก้ไขระบบตรวจสอบสิทธิ์ที่แฟ้ม /etc/freeradius/my-authen.sh ตั้งค่าดังนี้

    CHECK_BLACKLIST="YES" หมายถึงตรวจสอบระบบ blacklist ด้วย
    รายชื่อ blacklist อยู่ในแฟ้ม /etc/freeradius/blacklist.txt
    ถ้ามีชื่อปรากฏในแฟ้ม /etc/freeradius/blacklist.txt จะถูกตัดสิทธ์ใช้งาน

    ALL_PASS="YES" หมายถึงไม่ต้องตรวจสอบ ให้ผ่านได้ทุกคน
    หากเปลี่ยนป็น ALL_PASS="NO" หมายถึงว่าต้องตรวจสอบขั้นตอนอื่นตามลำดับถัดไป

    CHECK_VIPLIST="YES" หมายถึงตรวจสอบระบบแฟ้ม vip ด้วย
    หากมีรายชื่อปรากฏในแฟ้ม /etc/freeradius/viplist.txt ก็จะสามารถผ่านได้เลย

    CHECK_PSU_STAFF="YES" หมายถึงตรวจสอบว่าเป็น staff ของ PSU หรือไม่

    CHECK_PSU_STUDENT="YES" หมายถึงตรวจสอบว่าเป็น student ของ PSU หรือไม่

ติดตั้ง freeradius บน ubuntu



หมายเหตุ:  ต้องระวัง การปรับแต่งค่า freeradius 2.x บน ubuntu เปลี่ยนแปลงไปจาก freeradius 1.x ไปมาก

  • ทดสอบกับ ubuntu 10.04 และ freeradius 2.x
  • ต้นฉบับ freeradius อยู่ที่ http://freeradius.org
  • สมมติว่า radius server นี้มีหมายเลข ip เป็น 10.0.1.1
  1. ติดตั้งด้วยคำสั่ง sudo apt-get install freeradius freeradius-utils freeradius-mysql freeradius-ldap gawk
  2. สั่งให้ทำงานด้วยคำสั่ง sudo /etc/init.d/freeradius start
  3. ทดสอบว่า freeradius ติดตั้งใช้งานได้แล้วด้วยตัวอย่างคำสั่ง

    *** จากตัวอย่างให้แทนข้อความ your_root_password ด้วยรหัสผ่านของ root
    sudo radtest your_name your_password 127.0.0.1 0 testing123
    หากถูกต้องจะได้รับข้อความตอบกลับประมาณว่า
    Sending Access-Request of id 232 to 127.0.0.1 port 1812
        User-Name = "your-name"
        User-Password = "your_password"
        NAS-IP-Address = 255.255.255.255
        NAS-Port = 0
    rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=232, length=20

    ถึงตอนนี้แสดงว่า freeradius ใช้งานได้แล้ว แต่ใช้ได้เพียง localhost คือ 127.0.0.1
  4. หากต้องการอนุญาติให้ radius client เข้ามาใช้ radius server นี้ได้
    ต้องแก้ไขสิทธิ์ที่แฟ้ม /etc/freeradius/clients.conf  ปรับตั้งให้มีค่าดังประมาณตัวอย่างนี้
    client 10.0.1.0/24 {
            secret          = mytestkey
            shortname       = private-network
    }
    ตัวอย่างนี้คือให้ radius client ที่มีหมายเลข ip 10.0.1.x  สามารถเข้ามาใช้ด้วย secret key ว่า mytestkey
    เมื่อแก้ไขเสร็จแล้วให้ reload ใหม่ ด้วยคำสั่ง  sudo /etc/init.d/freeradius force-reload
    ลองทดสอบด้วยคำสั่งตัวอย่าง sudo radtest your_name your_password 10.0.1.1 0 mytestkey
    *** ค่า your_password คือ รหัสผ่านของ your_name และ 10.0.1.1 คือหมายเลข ip ของ radius server
    ได้ผลแสดงข้อความดังตัวอย่าง
    Sending Access-Request of id 246 to 10.0.1.1:1812
            User-Name = "your_name"
            User-Password = "your_password"
            NAS-IP-Address = 255.255.255.255
            NAS-Port = 0
    rad_recv: Access-Accept packet from host 10.0.1.1:1812, id=246, length=20

    ถึงขั้นตอนนี้เป็นอันเปิดบริการระบบ radius server ได้แล้ว
  5. ขั้นตอนการทำงานของ configuration ของ freeradius
    แฟ้ม /etc/freeradius/radiusd.conf  เป็นที่ปรับค่าของระบบต่างๆ

    หากเป็น freeradius 2.x จะมีการแยกแฟ้มย่อยออกไปจาก /etc/freeradius/radiusd.conf
    ไปอยู่ที่ /etc/freeradius/sites-available/default  และ /etc/freeradius/modules
    หากเป็น freeradius 1.x ทุกอย่างจะกระจุกตัวในแฟ้ม /etc/freeradius/radiusd.conf

    เมื่อ radius server ได้รับการติดต่อจากผู้ใช้ radius client
    วิธีการตรวจสอบคุณสมบัติของผู้ใช้อยู่ในส่วนที่ชื่อ authorize {...}
    ภายใน authorize {...} นี้ ประกอบด้วยชื่อ modules ตรวจสอบต่างๆ

    หากคุณสมบัติไม่ตรง ปรกติแล้วระบบก็จะรีบดีดออกมาพร้อมแจ้ง reject
    แต่เราสามารถกำหนดให้ไปตรวจสอบต่อกับ authorize modules
    เรียงลำดับอันถัดๆไปที่เหลืออื่นๆได้อีก

    หากคุณสมบัติผ่าน ก็จะเข้าขั้นตอนตรวจสอบรหัสผ่านของผู้ใช้ว่าถูกต้องหรือไม่
    โดย authorize modules จะเลือก modules ที่ต้องการเอง จากส่วนที่ชื่อ authenticate {...}

    หากรหัสผ่านถูกต้อง ก็จะเข้าสู่ส่วนของ postauth {...}
    เป็นการตรวจสอบทิ้งท้ายก่อนส่งคืนค่ากลับให้แก่ radius client ที่ติดต่อมา

    การบันทึกประวัติใช้งานอยู่ในส่วน accounting {...}

    modules ทุกตัวที่ใช้งาน จะต้องได้รับการประกาศไว้ก่อนแล้ว
    หากเป็น freeradius 2.x จะแยก modules ออกเป็นแฟ้มย่อยๆอยู่ที่ directory ชื่อ /etc/freeradius/modules
    หากเป็น freeradius 1.x จะมี modules อยู่ในแฟ้ม /etc/freeradius/radiusd.conf พื้นที่ส่วนของชื่อ modules {...}
  6. หากต้องการตรวจสอบผู้ใช้กับ mail server ผ่าน imap/pop3 ให้ทำดังนี้

    ตัวอย่างนี้จะตรวจสอบกับ mail server ชื่อ your.mail.server
    ต้องติดตั้ง php และ php-imap ก่อนแล้ว ติดตั้งด้วยคำสั่ง sudo apt-get install php5 php5-imap php5-cli
    แก้ไขแฟ้ม /etc/php5/cli/conf.d/imap.ini ตรวจสอบ/เพิ่มให้มีบรรทัดตัวแปรว่า extension=imap.so

    ต่อไปสร้างแฟ้ม /etc/freeradius/imap.php ให้มีเนื้อหาว่า
    <?php
    error_reporting(0);
    $host = $argv[1];
    $username = $argv[2];
    $password = $argv[3];
    $service = $argv[4];
    $imap_host="{" . $host . $service . "}";
    $mbox = imap_open("$imap_host", "$username", "$password");
    $folders = imap_listmailbox($mbox, "$imap_host", "*");
    if ($folders == false) {
            echo "false";
    } else {
            echo "true";
    }
    imap_close($mbox);
    ?>

    สร้างแฟ้มคำสั่ง shell script ชื่อ  /etc/freeradius/imap-authen.sh มีเนื้อหาว่า
    #!/bin/bash
    #exit 0 = valid ; exit 1 = invalid
    AUTHEN_SHADOW="YES"
    AUTHEN_MAIL="YES"
    AUTHEN_LDAP="NO"
    AUTHEN_PSU_PASSPORT="NO"
    NAME=$(echo ${USER_NAME} | cut -d'"' -f2)
    PASSWORD=$(echo ${USER_PASSWORD} | cut -d'"' -f 2-|sed "s/\"$//")
    KEY="false"
    if [ "${AUTHEN_SHADOW}" = "YES" ] ; then
      KEY=$(/bin/sh /etc/freeradius/check-shadow.sh "${NAME}" "${PASSWORD}")
      if [ "${KEY}" = "true" ] ; then
        exit 0
      fi
    fi
    if [ "${AUTHEN_LDAP}" = "YES" ] ; then
      KEY=$(/bin/sh /etc/freeradius/check-ldap.sh "${NAME}" "${PASSWORD}")
      if [ "${KEY}" = "true" ] ; then
        exit 0
      fi
    fi
    if [ "${AUTHEN_PSU_PASSPORT}" = "YES" ] ; then
      USER=$(echo ${NAME} | cut -d'@' -f1)
      KEY=$(/usr/bin/php /etc/freeradius/soap-authen.php ${USER} ${PASSWORD} $1 $2})
      if [ "${KEY}" = "true" ] ; then
        exit 0
      fi
    fi
    if [ "${AUTHEN_MAIL}" = "YES" ] ; then
      IS_EMAIL=$(echo ${NAME}|grep "@")
      if [ -n "${IS_EMAIL}" ] ; then
        USER=$(echo ${NAME} | cut -d'@' -f1)
        DOMAIN=$(echo ${NAME} | cut -d'@' -f2)
      else
        USER=${NAME}
        DOMAIN="mail.psu.ac.th"
      fi
      case ${DOMAIN} in
      psu.ac.th)
        HOST="mail.psu.ac.th"
        SERVICE=":143/imap/notls" ;;
      pharmacy.psu.ac.th)
        HOST="mail.pharmacy.psu.ac.th"
        SERVICE=":143/imap/notls" ;;
      pn.psu.ac.th)
        HOST="bunga.pn.psu.ac.th"
        SERVICE=":143/imap/notls" ;;
      gmail.com)
        HOST="pop.gmail.com"
        SERVICE=":995/pop3/ssl" ;;
      live.com)
        HOST="pop3.live.com"
        USER=${NAME}
        SERVICE=":995/pop3/ssl" ;;
      *)
        HOST=${DOMAIN}
        SERVICE=":110/pop3/notls" ;;
      esac
      KEY=$(/usr/bin/php /etc/freeradius/imap.php ${HOST} ${USER} ${PASSWORD} ${SERVICE})
      if [ "${KEY}" = "true" ] ; then
        exit 0
      fi
    fi
    exit 1

    สร้างแฟ้มแบบ text ชื่อ /etc/freeradius/myusers มีเนื้อหาว่า
    DEFAULT Auth-Type := Accept
                  Exec-Program-Wait="/bin/sh /etc/freeradius/imap-authen.sh"

    หากเป็น freeradius 2.x ให้แก้ไขแฟ้ม /etc/freeradius/modules/files เติมข้อความต่อท้ายแฟ้มว่า
    files  myimap  {
        usersfile = ${confdir}/myusers
    }
    แล้วแก้ไขแฟ้ม /etc/freeradius/sites-available/default
    ที่ส่วนของ authorize {...} ประมาณบรรทัดที่ 152 ที่บริเวณข้อความขึ้นต้นด้วย authorize {
    ...
    #  Read the 'users' file
         files
    ให้ comment บรรทัด files เพื่อยกเลิกค่านี้  แล้วแทรกเพิ่มบรรทัดข้อความเพิ่ม กลายเป็นว่า
    #    files
    แทรกเพิ่มบรรทัดข้อความว่า myimap ต่อไปอีกบรรทัด กลายเป็นว่า
    #   files
    myimap

    เสร็จแล้วให้สั่งทำงานใหม่ด้วยคำสั่ง sudo /etc/init.d/freeradius force-reload
    แค่นี้ก็เสร็จแล้ว ทดสอบผลงานได้เลย
  7. หากต้องการว่าหลังผ่านการตรวจสอบ username/password ถูกต้องแล้ว
    จะทำการบันทึกลงแฟ้ม log file เก็บไว้ที่ /var/log/freeradius/myauthen และยังต้องการตรวจวิธีการพิเศษเฉพาะของตนเองเพิ่มเติมอีก

    ตัวอย่างต้องการไม่อนุญาติให้ผู้ใช้ชื่อ demo และ abc ใช้งาน ให้ทำดังนี้
    สร้างแฟ้มคำสั่ง shell script ชื่อ  /etc/freeradius/my-authen.sh มีเนื้อหาว่า
    #!/bin/bash
    ###exit 0 = valid ; exit1 = invalid
    ALL_PASS="YES"
    CHECK_STAFF="NO"
    CHECK_STUDENT="NO"
    export LANG=en.US
    MYDIR="/var/log/freeradius/myauthen"
    if [ ! -d ${MYDIR} ] ; then
      mkdir -p ${MYDIR}
    fi
    TODAY=$(date "+%Y%m%d")
    MYFILE="${MYDIR}/${TODAY}"
    if [ ! -e ${MYFILE} ] ; then
      touch ${MYFILE}
    fi
    MYTIME=$(echo $1|awk '{print strftime("%Y%m%d:%H:%M:%S",$1)}')
    echo "${MYTIME};${USER_NAME};$2;$1;PASS" >> ${MYFILE}
    MYUSER=$(echo $USER_NAME | cut -d'"' -f2)
    if [ "${ALL_PASS}" = "YES" ] ; then
      exit 0
    fi
    if [ "${CHECK_STAFF}" = "YES" ] ; then
      case "${MYUSER}" in
        demo) exit 1 ;;
        *) exit 0 ;;
      esac
    fi
    if [ "${CHECK_STUDENT}" = "YES" ] ; then
      case "${MYUSER}" in
        demo) exit 1 ;;
        *) exit 0 ;;
      esac
    fi
    exit 1

    หากเป็น freeradius 2.x  ให้แก้ไขแฟ้ม /etc/freeradius/modules/exec เติมข้อความต่อท้ายแฟ้มว่า
    exec my-auth {
            program = "/bin/sh /etc/freeradius/my-authen.sh %l %{Packet-Src-IP-Address}"
            wait = yes
            input_pairs = request
            output_pairs = reply
            packet_type = Access-Accept
    }
    แล้วแก้ไขแฟ้ม /etc/freeradius/sites-available/default
    ที่ส่วนของ post-auth {...} ประมาณบรรทัดที่ 439  ที่บริเวณข้อความขึ้นต้นด้วย post-auth {
    ...
    แทรกเพิ่มบรรทัดข้อความเพิ่ม
    my-auth

    เสร็จแล้วให้สั่งทำงานใหม่ด้วยคำสั่ง sudo /etc/init.d/freeradius force-reload
  8. การบันทึกประวัติการใช้งานของ radius โดย defualt จะบันทึกไว้ในพื้นที่  /var/log/freeradius/radacct
    โดยแยกเป็น directory ของแต่ละหมายเลข ip ของ radius client
    แล้วยังแตกย่อยออกเป็นแฟ้มของแต่วันอีก ซึ่งอาจไม่สะดวกต่อการวิเคราะห์ข้อมูล
    เราสามารถเพิ่ม module บันทึกประวัติการใช้งานเพิ่มเติมจากของเดิม ตัวอย่างคือ
    ต้องการบันทึกไว้ใน directory ชื่อ /var/log/freeradius/myaccount
    แล้วเก็บแฟ้มแยกเป็นรายวันในรูปแบบ 20060729 ภายในแฟ้มมีรูปแบบว่า
    20060729:15:54:05;"demo";10.0.0.153;1154163245;"a5f56ebd6ebc1321";Start;
    20060729:15:55:06;"demo";10.0.0.153;1154163306;"a5f56ebd6ebc1321";Stop;61

    ให้ทำดังนี้ สร้างแฟ้มคำสั่ง shell script ชื่อ  /etc/freeradius/log-radius-account.sh มีเนื้อหาว่า
    #!/bin/bash
    export LANG=en.US
    MYDIR="/var/log/freeradius/myaccount"
    if [ ! -d ${MYDIR} ] ; then
      mkdir -p ${MYDIR}
    fi
    TODAY=$(date "+%Y%m%d")
    myfile="${MYDIR}/${TODAY}"
    if [ ! -e ${MYDIR} ] ; then
      touch ${MYDIR}
    fi
    MYTIME=$(echo $1|awk '{print strftime("%Y%m%d:%H:%M:%S",$1)}')
    echo "${MYTIME};${USER_NAME};$2;$1;${ACCT_UNIQUE_SESSION_ID};${ACCT_STATUS_TYPE};${ACCT_SESSION_TIME}" >> ${MYFILE}
    แฟ้ม shell script จบแค่นี้

    หากเป็น freeradius 2.x  ให้แก้ไขแฟ้ม /etc/freeradius/modules/exec เติมข้อความต่อท้ายแฟ้มว่า
    exec my-log-account {
         wait = no
         program = "/bin/sh /etc/freeradius/log-radius-account.sh %l %{Packet-Src-IP-Address} "
    }
    แล้วแก้ไขแฟ้ม /etc/freeradius/sites-available/default
    ที่ส่วนของ accounting  {...}ประมาณบรรทัดที่ 358  ที่บริเวณข้อความ accounting {
    ...
    detail
    ให้แทรกเพิ่มบรรทัดข้อความว่า
    my-log-account

    เสร็จแล้วให้สั่งทำงานใหม่ ด้วยคำสั่ง sudo /etc/init.d/freeradius force-reload
  9. radius server สามารถส่งค่าบอกเวลาที่ยังคงเหลือให้ใช้งาน
    โดยส่งค่ากลับมาที่ attribute ชื่อ Session-Timeout
    แต่ตัวมันเองคำนวณไม่เป็น ต้องหาวิธีอื่นในการคำนวณเวลา
    แล้วส่งกลับมาให้ radius ส่งคำตอบให้อีกทอดหนึ่ง

    จากตัวอย่างข้อ 8 หากต้องการใส่ค่าเวลาที่เหลือในการใช้งาน
    ตัวอย่างเช่นเหลือ 120 วินาที ให้เพิ่มบรรทัดข้อความว่า
    echo "SESSION-TIMEOUT = \"120\""
    ลงไปก่อนบรรทัดข้อความ  exit 0 ดังตัวอย่าง
    #!/bin/bash
    ###exit 0 = valid ; exit1 = invalid
    MYUSER=$(echo $USER_NAME | cut -d'"' -f2)
    case "${MYUSER}" in
      demo) exit 1 ;;
      abc) exit 1 ;;
      *) echo "SESSION-TIMEOUT = \"120\""
          exit 0 ;;
    esac

    เสร็จแล้วให้สั่งทำงานใหม่ ด้วยคำสั่ง sudo /etc/init.d/freeradius force-reload
    แค่นี้ก็เสร็จแล้ว PC ที่ติดต่อเข้ามาจะได้รับคำตอบกลับไป
    ระบุว่าเหลือเวลาใช้งานอีกเท่าไร ขึ้นกับตัวเลขทีกำหนดส่งออกมา
    จากตัวอย่างให้แก้ไขตัวเลข 120 เป็นอื่นๆตามต้องการ
  10. การบันทึกประวัติการ authen radius ไว้ในพื้นที่  /var/log/freeradius/myauthen ให้ทำดังนี้
    สร้างแฟ้มคำสั่ง shell script ชื่อ  /etc/freeradius/log-radius-authen.sh มีเนื้อหาว่า
    #!/bin/bash
    export LANG=en.US
    MYDIR="/var/log/freeradius/myauthen"
    if [ ! -d ${MYDIR} ] ; then
      mkdir -p ${MYDIR}
    fi
    TODAY=$(date "+%Y%m%d")
    MYFILE="${MYDIR}/${TODAY}"
    if [ ! -e ${MYFILE} ] ; then
      touch ${MYFILE}
    fi
    MYTIME=$(echo $1|awk '{print strftime("%Y%m%d:%H:%M:%S",$1)}')
    echo "${MYTIME};${USER_NAME};$2;$1;CHECK_IN" >> ${MYFILE}
    แฟ้ม shell script จบแค่นี้

    หากเป็น freeradius 2.x  ให้แก้ไขแฟ้ม /etc/freeradius/modules/exec เติมข้อความต่อท้ายแฟ้มว่า
    exec my-log-authen {
         wait = no
         program = "/bin/sh /etc/freeradius/log-radius-authen.sh %l %{Packet-Src-IP-Address} "
    }
    แล้วแก้ไขแฟ้ม /etc/freeradius/sites-available/default
    ที่ส่วนของ authorize  {...}ประมาณบรรทัดที่ 152  ที่บริเวณข้อความ authorize {
    ...
    #   files
    myimap
    ให้แทรกเพิ่มบรรทัดข้อความ กลายเป็นว่า
    my-log-authen
    #   files
    myimap

    เสร็จแล้วให้สั่งทำงานใหม่ ด้วยคำสั่ง sudo /etc/init.d/freeradius force-reload
  11. ตัวอย่างคำสั่งการทดสอบด้วยคำสั่ง radclient
    ทดสอบการ authen คำสั่งประมาณว่า
    echo "User-Name=mama,User-Password=123456" | radclient 10.0.1.2 auth mytestkey

    ทดสอบการ accounting ตอนเข้า คำสั่งประมาณว่า
    echo "User-Name=mama,Acct-Status-Type=Start" | radclient 10.0.1.2 acct mytestkey

    ทดสอบการ accounting ตอนออก คำสั่งประมาณว่า
    echo "User-Name=mama,Acct-Status-Type=Stop" | radclient 10.0.1.2 acct mytestkey

Monday, May 14, 2012

Install GD Library For PHP5 On CentOS

Note: this article only applies if your current PHP version has been installed by yum. If you custom compiled it from source, this will not work.

Verify PHP as installed by yum

An easy task, using yum. First step, see if it's already installed.
[root@srv]# rpm -qa | grep php
php-common-5.1.6-15.el5
php-cli-5.1.6-15.el5
php-5.1.6-15.el5
php-pdo-5.1.6-15.el5
php-mysql-5.1.6-15.el5

Install the GD library using yum

If the GD Library isn't present in that list, it wasn't installed on the server yet. Install it using yum.
[root@srv]# yum install php-gd
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
extras                    100% |====================| 1.1 kB    00:00
updates                 100% |====================|  951 B    00:00
base                      100% |====================| 1.1 kB    00:00
addons                  100% |====================|  951 B    00:00
Reading repository metadata in from local files
primary.xml.gz            100% |====================|  81 kB    00:00
########################################## 282/282
primary.xml.gz            100% |====================| 164 kB    00:00
########################################## 374/374
primary.xml.gz            100% |====================| 853 kB    00:00
########################################## 2458/2458
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for php-gd to pack into transaction set.
php-gd-5.1.6-20.el5_2.1.i 100% |====================|  17 kB    00:00
---> Package php-gd.i386 0:5.1.6-20.el5_2.1 set to be updated
--> Running transaction check
--> Processing Dependency: php-common = 5.1.6-20.el5_2.1 for package: php-gd
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for php-common to pack into transaction set.
php-common-5.1.6-20.el5_2 100% |====================|  21 kB    00:00
---> Package php-common.i386 0:5.1.6-20.el5_2.1 set to be updated
--> Running transaction check
--> Processing Dependency: php-common = 5.1.6-15.el5 for package: php
--> Processing Dependency: php-common = 5.1.6-15.el5 for package: php-pdo
--> Processing Dependency: php-common = 5.1.6-15.el5 for package: php-mysql
--> Processing Dependency: php-common = 5.1.6-15.el5 for package: php-cli
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for php-pdo to pack into transaction set.
php-pdo-5.1.6-20.el5_2.1. 100% |====================|  18 kB    00:00
---> Package php-pdo.i386 0:5.1.6-20.el5_2.1 set to be updated
---> Downloading header for php-mysql to pack into transaction set.
php-mysql-5.1.6-20.el5_2. 100% |====================|  18 kB    00:00
---> Package php-mysql.i386 0:5.1.6-20.el5_2.1 set to be updated
---> Downloading header for php-cli to pack into transaction set.
php-cli-5.1.6-20.el5_2.1. 100% |====================|  18 kB    00:00
---> Package php-cli.i386 0:5.1.6-20.el5_2.1 set to be updated
---> Downloading header for php to pack into transaction set.
php-5.1.6-20.el5_2.1.i386 100% |====================|  19 kB    00:00
---> Package php.i386 0:5.1.6-20.el5_2.1 set to be updated
--> Running transaction check

Dependencies Resolved

=================================
Package                 Arch       Version          Repository        Size
=================================
Installing:
php-gd                  i386       5.1.6-20.el5_2.1  updates           113 k
Updating for dependencies:
php                     i386       5.1.6-20.el5_2.1  updates           1.1 M
php-cli                 i386       5.1.6-20.el5_2.1  updates           2.1 M
php-common              i386       5.1.6-20.el5_2.1  updates           154 k
php-mysql               i386       5.1.6-20.el5_2.1  updates            84 k
php-pdo                 i386       5.1.6-20.el5_2.1  updates            62 k

Transaction Summary
=================================
Install      1 Package(s)
Update       5 Package(s)
Remove       0 Package(s)

Total download size: 3.7 M
Is this ok [y/N]: y
Downloading Packages:
(1/6): php-pdo-5.1.6-20.e 100% |=========================|  62 kB    00:00
(2/6): php-common-5.1.6-2 100% |=========================| 154 kB    00:00
(3/6): php-gd-5.1.6-20.el 100% |=========================| 113 kB    00:00
(4/6): php-mysql-5.1.6-20 100% |=========================|  84 kB    00:00
(5/6): php-cli-5.1.6-20.e 100% |=========================| 2.1 MB    00:01
(6/6): php-5.1.6-20.el5_2 100% |=========================| 1.1 MB    00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Updating  : php-common                   ####################### [ 1/11]
Updating  : php-pdo                      ####################### [ 2/11]
Updating  : php-cli                      ####################### [ 3/11]
Installing: php-gd                       ####################### [ 4/11]
Updating  : php-mysql                    ####################### [ 5/11]
Updating  : php                          ####################### [ 6/11]
Cleanup   : php-pdo                      ####################### [ 7/11]
Cleanup   : php-common                   ####################### [ 8/11]
Cleanup   : php-mysql                    ####################### [ 9/11]
Cleanup   : php-cli                      ####################### [10/11]
Cleanup   : php                          ####################### [11/11]

Installed: php-gd.i386 0:5.1.6-20.el5_2.1
Dependency Updated: php.i386 0:5.1.6-20.el5_2.1 php-cli.i386 0:5.1.6-20.el5_2.1 php-common.i386 0:5.1.6-20.el5_2.1 php-mysql.i386 0:5.1.6-20.el5_2.1 php-pdo.i386 0:5.1.6-20.el5_2.1
Complete!
Easy going, isn't it?

Restart Apache

Restart your apache, and you're ready to rock.
[root@srv]# service httpd restart
Stopping httpd:                                            [  OK ]
Starting httpd:                                            [  OK ]
Simple as that!

 
Design by GURU