ในองค์กรส่วนใหญ่มีการติดตั้งเซิร์ฟเวอร์ FTP ขึ้นมาเพื่อความสะดวกในการดำเนินการแลกเปลี่ยนไฟล์ ทำให้มีแนวโน้มของการมีจุดอ่อนทางด้านความปลอดภัยเพิ่มขึ้น เนื่องจากโปรแกรมที่ใช้เป็นเซิร์ฟเวอร์ FTP หลากหลายชนิด ไม่ว่าจะเป็น WU-FTP, ProFTP, หรือ BSD-FTP ล้วนมีช่องโหว่ที่ถูกค้นพบมากมาย จึงทำให้มีความเสี่ยงต่อการถูกผู้ไม่ประสงค์ดีโจมตีได้ อย่างไรก็ตาม มีอีกโปรแกรมหนึ่งชื่อ VSFTP ซึ่งมีออปชันด้านความปลอดภัยสำหรับเซิร์ฟเวอร์ FTP ที่เป็น Linux/UNIX ดังนั้น VSFTP จึงเป็นอีกทางเลือกหนึ่งสำหรับองค์กรที่จำเป็นต้องติดตั้งเซิร์ฟเวอร์ FTP และต้องการความปลอดภัยยิ่งขึ้น
VSFTP เป็นเซิร์ฟเวอร์ FTP ที่มีความมั่นคงและปลอดภัย ซึ่งสามารถลดความเสี่ยงที่ผู้โจมตีจะเข้าถึงเซิร์ฟเวอร์โดยผ่านทางช่องโหว่ของ FTP ได้ ตัวอย่างไซต์ FTP ต่างๆ ที่รัน VSFTP ได้แก่ Red Hat, OpenBSD, และ SuSE แม้กระทั่งสถาบัน SANS ก็แนะนำว่า VSFTP เป็นเดมอน FTP ที่ควรใช้เพราะมีความปลอดภัยสูง
--------------------------------------------------------------------------------
คุณสมบัติของ VSFTP
VSFTP เป็นเดมอน (daemon) ของเซิร์ฟเวอร์ FTP ที่รันบนระบบปฏิบัติการ Linux/UNIX ซึ่งมีคุณสมบัติหลักอยู่ 3 อย่าง ได้แก่
มีความปลอดภัย
มีประสิทธิภาพดี
มีความมั่นคง
นอกจากนี้โปรแกรม VSFTP ยังมีคุณสมบัติอื่นๆ อีก ได้แก่ เป็นระบบที่มีขนาดเล็ก มีความสามารถในการจัดการ virtual users มีทางเลือกในการทำงานเป็นแบบ stand-alone configuration และแบบผ่านทางเดมอน inetd รวมทั้งสามารถจำกัดปริมาณการรับส่งข้อมูล (bandwidth) ในการให้บริการในเซิร์ฟเวอร์ที่ต้องการควบคุมการใช้งานได้อีกด้วย
ในแง่ของความปลอดภัยนั้น VSFTP ได้ถูกออกแบบมาเพื่อแก้ไขจุดบกพร่องที่พบในการติดตั้ง wu-ftpd, proftpd, และแม้แต่ bsd-ftpd โดยการไม่ใช้บัญชีชื่อ root ซึ่งมีความเสี่ยง และใช้คุณสมบัติด้านความปลอดภัยที่มีประสิทธิภาพอย่าง chroot นอกจากนี้ยังมีการใช้เทคนิคการพัฒนาโปรแกรมอย่างปลอดภัยเพื่อแก้ปัญหาหน่วยความจำล้น (buffer overflows) ด้วย อ่านรายละเอียดเพิ่มเติมเกี่ยวกับความปลอดภัยของ VSFTP ได้ที่เอกสารเผยแพร่ ต่อไปนี้: Overview Design Implementation Trust และนอกจากนี้ยังมีการกล่าวถึง vsftpd ในแง่ของความปลอดภัยมากมาย ดังต่อไปนี้
ในเดือนพฤศจิกายน พ.ศ. 2545 ไซต์ ftp.openbsd.org ได้รัน vsftpd ซึ่งเป็นการยืนยันได้ว่า vsftpd มีคุณสมบัติดีเหมาะแก่การใช้เป็นเซิร์ฟเวอร์ FTP
vsftpd ไม่มีจุดบกพร่องชื่อ "globbing" ซึ่งมีผลกระทบต่อเซิร์ฟเวอร์ FTP หลายแห่ง สามารถศึกษาเหตุผลของการกำจัดจุดบกพร่องนี้ได้ในเอกสาร Bugtraq posting โดยมีคำอธิบายเหตุผล และหลักการออกแบบโปรแกรมด้วย
vsftpd ไม่มีจุดบกพร่องชื่อ "globbling" ที่เกี่ยวข้องกับการโจมตีแบบ denial of service ด้วยเหตุผลคล้ายๆ กัน ศึกษารายละเอียดได้ที่ Bugtraq posting
vsftpd ได้รับการสนับสนุนในหน้า Vanderbilt University ITS ภายใต้หัวข้อ "Safe Computing" ศึกษารายละเอียดได้ที่ http://www.vanderbilt.edu/its/security/safe_tools.html
vsftpd ได้รับการกล่าวถึงในหัวข้อความปลอดภัยว่า มีประสิทธิภาพดีและปราศจากช่องโหว่ด้านความปลอดภัย ซึ่งตรงกันข้ามกับเซิร์ฟเวอร์ FTP อื่นๆ รวมถึง OpenBSD ด้วย ศึกษารายละเอียดได้ที่ http://www.seifried.org/security/network/20010926-ftp-protocol.html
ในแง่ของประสิทธิภาพนั้น มีการกล่าวถึงดังนี้
ใน usenet มีการอ้างถึง vsftpd ว่าทำงานได้เร็วเทียบเท่ากับ BSD-ftpd (ซึ่งมีประสิทธิภาพสูง ต่างกับ wu-ftpd) ศึกษาเพิ่มเติมได้ที่ http://groups.google.com/groups?hl=en&selm=Pine.BSF.4.31.0202031625080.1082-100000%40atlantis.dp.ua
มีการเปรียบเทียบประสิทธิภาพของ vsftpd ว่ามีความเร็วถึง 70 Mbyte/sec ซึ่งมากกว่า TUX (55 Mbyte/sec)
มีการกล่าวว่าเครือข่ายของ Linux ที่อยู่บน gigabit ethernet ก็ใช้ vsftpd และมีความเร็วถึง 86 Mbyte/sec ศึกษาเพิ่มเติมได้ที่ http://lists.insecure.org/linux-kernel/2001/Feb/0104.html
ในการใช้ vsftpd บน RedHat นั้น Alan Cox กล่าวว่า "ในที่สุดก็มี ftpd ที่เหมาะสำหรับใช้บน Linux แล้ว" ศึกษาเพิ่มเติมได้ที่ http://www.linux.org.uk/diary/
เวอร์ชันล่าสุดของ VSFTP ขณะนี้คือเวอร์ชัน 1.2.0 สำหรับตัวอย่างที่จะกล่าวถึงในบทความนี้เป็นการใช้งาน VSFTP v.1.2.0 บนเซิร์ฟเวอร์ Red Hat 9.0 เคอร์เนลเวอร์ชัน 2.4.20-9
--------------------------------------------------------------------------------
การติดตั้ง
ทำการติดตั้ง VSFTP เช่นเดียวกับการติดตั้งแอพพลิเคชันอื่นๆ บน Linux โดยดาวน์โหลดได้จากเว็บไซต์ ftp://vsftpd.beasts.org/users/cevans/ มาเก็บไว้ในไดเรกทอรี /tmp
ทำการขยายไฟล์ด้วยคำสั่งต่อไปนี้
# cd /tmp
# gunzip -dc vsftpd-1.2.0.tar.gz
เข้าสู่ไดเรกทอรีที่ถูกสร้างขึ้นหลังจากขยายไฟล์แล้วซึ่งมีชื่อว่า vsftpd-1.2.0 และรันคำสั่ง make
# cd vsftpd-1.2.0
# make
หากต้องการแก้ไขการตั้งค่า สามารถแก้ไขที่ไฟล์ builddefs.h ก่อนที่จะคอมไพล์ด้วยคำสั่ง make เมื่อคอมไพล์เสร็จจะมีไฟล์ไบนารีชื่อ vsftpd ในไดเรกทอรีนี้
สร้างบัญชีชื่อ nobody ซึ่ง VSFTP ใช้เป็นส่วนหนึ่งของการตั้งค่าโดยดีฟอลต์ โดยปกติระบบปฏิบัติการ Linux/UNIX มีบัญชีชื่อนี้อยู่แล้วโดยดีฟอลต์ แต่ถ้าไม่มี ให้ทำการเพิ่มเข้าไปด้วยคำสั่ง
# /usr/sbin/useradd nobody
และกำหนด shell ในไฟล์ /etc/passwd สำหรับบัญชีชื่อ nobody ให้เป็น /sbin/nologin ด้วย เพื่อให้มีความปลอดภัยจากการล็อกอินเข้าใช้ shell ในการโจมตีระบบ ดังนี้
nobody:x:99:99:Nobody:/:/sbin/nologin
หากในเครื่องมีขื่อบัญชีนี้อยู่แล้วจะปรากฏผลดังนี้
useradd: user nobody exists
สร้างบัญชีชื่อ ftp (เฉพาะในกรณีที่ต้องการให้เครื่องเซิร์ฟเวอร์สนับสนุนการ ftp ด้วยการใช้ชื่อ anonymous) โดยต้องกำหนด shell ให้เป็น /sbin/nologin เช่นเดียวกับบัญชีชื่อ nobody ดังนี้
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
แต่ถ้าต้องการอนุญาตให้เฉพาะบัญชีผู้ใช้ในเครื่องสามารถ FTP ได้เท่านั้น ก็ไม่ต้องทำขั้นตอนนี้ อย่างไรก็ตามไดเรกทอรีบ้าน (home directory) ของบัญชีผู้ใช้ชื่อ anonymous จะต้องไม่มีเจ้าของเป็นบัญชีชื่อ ftp และผู้ใช้ไม่ควรมีสิทธิในการเขียนในไดเรกทอรีนี้ด้วย โดยกำหนดได้ด้วยคำสั่งต่อไปนี้
คำสั่ง วัตถุประสงค์
# mkdir /var/ftp เพื่อสร้างไดเรกทอรี /var/ftp
# /usr/sbin/useradd -d /var/ftp ftp เพื่อสร้างบัญชีชื่อ "ftp" พร้อมด้วยไดเรกทอรีบ้าน /var/ftp โดยปกติระบบส่วนใหญ่มีบัญชีผู้ใช้นี้อยู่แล้ว
# chown root.root /var/ftp เปลี่ยนเจ้าของไดเรกทอรี /var/ftp เป็นบัญชีชื่อ "root"
# chmod og-w /var/ftp จำกัดสิทธิของบัญชีผู้ใช้อื่น และบัญชีที่อยู่ในกลุ่มเดียวกันไม่ให้มีสิทธิในการเขียนลงไดเรกทอรีนี้
ติดตั้งไฟล์เอ็กซีคิวท์ ไฟล์ช่วยเหลือ (help pages) และอื่นๆ ซึ่งถูกสร้างไว้แล้ว โดยเข้าสู่ไดเรกทอรีที่สร้าง vsftpd ไว้และรันคำสั่ง make install
# cd /tmp/vsftpd-1.2.0
# make install
สำเนาไฟล์คอนฟิกูเรชันตัวอย่างไปไว้ในไดเรกทอรี /etc ด้วยคำสั่ง
# cp vsftpd.conf /etc
--------------------------------------------------------------------------------
การปรับแต่งค่าคอนฟิกูเรชัน
ไฟล์คอนฟิกูเรชันของ vsftpd ประกอบด้วย 3 ไฟล์ ดังนี้
ไฟล์ /etc/vsftpd.banned_emails -- เก็บรายการอี-เมล์ที่ใช้เป็นรหัสผ่านของผู้ใช้ชื่อ anonymous ซึ่งไม่ต้องการอนุญาตให้เชื่อมต่อเข้ามาใช้ ftp ได้
โดยระบุอี-เมล์แอดเดรสในไฟล์นี้บรรทัดละ 1 รายการเท่านั้น ดังตัวอย่างต่อไปนี้
mozilla@
siriwan@yahoo.com
สำหรับการตั้งค่าคอนฟิกูเรชันของไฟล์นี้มีความสัมพันธ์กับไฟล์ /etc/vsftpd.conf โดยจะต้องนำเครื่องหมาย # ออกจากบรรทัดที่เกี่ยวข้อง ตามที่แสดงไว้ดังต่อไปนี้
...
...
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
deny_email_enable=YES
# (default follows)
banned_email_file=/etc/vsftpd.banned_emails
...
...
ไฟล์ /etc/vsftpd.chroot_list -- เก็บรายชื่อผู้ใช้ในเครื่องที่จะถูกกำหนดให้ใช้งาน ftp ได้ในไดเรกทอรีที่กำหนดเท่านั้น โดยไม่สามารถเปลี่ยนไปเข้าสู่ไดเรกทอรีอื่นได้ (เรียกวิธีนี้ว่า chroot)
สำหรับการกำหนดการใช้งานลักษณะนี้ จะต้องแก้ไขไฟล์ที่เกี่ยวข้องดังนี้
- กำหนดรายชื่อที่ต้องการไว้ในไฟล์ /etc/vsftpd.chroot_list บรรทัดละ 1 รายชื่อ ดังนี้
user1
user2
- แก้ไขไฟล์ /etc/passwd โดยเพิ่ม /./ ในไดเรกทอรีบ้าน (home directory) ของบัญชีผู้ใช้ทั้ง 2 บัญชี ดังนี้
user1:x:500:500::/home/ftp-docs/./:/bin/ftponly
user2:x:501:500::/home/ftp-docs/./:/bin/ftponly
- แก้ไขไฟล์ /etc/vsftpd.conf โดยทำการนำเครื่องหมาย # ออกจากบรรทัดที่เกี่ยวข้อง ตามที่แสดงไว้ดังต่อไปนี้
...
...
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list
...
...
ไฟล์ /etc/vsftpd.conf -- เป็นไฟล์หลักที่ใช้กำหนดออปชันการตั้งค่าโดยทั่วไป
โดยปกติ VSFTP จะอ่านไฟล์คอนฟิกกูเรชัน /etc/vsftpd.conf เมื่อมันเริ่มทำงานเท่านั้น ดังนั้นจึงต้องทำการรีสตาร์ท xinetd ทุกครั้งที่มีการแก้ไขไฟล์นี้เพื่อให้การเปลี่ยนแปลงดังกล่าวมีผลต่อการทำงานของ VSFTP ทันที
ไฟล์นี้มีค่าดีฟอลต์จำนวนหนึ่งที่ควรทราบ ได้แก่
- โดยดีฟอลต์ VSFTP จะรันเป็นเซิร์ฟเวอร์ anonymous FTP ดังนั้นถ้าไม่ต้องการให้ผู้ใช้จากภายนอกล็อกอินเข้ามายังไดเรกทอรี FTP ที่เป็นดีฟอลต์ (/var/ftp) โดยใช้ชื่อว่า "anonymous" และรหัสผ่านเป็นอี-เมล์แอดเดรส ก็ให้ทำการปิดฟีเจอร์นี้โดยใส่เครื่องหมาย #ไว้ที่ต้นบรรทัด "anonymous_enable" และสามารถเปิดให้ผู้ใช้ภายในสามารถล็อกอินเข้ามาได้โดยนำเครื่องหมาย # ออกจากบรรทัด "local_enable" ดังนี้
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
#anonymous_enable=YES
#
# Uncomment this to allow local users to log in.
local_enable=YES
- โดยดีฟอลต์ VSFTP จะอนุญาตให้ผู้ใช้ที่ใช้ชื่อ anonymous สามารถดาวน์โหลดได้เท่านั้น ไม่สามารถอัพโหลดไฟล์มายังเซิร์ฟเวอร์ได้
# Uncomment this to enable any form of FTP write command.
#write_enable=YES
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#
- โดยดีฟอลต์ VSFTP ไม่อนุญาตให้ผู้ใช้ภายนอกสร้างไดเรกทอรีบนเครื่องเซิร์ฟเวอร์ FTP และมันจะเก็บบันทึกล็อกของการเข้าถึง FTP ไว้ที่ไฟล์ /var/log/vsftpd.log
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/vsftpd.log
--------------------------------------------------------------------------------
ความปลอดภัยของ FTP
การควบคุมการเข้าถึงเครื่องให้บริการ FTP
ก่อนที่จะเริ่มเปิดให้บริการ FTP จะต้องทำการกำหนดสิทธิของการเชื่อมต่อเข้ามาใช้งานก่อน ซึ่งแบ่งวิธีการทำได้ดังนี้
กรณีรัน inetd
ทำการแก้ไขไฟล์ /etc/hosts.allow (TCP Wrapper) โดยเพิ่มบรรทัด "vsftpd:" และตามด้วยรายชื่อหมายเลข IP address ที่จะอนุญาตให้เข้ามาได้ ดังตัวอย่างต่อไปนี้
- เพื่ออนุญาตให้เชื่อมต่อเข้ามาจากตัวเครื่องเซิร์ฟเวอร์เอง ระบุในไฟล์ดังนี้ :
vsftpd: 127.0.0.1
- เพื่ออนุญาตให้เชื่อมต่อเข้ามาจากทุกคนในวง IP 192.168.1.0/24 ระบุในไฟล์ดังนี้ :
vsftpd: 192.168.1.
- เพื่ออนุญาตให้เชื่อมต่อเข้ามาจากเฉพาะ 2 IP address ระบุในไฟล์ดังนี้ :
vsftpd: 192.168.1.100 192.168.5.53
- เพื่ออนุญาตให้ทุกคนสามารถเชื่อมต่อเข้ามาได้ ระบุในไฟล์ดังนี้ :
vsftpd: ALL
กรณีรัน xinetd
สำหรับการรันด้วย xinetd นั้นได้รวมเอาคุณสมบัติควบคุมการเข้าถึงเครื่องให้บริการเหมือนกับ TCP Wrapper ไว้อยู่แล้ว ดังนั้น ทำได้โดยการแก้ไขไฟล์ /etc/xinetd.d/vsftpd โดยเพิ่มบรรทัด "only_from = " และตามต้วยรายชื่อหมายเลข IP address ที่จะอนุญาตให้เข้ามาได้ ดังตัวอย่างต่อไปนี้
- เพื่ออนุญาตให้เชื่อมต่อเข้ามาจากเฉพาะ 2 IP address ระบุในไฟล์ดังนี้ :
only_from = 192.168.1.100 192.168.5.53
และหากต้องการกำหนด IP address ที่ไม่อนุญาตให้เข้าถึง ก็ระบุในไฟล์ดังนี้ :
no_access = 192.168.4.22
การอัพโหลดโดยการ ftp แบบ anonymous
ถ้าต้องการให้ผู้ใช้จากภายนอกสามารถเขียนข้อมูลลงบนเครื่องเซิร์ฟเวอร์ FTP ได้ ควรจะสร้างไดเรกทอรีที่อนุญาตให้เขียนได้อย่างเดียวภายใต้ไดเรกทอรี /var/ftp/pub การทำเช่นนี้จะเป็นการอนุญาตให้ผู้ใช้ทำการอัพโหลดได้แต่ไม่สามารถเข้าถึงไฟล์อื่นที่อัพโหลดโดยผู้ใช้คนอื่น ซึ่งทำได้ดังนี้
# mkdir /var/ftp/pub/upload
# chmod 733 /var/ftp/pub/upload
หมายเหตุ : ต้องทำการแก้ไขที่ไฟล์ /etc/vsftpd.conf ให้อนุญาตการเขียนไฟล์ลงบนเซิร์ฟเวอร์ด้วย ดังนี้
# Uncomment this to enable any form of FTP write command.
write_enable=YES
...
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
anon_upload_enable=YES
การแก้ไขแบนเนอร์ของ FTP
การเปลี่ยนแปลงแบนเนอร์สำหรับเป็นข้อความต้อนรับเมื่อผู้ใช้ล็อกอินเข้ามาใช้งาน ftp นั้น สามารถแก้ไขได้ในไฟล์ /etc/vsftpd.conf เพื่อไม่ให้ผู้ไม่ประสงค์ดีรู้ว่าระบบที่ใช้เป็นประเภทใด ดังนี้
# You may fully customise the login banner string:
ftpd_banner= New Banner Here
(ในที่นี้ใช้ประโยค "Welcome to My FTP service, authorized access only" ดังปรากฎในหัวข้อ "ตัวอย่างการล็อกอินเพื่อทดสอบการ FTP")
การใช้ SCP แทน FTP
ข้อเสียอย่างหนึ่งของ FTP คือ ไม่มีการเข้ารหัสชื่อผู้ใช้และรหัสผ่านสำหรับล็อกอิน ทำให้มีจุดอ่อนต่อการโจมตีโดยผู้อื่นที่จะสามารถดักขโมยชื่อผู้ใช้และรหัสผ่านไปได้จากการเชื่อมต่อเครือข่าย ดังนั้นขอแนะนำให้ทำการแลกเปลี่ยนไฟล์ด้วยวิธี Secure Copy (SCP) ซึ่งมีการเข้ารหัสแทนการใช้ FTP แต่ทั้งนี้ SCP ไม่สนับสนุนบริการ ftp ด้วยการใช้ชื่อ anonymous
--------------------------------------------------------------------------------
วิธีเริ่มต้นการทำงานของ VSFTP
VSFTP สามารถรันได้ 2 โหมด ได้แก่
โหมด stand-alone
โหมด inetd/xinetd
การรันผ่านเดมอน inetd หรือ xinetd สามารถควบคุมการทำงานของโปรแกรมได้ง่ายกว่า และเป็นวิธีที่ควรใช้มากกว่าแบบ stand-alone สิ่งสำคัญที่ต้องคำนึงถึงคือ ในการตั้งค่าของ VSFTP นั้น มันจะรับการเชื่อมต่อแบบ anonymous เท่านั้น (สมมติว่าได้สร้างบัญชีชื่อ "ftp" ไปก่อนหน้านี้แล้ว) ดังนั้นถ้าต้องการอนุญาตให้บัญขีผู้ใช้ในเครื่องสามารถเชื่อมต่อเข้ามาใช้งาน ftp ได้ จะต้องทำการตั้งค่า Pluggable Authentication Modules (PAM) ซึ่งจะกล่าวถึงต่อไปด้วย
การทำงานแบบ stand-alone
สิ่งที่ต้องทำสำหรับการรัน VSFTP ในโหมด stand-alone ได้แก่
- เพิ่มประโยค "listen = YES"ไว้ในบรรทัดสุดท้ายของไฟล์ /etc/vsftpd.conf
- รันคำสั่ง # /usr/local/sbin/vsftpd &
การใช้ xinetd
เนื่องจากในที่นี้ได้ทำการทดสอบและใช้งานบนระบบ Red Hat 9 (ซึ่งใช้ xinetd) ดังนั้นจะเน้นที่การดำเนินการติดตั้งในโหมด xinetd
กรณีรัน inetd
- เพิ่มบรรทัดต่อไปนี้ในไฟล์ /etc/inetd.d
ftp stream tcp nowait root /usr/local/sbin/vsftpd
- รีสตาร์ทเดมอน inetd ด้วยคำสั่ง
# kill -SIGHUP
กรณีรัน xinetd
- ไฟล์คอนฟิกกูเรชันสำหรับการเริ่มต้นทำงานของ VSFTP ในเครื่องที่รัน xinetd นั้น อยู่ภายใต้ไดเรกทอรี /etc/xinetd.d โดยมีชื่อว่า vsftpd หากไม่พบไฟล์ดังกล่าว ให้ทำการสำเนาจากตัวอย่างของ vsftpd ที่มากับ VSFTP distribution (/tmp/vsftpd-1.2.0/xinetd.d/vsftpd) มาไว้ในไดเรกทอรีนี้ ในไฟล์ vsftpd นี้ มีพารามิเตอร์จำนวนหนึ่งภายใต้ "service ftp" ซึ่งระบุให้ทราบวิธีการทำงานของเซิร์ฟเวอร์ VSFTP ดังต่อไปนี้
พารามิเตอร์ ค่าที่กำหนด ความหมาย
socket_type stream เป็นชนิดของ TCP socket ที่ใช้สำหรับโพรโตคอลนี้ นั่นคือ FTP เป็น TCP stream
wait no เกี่ยวกับความสามารถสำหรับ socket ที่จะรับข้อความ
user root ผู้ใช้ที่จะเป็นผู้เปิดให้บริการ ftp คือใคร (ในที่นี้คือ root) หมายเหตุ : VSFTP จะลดสิทธิลงทันทีที่เริ่มทำงาน
server /usr/local/sbin/vsftpd เป็นตำแหน่งของโปรแกรมเซิร์ฟเวอร์ที่เกี่ยวข้องกับไฟล์คอนฟิกกูเรชันนี้ ถ้ามีการตั้ง vsftpd ในไดเรกทอรีที่แตกต่างออกไปก็ต้องแก้ไขเปลี่ยนแปลงค่านี้
nice 10 ออปชันนี้ใช้แก้ไขลำดับตารางเวลาดีฟอลต์สำหรับโพรเซส โดย 10 คือค่าดีฟอลต์ ส่วนค่าสูงสุดคือ 20
disable no เซอร์วิสนี้ไม่ถูกปิด หรืออีกนัยหนึ่งคือ มันควรเริ่มทำงานทันที เมื่อ xinetd เริ่มต้นทำงาน
per_source 5 เป็นการระบุจำนวนของการเชื่อมต่อเข้ามาใช้งานในเวลาเดียวกันจากหมายเลข IP เดียวกัน โดยเพื่อความปลอดภัย ควรตั้งค่าไว้เป็น 5
instances 200 กำหนดจำนวนสูงสุดของการเชื่อมต่อ FTP ไปยังเซิร์ฟเวอร์ในเวลาเดียวกัน ซึ่งมีประโยชน์ต่อการกำหนดโหลดการทำงานของเซิร์ฟเวอร์ โดยเพื่อความปลอดภัยควรตั้งค่าไว้เป็น 200
no_access No default เป็นการระบุรายการ IP address ที่ไม่อนุญาตให้เข้าถึงเซอร์วิสนี้ เช่น 192.168.1.4
- เมื่อปรับแก้ไฟล์ /etc/xinetd.d/vsftpd เรียบร้อยแล้วให้ทำการรีสตาร์ท xinetd ด้วยคำสั่ง
# /etc/init.d/xinetd restart
หรือ
# service xinetd restart
- และเพื่อให้ xinetd เริ่มทำงานทุกครั้งที่เครื่องรีสตาร์ท ให้ใช้คำสั่งต่อไปนี้
# chkconfig --add xinetd
# chkconfig --level 345 xinetd on
หมายเหตุ : ถ้าก่อนหน้านี้ตั้งเป็นโหมด stand-alone ต้องทำการลบบรรทัด "listen =YES" จากไฟล์ /etc/vsftpd.conf ออกด้วย มิฉะนั้นเซอร์วิส vsftpd จะไม่ทำงาน เมื่อ xinetd รีสตาร์ท
หลังจากเสร็จสิ้นกระบวนการแล้ว ไม่ว่าจะเป็นการรันในโหมดใดก็ตาม สามารถตรวจสอบดูให้แน่ใจว่า VSFTP เริ่มทำงานจริงได้โดยใช้คำสั่ง netstat -a และจะต้องได้ผลดังต่อไปนี้ :
# netstat -a | grep ftp
tcp 0 0 *:ftp *:* LISTEN
หมายเหตุ : ในส่วนของผลลัพธ์ที่ได้อาจแสดงเป็น ftp หรือหมายเลขพอร์ต 21
--------------------------------------------------------------------------------
การตั้งค่า Pluggable Authentication Modules (PAM)
การติดตั้งเซิร์ฟเวอร์ FTP เพื่อแจกจ่ายซอฟต์แวร์ให้ผู้ใช้ใดๆ เชื่อมต่อเข้ามานั้น มีประโยชน์มาก แต่บางครั้งอาจต้องทำการควบคุมการเข้าถึงทรัพยากรบางอย่าง เช่น ต้องการให้เพียงลูกค้าเท่านั้นสามารถใช้งาน FTP ได้
ดังนั้นการทำเช่นนี้กับ VSFTP ทำได้โดยใช้ PAM ในการพิสูจน์ตัวตน ซึ่งคล้ายกับเครื่อง Red Hat ส่วนใหญ่ ซึ่งไฟล์ที่เกี่ยวข้องชื่อ pam.conf หรือไดเรกทอรีชื่อ pam.d สำหรับ VSFTP นั้นมีการตั้งค่า PAM ตัวอย่างไว้แล้ว อยู่ในไดเรกทอรีย่อยชื่อ RedHat ของโปรแกรมที่ขยายออกมาในตอนแรกก่อนการติดตั้ง (/tmp/vsftpd-1.2.0/RedHat/vsftpd.pam) ให้ทำการเปลี่ยนชื่อและทำสำเนาไปไว้ในไดเรกทอรี pam.d ซึ่งสามารถทำได้ดังนี้
#cp vsftpd.pam /etc/pam.d/ftp
จากนั้นทำการกำหนดเพื่ออนุญาตให้ผู้ใช้ภายในสามารถล็อกอินได้ โดยแก้ไขที่ไฟล์ /etc/vsftpd.conf และเอาเครื่องหมาย # ออกจากบรรทัด "local_enable=YES" เมื่อผู้ใช้เชื่อมต่อเข้ามาก็จะเข้าสู่ไดเรกทอรีบ้าน (home directory) ของผู้ใช้คนนั้นทันที
--------------------------------------------------------------------------------
ตัวอย่างการตั้งค่าในไฟล์ /etc/vsftpd.conf เพื่ออนุญาตให้ผู้ใช้สามารถเข้าถึงไดเรกทอรีที่แชร์ไว้ในลักษณะอ่านได้อย่างเดียว
ในตัวอย่างนี้ ไม่อนุญาตให้ผู้ใช้ใช้ชื่อ anonymous แต่อนุญาตให้เฉพาะผู้ใช้ภายในที่ต้องการดาวน์โหลดไฟล์จากไดเรกทอรีที่แชร์ไว้เท่านั้นสามารถ ftp ได้ ขั้นตอนการทำมีดังนี้ :
ปิดการล็อกอินด้วยผู้ใช้ชื่อ anonymousโดยใส่เครื่องหมาย # ไว้ที่ต้นบรรทัด "anonymous_enable" ในไฟล์ /etc/vsftpd.conf ดังนี้
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
#anonymous_enable=YES
เปิดให้ผู้ใช้ภายในแต่ละคนล็อกอินได้ โดยนำเครื่องหมาย # ออกจากต้นบรรทัด "local_enable" ในไฟล์ /etc/vsftpd.conf ดังนี้
# Uncomment this to allow local users to log in.
local_enable=YES
สร้างกลุ่มผู้ใช้ (user group) และ ไดเรกทอรีที่แชร์ไว้ สำหรับกรณีนี้จะสร้าง "/home/ftp-docs" เป็นไดเรกทอรีที่แชร์ไว้และกลุ่มผู้ใช้เป็น "ftp-users" สำหรับผู้ใช้ที่จะล็อกอินเข้ามาดาวน์โหลด
# groupadd ftp-users
# mkdir /home/ftp-docs
สร้างไดเรกทอรีที่เข้าถึงได้จากผู้ใช้ในกลุ่ม ftp-users
# chmod 750 /home/ftp-docs
# chown root:ftp-users /home/ftp-docs
สร้างบัญชีชื่อผู้ใช้ และไดเรกทอรีดีฟอลต์ชื่อ /home/ftp-docs
# useradd -g ftp-users -d /home/ftp-docs user1
# useradd -g ftp-users -d /home/ftp-docs user2
# passwd user1
# passwd user2
ทำสำเนาไฟล์สำหรับดาวน์โหลดไปไว้ที่ไดเรกทอรี /home/ftp-docs
เปลี่ยนสิทธิการเข้าถึงไฟล์ภายใต้ไดเรกทอรี /home/ftp-docs ให้สามารถอ่านได้อย่างเดียวโดยผู้ใช้ในกลุ่ม ftp-users
# chown root:ftp-users /home/ftp-docs/*
# chmod 740 /home/ftp-docs/*
เมื่อถึงขั้นตอนนี้แล้ว ผู้ใช้จะสามารถล็อกอินผ่าน ftp ไปยังเซิร์ฟเวอร์โดยใช้ชื่อและรหัสผ่านใหม่นี้ได้ ถ้าไม่ต้องการให้ผู้ใช้เขียนหรืออัพโหลดไฟล์ในไดเรกทอรีใดๆ ให้ใส่เครื่องหมาย # ที่ต้นบรรทัด "write_enable" ในไฟล์ /etc/vsftpd.conf ดังนี้
# Uncomment this to enable any form of FTP write command.
#write_enable=YES
รีสตาร์ท vsftp เพื่อให้การแก้ไขไฟล์ /etc/vsftpd.conf มีผลต่อการทำงานทันที ดังนี้
# /etc/init.d/xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
#
สำหรับรายละเอียดของการตั้งค่าสำหรับออปชันอื่นๆ ในไฟล์ /etc/vsftpd.conf นี้ สามารถศึกษาเพิ่มเติมได้จากไฟล์ vsftpd.conf.5 (ในที่นี้อยู่ในไดเรกทอรี /usr/share/man/man5 )
--------------------------------------------------------------------------------
ตัวอย่างการล็อกอินเพื่อทดสอบการ FTP
เชื่อมต่อมาที่เซิร์ฟเวอร์โดยผ่านทาง FTP
c:\>ftp 192.168.9.124
Connected to 192.168.9.124.
220 Welcome to My FTP service, authorized access only.
User (192.168.9.124:(none)): user1
331 Please specify the password.
Password:
230 Login successful.
ftp>
ผู้ใช้จะไม่สามารถอัพโหลดไฟล์ "file_4_upload" ได้ ตามที่ได้ตั้งค่าไว้ ดังนี้
ftp> put file_4_upload
200 PORT command successful. Consider using PASV.
550 Permission denied.
ftp>
ตรวจสอบไฟล์ที่ต้องการดาวน์โหลดว่ามีอยู่จริงหรือไม่
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
file_4_download
226 Directory send OK.
ftp: 10 bytes received in 0.00Seconds 10000.00Kbytes/sec.
ftp>
และทำการดาวน์โหลดไฟล์ที่ต้องการ ดังนี้
ftp> get file_4_download
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for file_4_download (8294 bytes).
####
226 File send OK.
ftp: 8294 bytes received in 0.01Seconds 829.40Kbytes/sec.
ftp>
เมื่อทดสอบเชื่อมต่อด้วยการ ftp โดยใช้ชื่อ anonymous จะไม่สามารถทำได้เนื่องจากได้จำกัดไว้ตั้งแต่ต้นแล้ว
C:\>ftp 192.168.9.124
Connected to 192.168.97.124.
220 Welcome to My FTP service, authorized access only.
User (192.168.9.124:(none)): anonymous
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp> bye
221 Goodbye
--------------------------------------------------------------------------------
บทสรุป
VSFTP ถูกเลือกใช้โดยไซต์ใหญ่ๆ หลายไซต์ รวมถึงโครงการ Open BSD ที่เน้นทางด้านความปลอดภัย หรือแม้แต่ Red Hat Linux เนื่องมาจากคุณสมบัติของมันที่มีขนาดเล็ก สามารถรับโหลดที่หนักได้ รวมถึงมีความปลอดภัยและใช้งานได้ง่ายด้วย จึงทำให้ VSFTP เหมาะที่จะนำมาใช้เป็นเซิร์ฟเวอร์ FTP ที่มีปัญหาด้านความปลอดภัยน้อยมาก
--------------------------------------------------------------------------------
แหล่งข้อมูลอ้างอิง
http://techupdate.zdnet.co.uk/story/0,,t507-s2129119-p1,00.html
http://techupdate.zdnet.co.uk/story/0,,t507-s2129119-p2,00.html
http://vsftpd.beasts.org/
http://www.siliconvalleyccie.com/linux-hn/ftp-server.htm
No comments:
Post a Comment