สร้างระบบรวบรวมข้อมูลด้วย Linux Anonymous FTP |
| โดย ธีรภัทร มนตรีศาสตร์,RHCE |
|
 |
"การนำ FTP Server มาช่วยหาทางออกแนวทางที่ที่ให้มีการนำเอาระบบปฏิบัติการเล็กๆ
อย่างลีนุกซ์มาช่วยแก้ไขปัญหาใหญ่ๆ "
จุดมุ่งหมายที่เราต้องการใช้ประโยชน์จากระบบคอมพิวเตอร์และเครือข่ายในหน่วยงานองค์กรต่างๆ นั้นมีความหลากหลาย แตกต่างกันไปตามลักษณะของงาน และปัญหาของแต่ละแห่งที่เกิดขึ้น หลายครั้งที่ผู้เขียนมีโอกาสได้รับฟังปัญหาจากผู้ที่เข้ามารับการอบรมและได้ช่วยเหลือในการเสาะหาวิธีการแก้ไขปัญหาที่เหมาะสมให้จนประสบความสำเร็จ และนำมาใช้งานกันอยู่จนถึงทุกวันนี้
ลักษณะปัญหาของงานอย่างหนึ่งที่มักจะพบอยู่เสมอ ไม่ว่าจะเป็นหน่วยงานภาคธุรกิจหรือภาครัฐ ก็คือ การรวบรวมข้อมูลจากหน่วยงานย่อย ๆ ที่แยกกันออกไปปฏิบัติงานของตนเอง กระจัดกระจายอยู่ในสถานีงานที่ห่างไกลกันออกไปมากบ้างน้อยบ้างก็แล้วแต่ลักษณะงาน ข้อมูลที่กล่าวถึงนี้บางหน่วยงานก็เป็นเพียงแฟ้มข้อมูลรายงานข้อมูลรายวัน บ้างก็เป็นข้อมูลที่คัดออกมาจากฐานข้อมูล หรือไม่ก็เป็นข้อมูลจากการประมวลผลมาแล้วแต่จะต้องส่งเข้ามาประมวลผลรวมที่ศูนย์กลางอีกครั้ง ซึ่งเดิมทีหน่วยงานเหล่านั้นก็มีวิธีการปฏิบัติของตนเองที่แตกต่างกันไปสุดแล้วแต่จะค้นหาทางออกกัน งานก็สามารถดำเนินไปได้ดีพอสมควร แต่เมื่อเวลาผ่านไป มีการขยายงานมากขึ้น ปริมาณข้อมูลที่เพิ่มขึ้น ทำให้ในที่สุดก็ยังคงมีปัญหาให้ปรับปรุงแก้ไขกันอยู่ดี
กรณีปัญหาหนึ่ง
โรงงานอุตสาหกรรมแห่งหนึ่งมีเครื่องคอมพิวเตอร์ลูกข่ายเกือบสี่ร้อยเครื่อง แต่ละจุดต้องรันโปรแกรมเฉพาะเพื่องานผลิต ด้วยความที่ซอฟต์แวร์แต่ละส่วนงานมักจะมีที่มาจากระบบที่แตกต่างกันจึงไม่สามารถทำงานเป็นระบบเดียวกันได้โดยตรง ( ปัญหานี้เป็นเรื่องปรกติที่น่าเบื่อที่สุดของบรรดาผู้ดูแลระบบ ) ดังนั้นจึงต้องมีการโอนถ่ายข้อมูลจากแต่ละจุดไปยังศูนย์กลางเพื่อนำข้อมูลไปรวบรวมและประมวลผลในระบบฐานข้อมูลเป็นขั้นตอนถัดไป เดิมทีจะใช้โปรแกรมที่พัฒนาขึ้นเองโดยเฉพาะในการโอนแฟ้มข้อมูลผ่านเว็บเพจซึ่งใช้งานได้ง่าย และทำงานได้น่าพอใจ แต่ระยะหลังเมื่อมีจำนวนจุดทำงานมากขึ้นทำให้เริ่มเกิดปัญหาส่งงานไม่ได้บ่อยมากขึ้น
ทางฝ่ายไอทีจึงต้องเร่งแก้ไขปัญหาดังกล่าวนี้ โดยมีแนวคิดที่จะเพิ่มประสิทธิภาพให้แก่เว็บเซิร์ฟเวอร์ให้รองรับงานในเวลาเดียวกันได้มากยิ่งขึ้น แต่ผู้เขียนแนะนำให้เปลี่ยนไปใช้ FTP Server น่าจะเหมาะสมกว่า

รูปที่ 1 ลักษณะงานของกรณีปัญหาที่หนึ่ง
กรณีปัญหาที่สอง
ศูนย์ไอทีแห่งหนึ่งเป็นหนึ่งในเครือบริษัทที่มีบริษัทในเครืออีกหลายบริษัท มีความจำเป็นต้องรับส่งเอกสารผ่านระบบเครือข่ายเกือบตลอดทั้งวันเพื่อการประสานงานรับเหมางานติดตั้งเครือข่ายสื่อสารทั่วประเทศ หัวหน้าศูนย์แห่งนี้เลือกใช้การรับส่งแฟ้มข้อมูลผ่านทางอีเมล์ในระยะแรก ปรากฏว่ามีปัญหาเกิดขึ้นมากมาย ได้แก่ จำนวนของผู้รับมีเพิ่มขึ้นหรือลดลงไม่แน่นอนทำให้การส่งเอกสารไม่ทั่วถึง ยุ่งยากในเรื่องการจัดการ Mailing List ขนาดของ Attachment ก็มีขนาดใหญ่มาก มีผลกระทบต่อระบบอีเมล์โดยรวมอีกด้วย
ในระยะต่อมาจึงมีการเปลี่ยนมาใช้ระบบการรับส่งแฟ้มข้อมูลกันด้วยการ FTP ( File Transfer Protocol ) โดยทางศูนย์ไอทีทำการจัดตั้ง FTP Server ขึ้นด้วยระบบปฏิบัติการวินโดวส์ที่มีอยู่เดิม กับโปรแกรม FTP Server ที่หาได้ทั่วไป ซึ่งช่วยลดปัญหาต่าง ๆ ไปได้มาก แต่ก็ยังนำมาซึ่งปัญหาใหม่ คือ ไม่มีรายงานผลการรับส่งแฟ้มข้อมูลแจ้งให้ทราบเป็นหลักฐาน ทำให้เกิดปัญหาในด้านการประสานงาน เช่น ผู้ส่งงานอ้างว่าส่งงานเข้ามาแล้วทั้ง ๆ ที่ยังไม่ได้ส่ง หรือกลับกันคือ ฝ่ายผู้รับอ้างว่ายังไม่เห็นไฟล์ที่ส่งเข้ามา เป็นต้น เป็นภาระให้เจ้าหน้าที่ฝ่ายไอทีต้องคอยตรวจสอบให้ ที่สำคัญก็คือ ระบบที่ใช้งานอยู่นี้ไม่ยืดหยุ่นพอที่จะสร้างรายงานออกมาให้ผู้ใช้งานสามารถตรวจสอบได้ด้วยตัวเอง

รูปที่ 2 ลักษณะงานของกรณีปัญหาที่สอง
กรณีปัญหาที่สาม
หน่วยงานเจ้าของกรณีปัญหาที่สามนี้เป็นบริษัทซอฟต์แวร์เฮ้าส์ซึ่งให้คำปรึกษาและพัฒนาซอฟต์แวร์ระบบงานให้แก่บริษัทอุตสาหกรรมการเกษตรแห่งหนึ่ง มีระบบฐานข้อมูลกระจายอยู่ในโรงงานและสำนักงานหลายจังหวัดด้วยกัน ลักษณะของงานคล้ายกันกับกรณีปัญหาที่ผ่านมาคือต้องการอัพเดตฐานข้อมูลกลางทุกวันโดยรวบรวมข้อมูลจากดาต้าเบสเซิร์ฟเวอร์ทุกแห่งเข้าด้วยกัน แตกต่างกันเพียงระยะทางที่ไกลกว่า ต้องการ Secure Connection และจะต้องจัดส่งข้อมูลเข้าสู่ศูนย์กลางโดยอัตโนมัติ

รูปที่ 3 ลักษณะงานของกรณีปัญหาที่สาม
ปัญหาของ FTP Server
จากกรณีปัญหาที่ผ่านมาจะเห็นว่าการนำ FTP Serve มาช่วยงานน่าจะเป็นทางออกที่ใช้ได้ดี แต่ก็ยังมีสิ่งที่จะต้องพิจารณาเพิ่มเติมคือ โดยปรกติแล้วหากเราต้องการส่งแฟ้มข้อมูลเข้าสู่ FTP Server หรือที่เรียกกันว่าการอัพโหลด ( Upload ) จะต้องกำหนดให้ผู้ใช้งานล๊อกอินด้วยชื่อและรหัสผ่านที่กำหนดไว้ในระบบเสียก่อนจึงจะทำการอัพโหลดแฟ้มข้อมูลได้ รวมไปถึงสามารถกระทำการอื่น ๆ นอกเหนือจากการอัพโหลดได้ด้วย เช่น การดาวน์โหลด หรือลบแฟ้มข้อมูล ซึ่งจะก่อให้เกิดปัญหาตามมาอีกคือ
ผู้ใช้งานจะต้องจดจำชื่อ และรหัสผ่านในการอัพโหลด ถ้ามีใครลืมรหัสก็จะเป็นภาระเจ้าหน้าที่ผ่ายไอทีอีก ยิ่งมีจำนวนผู้ใช้มากขึ้นภาระก็เพิ่มมากขึ้นเป็นเงาตามตัว
ตำแหน่งที่จัดเก็บแฟ้มข้อมูลทั้งหมดควรรวมอยู่ในพื้นที่เดียวกันเป็นศูนย์กลาง หากกำหนดให้ใช้ชื่อผู้ใช้และรหัสเพียงชุดเดียว ย่อมเสี่ยงต่อความปลอดภัยของข้อมูลและตัวระบบเอง
ผู้ใช้งานมีสิทธิที่จะลบแฟ้มข้อมูลได้
กำหนดความต้องการ
เพื่อความง่ายต่อการจัดตั้งคอนฟิกของเซิร์ฟเวอร์ เราควรกำหนดความต้องการให้ชัดเจนเสียก่อน เริ่มที่เรื่องของรหัสผ่าน ถ้าไม่ต้องกำหนดรหัสผ่านได้จะง่ายต่อการใช้งานและดูแลระบบเป็นอย่างมาก FTP Server ที่อนุญาติให้ผู้งานเข้าสู่เซิร์ฟเวอร์ได้โดยไม่ต้องมีชื่อและรหัสผ่านในระบบก็คือ Anonymous FTP Server นั่นเอง ซึ่งลีนุกซ์ Red Hat มีความพร้อมอยู่แล้ว
อนุญาติให้อัพโหลดได้ คุณสมบัติข้อนี้จะต้องมีการเตรียมการเล็กน้อย เรียกว่า Anonymous Upload
ส่วนเรื่องของการดาวน์โหลดจะไม่อนุญาติเฉพาะในกรณีปัญหาที่หนึ่งและสาม(ผู้ดูแลระบบจะเป็นผู้รวบรวมแฟ้มข้อมูลทั้งหมดและ
นำไปประมวลผลต่อเอง ) แต่ในกรณีปัญหาที่สองจะยินยอมให้ผู้ใช้งานทั่วไปเข้ามาดาวน์โหลดได้
สำหรับการลบไฟล์นั้น Anonymous FTP จะไม่อนุญาติให้คอนฟิกในลักษณะ writable anonymous root ดังนั้นจึงมีการป้องกันในตัวเองไว้เรียบร้อยแล้ว
คอนฟิก Red Hat Linux 9.0 เป็น Anonymous FTP Server
ขั้นตอนการคอนฟิกควรติดตั้ง Red Hat Linux 9.0 โดยให้มีพาร์ทิชั่นหนึ่งแยกออกมาเป็น /guest ( ตั้งชื่ออื่น ๆ ได้ตามใจชอบ ) โดยกำหนดขนาดให้เพียงพอต่อการใช้งาน และเลือกติดตั้งเฉพาะแพคเกจที่จำเป็นต้องใช้จริง ๆ เท่านั้น สำหรับ FTP Server ของ Red Hat 9.0 คือแพคเกจ vsftpd ในกรณีปัญหาที่สองต้องการให้มีการรายงานสถิติการรับส่งไฟล์ผ่านเว็บเพจจะต้องมี Web Server ด้วย และสำหรับกรณีปัญหาที่สามมีการเชื่อมต่อเข้าสู่อินเตอร์เน็ตโดยตรงจึงควรเพิ่มแพคเกจที่เกี่ยวกับการรักษาความปลอดภัยขึ้นอีก ได้แก่ ipchains หรือ iptables และ tripwire หลังจากคอนฟิกเกี่ยวกับระบบเครือข่าย และความปลอดภัยต่าง ๆ เรียบร้อยแล้วก็เริ่มคอนฟิกเซิร์ฟเวอร์ในฐานะ root ได้ มีขั้นตอนดังนี้
กำหนดพื้นที่ให้บริการของ Anonymous FTP โดยใช้คำสั่ง useradd -d /guest ftp จากนั้นให้สร้างไดเร็คทอรี่ย่อยเพื่อใช้รับแฟ้มข้อมูลที่จะอัพโหลดด้วยคำสั่ง mkdir /guest/upload แล้วปรับ permission mode ด้วยคำสั่ง chmod 753 /guest/upload
แก้ไขคอนฟิกหลักของ FTP Server โดยเปิดไฟล์ /etc/vsftpd/vsftpd.conf ด้วยโปรแกรม Text Editor เช่น vi ( หรือ pico ) แทรกเครื่องหมาย # หน้าบรรทัดข้อความ local_enable=YES เพื่อระงับการบริการแก่ผู้ใช้ธรรมดาทั่วไป แล้วลบเครื่องหมาย # หน้าบรรทัดข้อความ anon_upload_enable=YES และให้แน่ใจว่ามีบรรทัดข้อความ anonymous_enable=YES อยู่ บันทึกไฟล์คอนฟิกนี้ไว้
สตราร์ตบริการของ FTP Server โดยพิมพ์คำสั่ง service vsftpd restart และ chkconfig vsftpd on ตามลำดับ จะสังเกตเห็นโปรเซสของ vsftpd ทำงานด้วยคำสั่ง ps -A
การทดสอบ ปรับแต่ง และใช้งาน
ในการทดสอบให้ใช้โปรแกรม FTP Client เช่น CuteFTP ( บนวินโดวส์ ) NcFTP ( บนลีนุกซ์ ) คอนเน็คเข้าสู่ FTP Server ของเราในแบบ Anonymous แล้วลองอัพโหลดแฟ้มข้อมูลเข้าสู่พื้นที่ /upload ถ้าสามารถส่งแฟ้มข้อมูลได้ จะสังเกตเห็นปรากฏอยู่ที่ /guest/upload เช่นกัน
ขณะนี้ถ้าอัพโหลดแฟ้มข้อมูลแล้วแต่มองไม่เห็นแฟ้มข้อมูลก็ถือว่าเป็นปรกติ เนื่องจากเราได้กำหนด Permission mode เป็น 753 ที่ไดเร็คทอรี่ /guest/upload นั่นเอง จึงไม่สามารถ List ดูรายชื่อไฟล์ได้ ถึงจุดนี้จะได้โซลูชั่นสำหรับกรณีปัญหาที่หนึ่งแล้ว เหลือเพียงแค่ฝึกอบรมให้ยูสเซอร์เปลี่ยนมาใช้วิธีการ FTP แฟ้มข้อมูลงานของเครื่องตนเองเข้าสู่ FTP Server เท่านั้น ซึ่งในทางปฏิบัติสามารถใช้การ Drag & Drop ในโปรแกรม Internet Explorer ก็ได้ซึ่งสะดวกกว่าการใช้โปรแกรมเว็บเบสที่ใช้อยู่ก่อนหน้านี้ และยังมีเสถียรภาพของการทำงานดีกว่าอีกด้วย
สำหรับกรณีปัญหาที่สองจะต้องการใช้งานทั้งการรับและส่งแฟ้มข้อมูล ดังนั้นจึงต้องอนุญาติให้สามารถ List รายชื่อแฟ้มข้อมูล และสามารถดาวน์โหลดได้ ดังนั้นจึงจำเป็นต้องแก้ไขคอนฟิกอีกเล็กน้อย โดย
- แก้ไขไฟล์คอนฟิกของ vsftpd คือ /etc/vsftpd/vsftpd.conf แล้วเพิ่มข้อความ anon_umask=022 บันทึกไฟล์ แล้วสั่ง
รีสตาร์ตบริการอีกครั้ง
- แก้ไข permission mode ใหม่ ด้วยคำสั่ง chmod 777 /guest/upload เพื่ออนุญาติให้อ่านเขียนข้อมูลได้
อย่างไรก็ตาม กรณีนี้จะมีความเสี่ยงเกิดขึ้น เนื่องจากทุกคนที่เข้ามา FTP จะสามารถดาวน์โหลดแฟ้มข้อมูลไปได้ จึงต้องเตรียม
กรณีปัญหาที่สองยังไม่จบเพียงเท่านี้ เนื่องจากยังไม่มีระบบรายงานสถิติการรับส่งไฟล์ให้ผู้ใช้งานได้ทราบ ซึ่งสามารถสร้างโปรแกรมรายงานนี้ได้ด้วยโปรแกรมเชลล์สคริปต์ หรือภาษาสคริปต์อื่น ๆ ก็ได้ โดยนำข้อมูลจากล๊อกไฟล์ของ FTP Server ( ใน Red Hat 9.0 คือไฟล์ /var/log/vsftpd.log ) มาวิเคราะห์แล้วรายงานผ่านทางเว็บเซิร์ฟเวอร์ เป็นอันเสร็จสิ้นกรณีปัญหาที่สอง

รูปที่ 4 แสดงหลักการทำงานของระบบรายงานสถิติ
กรณีปัญหาที่สาม มีความคล้ายกับกรณีปัญหาที่หนึ่ง คือ รองรับการอัพโหลดแฟ้มข้อมูลเข้ามาทิศทางเดียวเช่นเดียวกับกรณีปัญหาที่หนึ่ง แต่จำเป็นต้องมีการทำงานแบบอัตโนมัติเพิ่มขึ้น โดยสร้างโปรแกรมสคริปต์เล็ก ๆ ไว้ที่เซิร์ฟเวอร์แต่ละตัว กำหนดเวลาทำงานให้คัดแยกข้อมูลจากระบบฐานข้อมูลแล้วทยอยจัดส่งเข้ามายัง FTP Server ของเราเท่านั้น ซึ่งกรณีปัญหาที่สามนี้ปัจจุบันไม่เป็นปัญหาอีกต่อไปแล้ว และยังคงทำงานได้ปรกติดีซะด้วย

รูปที่ 5 แสดงหลักการทำงานของกรณีปัญหาที่สาม
อุปสรรคปัญหาที่เกิดขึ้น
- เนื่องด้วย Kernel ของ Red Hat Linux 9.0 ตัวที่มาพร้อมกับชุดติดตั้ง ( 2.4.20-8 ) มีปัญหาเกี่ยวกับ Input/Output จึงทำให้เซิร์ฟเวอร์เกิดอาการแครชเมื่อมีการอ่านเขียน ( ดาวน์โหลด/อัพโหลด ) หนาแน่นมากๆ ควรอัพเดตเคอร์เนลล่าสุดก่อนใช้งาน
- ระบบนี้จะยอมรับการอัพโหลดไฟล์เข้าสู่เซิร์ฟเวอร์เสมอ ดังนั้นจึงควรจำกัดการใช้เนื้อที่ดิสก์ด้วยระบบ Disk Quota ดังนั้นจึงควรจัดเตรียมพื้นที่เก็บข้อมูลให้แยกพาร์ทิชั่นและ mount point ออกไปตั้งแต่เริ่มเซ็ตอัพจะดีที่สุด
- ควรจำกัดโฮสต์ที่ติดต่อกับ FTP Server นี้ด้วย Firewall และ TCP Wrappers โดยเฉพาะในกรณีปัญหาที่สาม
- ถ้าการคอนเน็คเข้าสู่ FTP Server มีอาการตอบสนองช้าผิดปรกติ อาจเกิดจากระบบ Name Resolution ให้ตรวจสอบในส่วนของ DNS Services อีกครั้ง
- ระบบรักษาความปลอดภัยเป็นสิ่งที่ไม่อาจมองข้ามไปได้ ถึงแม้การใช้ Anonymous FTP จะลดจำนวน User Account ลงไปได้แล้วก็ตาม
ขยับขยายได้อีก
ในมุมมองของบรรดาผู้ใช้งานลีนุกซ์ในงานเซิร์ฟเวอร์แล้ว เสน่ห์ที่น่าหลงไหลของระบบปฏิบัติการตัวนี้ก็คือ ความสามารถที่สามารถต่อเติม ( Adaptive ) ได้อย่างอิสระ ไร้ข้อจำกัดนั่นเอง ทั้งในแง่การใช้งานซอฟต์แวร์ที่มีอยู่แล้ว หรือการสร้างโปรแกรมขึ้นเพื่อสนับสนุนงานของเราเองโดยเฉพาะก็ตาม หากพิจารณาดูกรณีปัญหาที่ผู้เขียนหยิบยกมาในครั้งนี้ให้ดี จะเห็นว่ายังมีช่องทางที่จะขยับขยายต่อยอดคุณสมบัติต่าง ๆ เข้าไปได้อีกมากมาย ทั้งนี้ขึ้นอยู่กับแนวความคิดของเราที่จะดัดแปลงประยุกต์สิ่งที่มีอยู่นำมาใช้ประโยชน์ ผู้เขียนขอแสดงความยินดีกับทุก ๆ องค์กรที่ประสบความสำเร็จในการใช้งานลีนุกซ์และโอเพ่นซอร์ส และหวังว่าบทความนี้คงจะเป็นแนวทางทำให้มีการนำเอาระบบปฏิบัติการเล็ก ๆ อย่างลีนุกซ์ไปใช้ช่วยแก้ไขปัญหาใหญ่ ๆ ได้บ้างนะครับ
|