รูปที่ 1 การเชื่อมต่อผ่านโพรโตคอล FTP
--------------------------------------------------------------------------------
รูปแบบการให้บริการ FTP
การให้บริการ FTP เซิร์ฟเวอร์ที่อนุญาตให้ทุกคนบนอินเตอร์เน็ตสามารถใช้บริการ FTP บนเซิร์ฟเวอร์ได้เรียกว่า Anonymous FTP server ซึ่งเป็นที่นิยมใช้ในการให้บริการการโอนย้ายไฟล์บนอินเตอร์เน็ตโดยใช้โพรโตคอล FTP และเอกสารในส่วนนี้จะกล่าวเน้นเฉพาะวิธีการปรับปรุง Anonymous FTP server ให้มีความปลอดภัยมากขึ้นเท่านั้น
การให้บริการอีกแบบหนึ่งเป็นบริการที่อนุญาตให้ผู้ใช้บนระบบเท่านั้น สามารถใช้บริการโอนย้ายไฟล์ผ่าน FTP ได้ โดยใช้ล็อกอินและรหัสผ่านเดิมในการเข้าสู่ระบบ เรียกบริการนี้ว่า Real FTP server หรือเรียกได้อีกชื่อหนึ่งว่า Private User-only FTP server ข้อควรระวังคือการโอนย้ายไฟล์ผ่าน FTP มีข้อบกพร่องในเรื่องความปลอดภัยของข้อมูล เพราะใช้การสื่อสารข้อมูลแบบเพลนเท็กซ์ฟหรือข้อมูลในการสื่อสารีไม่มีการเข้ารหัสใดๆ ทำให้สามารถดักจับรหัสผ่านในการเข้าสู่ระบบได้โดยง่าย
การให้บริการแบบ Real FTP server สามารถแยกแบบการให้บริการแบบพิเศษอีกแบบหนึ่งได้ เรียกว่า Guest FTP server ซึ่งเป็นบริการที่จะมีการสร้างบัญชีผู้ใช้พิเศษขึ้นมาคนหนึ่งที่เรียกว่า Guest เพื่อใช้สำหรับการเข้ามาใช้บริการ FTP โดยเฉพาะ ผู้ดูแลระบบสามารถจำกัดจำนวนผู้ใช้บริการนี้ได้โดยแจ้งรหัสผ่านของผู้ใชัพิเศษ Guest ให้กับเฉพาะบุคคลที่อนุญาตเท่านั้นได้
ข้อแตกต่างระหว่างการให้บริการแบบ Real FTP server กับ Guest FTP server คือผู้ใช้ที่สามารถเข้ามาใช้บริการ Real FTP server ได้นั้นนอกจากจะเป็นผู้ใช้ที่มีตัวตนจริงในระบบแล้ว ผู้ใช้คนดังกล่าวยังสามารถเข้าถึงไดเรกทอรีในระบบได้ทุกไดเรกทอรีเหมือนกับการล็อกอินเข้ามาตามปกติ แต่ Guest FTP server จะสามารถกำหนดขอบเขตการเข้าถึงไดเรกทอรีที่กำหนดสำหรับผู้ใช้ Guest เท่านั้นได้ การจำกัดขอบเขตการเข้าถึงไดเรกทอรีในระบบจะช่วยเพิ่มความปลอดภัยให้ FTP server และเรียกวิธีการนี้ว่าการ Chroot และเรียกไดเรกทอรีที่จำกัดให้เข้าถึงได้เฉพาะผู้ใช้ Guest ว่า Chroot environment หรือ Chroot Jail
วิธีการ Chroot ใช้สำหรับการจำกัดขอบเขตการเข้าถึงไดเรกทอรีในระบบ ซึ่งจะช่วยเพิ่มความปลอดภัยให้กับบริการ FTP มากยิ่งขึ้น สามารถนำไปประยุกต์ใช้กับการให้บริการ FTP แบบอื่นได้ทั้งแบบ Anonymous FTP server และ Real FTP server ซึ่งถ้าเป็นแบบ Real FTP server แล้วจะทำให้ผู้ใช้ในระบบไม่สามารถเข้าถึงไดเรกทอรีอื่นได้ เป็นข้อสังเกตในเรื่องความสมดุลระหว่างการทำให้บริการ FTP มีความปลอดภัยมากขึ้นหรือทำให้การใช้งานสะดวกมากขึ้น
อย่างไรก็ตาม เนื่องมาจากข้อบกพร่องของการสื่อสารโดยใช้โพรโตคอล FTP เป็นการสื่อสารที่ไม่ได้มีการเข้ารหัส ถ้าเลี่ยงได้ก็ควรเลี่ยงและไม่แนะนำให้เปิดบริการ FTP ในแบบ Real FTP server และ Guest FTP server เพราะมีอัตราความเสี่ยงสูงที่จะถูกดักจับรหัสผ่านได้ หรือควรเลือกใช้โพรโตคอลที่มีการเข้ารหัสในการโอนย้ายไฟล์เช่น โพรโตคอล Secure FTP หรือ SFTP แทน
--------------------------------------------------------------------------------
ไฟล์ configuration สำหรับการเปิดบริการ Anonymous FTP server บน Red Hat Linux
โปรแกรมที่ใช้เป็นบริการ Anonymous FTP Server ในส่วนนี้จะกล่าวถึงโปรแกรม Wu-FTPd เท่านั้น ซึ่งเป็นโปรแกรม ที่ได้รับความนิยมนำไปใช้งานมากโปรแกรมหนึ่ง เพราะ configuration ไม่ซับซ้อน จะขอไม่กล่าวถึงการติดตั้งโปรแกรม Wu-FTPd บน Red Hat Linux เพราะจะถือว่าผู้ดูแลระบบได้เลือกติดตั้งในขั้นตอนการติดตั้ง Red Hat Linux ไปในขั้นต้นแล้ว หรือผู้ดูแลระบบสามารถติดตั้งโดยใช้ RPM ในภายหลังได้
ไฟล์ configuration ของ Wu-FTPd ใน Red Hat Linux ประกอบด้วย (Wu-FTPd ที่ใช้เป็นตัวอย่าง เลือกวิธีการติดตั้งแบบ RPM)
File name Description
/etc/ftpaccess ไฟล์ configuration หลักของ Wu-FTPd
/etc/ftpusers ฐานข้อมูลผู้ใช้ที่ไม่สามารถเข้ามาใช้บริการ Wu-FTPd ได้
/etc/ftphosts ใช้ในการกำหนด Access Control ให้โฮสใดบ้างที่อนุญาตหรือไม่อนุญาตให้เข้ามาใช้บริการ FTP
/etc/ftpgroups กำหนดกลุ่มในการเข้าถึงบริการ FTP
/etc/ftpconversion เก็บคำสั่งที่ใช้สำหรับการบีบข้อมูลการโอนย้ายไฟล์ผ่าน FTP
ตารางที่ 1 ตารางแสดงไฟล์ configuration ของ Wu-FTPd
มีไฟล์ที่ต้องแก้ไขคือ /etc/ftpaccess และ /etc/ftpusers สำหรับไฟล์อื่นสามารถใช้ค่าดีฟอลต์ที่มาจากติดตั้งได้
--------------------------------------------------------------------------------
โครงสร้าง Chroot Environment สำหรับการให้บริการ Anonymous FTP Server
ข้อดีหนึ่งของการติดตั้งโปรแกรมโดยใช้ RPM ของ Red Hat Linux จะช่วยลดขั้นตอนในการติดตั้งโปรแกรมต่างๆ ได้มาก การติดตั้ง Wu-FTPd โดยใช้ RPM นั้นจะมีโครงสร้าง Chroot Environment ที่สามารถใช้งานได้ทันที
ผู้ดูแลระบบควรจะตรวจสอบให้แน่ใจว่ามีการติดตั้งอย่างถูกต้องหรือไม่ โดยตรวจดูในไฟล์ /etc/passwd ว่ามีฟิลด์นี้หรือไม่
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
ฟิลด์ข้างต้นใช้ในการกำหนดผู้ใช้ที่เป็น Anonymous สำหรับการเข้ามาใช้บริการ FTP ในระบบ และยังบอกให้ทราบถึงไดเรกทอรีที่จะใช้เป็น Chroot Environment ของ FTP Server ข้อดีของโปรแกรม Wu-FTPd คือจะใช้วิธี Chroot จำกัดขอบเขตการเข้าถึงไดเรกทอรีในระบบให้โดยอัตโนมัติ โดยเปลี่ยน Chroot Environment ไว้ตามที่กำหนดในฟืลด์ของผู้ใช้ ftp ในไฟล์ /etc/passwd ซึ่งในที่นี้คือ /var/ftp
--------------------------------------------------------------------------------
กำหนดผู้ใช้ที่อนุญาตให้เข้ามาใช้บริการ Anonymous FTP Server
ไฟล์แรกที่ต้องแก้ไขคือไฟล์ /etc/ftpusers เป็นไฟล์ที่ใช้ในการกำหนดชื่อผู้ใช้ที่ไม่อนุญาตให้เข้ามาใช้บริการ FTP ในระบบได้ หมายถึงชื่อผู้ใช้ที่มีชื่ออยู่ในไฟล์ /etc/ftpusers จะไม่สามารถล็อกอินเข้าใช้บริการ Anonymous FTP Server ได้
การเปิดบริการ Anonymous FTP Server จะอนุญาตให้ผู้ใช้ที่ชื่อ ftp เท่านั้นที่สามารถเข้ามาใช้บริการได้ และไม่อนุญาตให้ผู้ใช้อื่นในระบบเข้ามาได้ วิธีการที่ง่ายและรวดเร็วที่สุดคือนำชื่อผู้ใช้ทุกคนที่อยู่ในไฟล์ /etc/passwd มา และลบชื่อ ftp ออก โดยใช้ตำสั่ง
# cat /etc/passwd | awk -F: '{print $1}' > /etc/ftpusers
แล้วลบคำว่า ftp ออกจากไฟล์ /etc/ftpusers
# cat ftpusers
root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
gopher
# ftp
nobody
mailnull
rpm
xfs
rpc
rpcuser
nfsnobody
nscd
ident
radvd
pcap
demo
ntp
who
uptime
--------------------------------------------------------------------------------
แก้ไข File Permission ของ /var/ftp
จากที่ได้กล่าวไปแล้วว่าการติดตั้ง Wu-FTPd โดยใช้ RPM นั้นจะมี Chroot Environment ที่เหมาะสมของ Anonymous FTP อยู่ที่ /var/ftp สิ่งที่ต้องทำเพิ่มคือการกำหนด File Permission ให้เหมาะสมด้วยเพื่อเพิ่มความปลอดภัยให้ Anonymous FTP Server
dr-x--x--x 2 root root 4096 Jul 10 23:11 bin
dr-x--x--x 2 root root 4096 Jul 10 23:06 etc
dr-x--x--x 2 root root 4096 Jul 10 23:06 lib
dr-xr-xr-x 4 root root 4096 Jul 20 16:56 pub
จากนั้นแก้ไข File Permission ของไฟล์ configuration ของ Wu-FTPd ด้วยดังนี้
-rw------- 1 root root 1724 Jul 20 18:09 ftpaccess
-rw------- 1 root root 464 Jun 26 2001 ftpconversions
-rw------- 1 root root 39 Jun 26 2001 ftpgroups
-rw------- 1 root root 104 Jun 26 2001 ftphosts
-rw------- 1 root root 173 Jul 20 16:48 ftpusers
--------------------------------------------------------------------------------
แก้ไขไฟล์ configuration ของ Wu-FTPd
ไฟล์ configuration ของ Wu-FTPd คือ /etc/ftpaccess ตามตัวอย่างนี้ได้ปรับแต่งให้มีความปลอดภัยที่สุดแล้ว ซึ่งสามารถคัดลอกไปใช้ได้
# /etc/ftpaccess
# Don't allow system accounts to log in over ftp
deny-uid %-99 %65534-
deny-gid %-99 %65534-
allow-uid ftp
allow-gid ftp
# Class for FTP server
class demo anonymous 192.168.97.*
# Limit number accounts simultaneous login
limit demo 20 /var/ftp/.too_many.msg
email ftpadmin@demo.thaicert.nectec.or.th
# Login fail times
loginfails 3
# Notify the users of README files at login and when
# changing to a different directory
readme README* login
readme README* cwd=*
# Messages displayed to the user
message /.message.welcome login
message .message cwd=*
# Permission
compress yes all
tar yes all
chmod no anonymous
delete no anonymous
overwrite no anonymous
rename no anonymous
umask no anonymous
# Logging
log commands anonymous
log transfers anonymous inbound,outbound
log security anonymous
# If /etc/shutmsg exists, don't allow logins
# see ftpshut man page
shutdown /etc/shutmsg
# Ask users to use their email address as anonymous
# password
passwd-check rfc822 warn
# We don't want users being able to upload into these areas
upload /var/ftp/* / no
upload /var/ftp/* /etc no
upload /var/ftp/* /bin no
upload /var/ftp/* /lib no
upload /var/ftp/* /pub no
# We'll prevent downloads with noretrieve.
noretrieve /var/ftp/etc
noretrieve /var/ftp/bin
noretrieve /var/ftp/lib
# User restriced
guest-root /var/ftp ftp
guestgroup ftp
restriced-uid ftp
restriced-gid ftp
# Disable Greeting
greeting text ThaiCERT Demo FTP Anonymous Server
signoff text ThaiCERT Demo FTP Anonymous Server Goodbye!
# Others
keepalive yes
noretrieve .notar
# End of Anonymous FTP Demo Server
ตารางที่ 2 ไฟล์ configuration ของ Wu-FTPd
อธิบายเฉพาะส่วนสำคัญได้ดังต่อไปนี้
deny-uid %-99 %65534-
deny-gid %-99 %65534-
allow-uid ftp
allow-gid ftp
อนุญาตให้ผู้ใช้ที่ชื่อ ftp เท่านั้นเข้ามาใช้บริการได้ (เหมือนกับการกำหนดใน /etc/ftpusers)
class demo anonymous 192.168.97.*
กำหนด class เป็นการบอก Wu-FTPd ว่าผู้ใช้ในแบบใดที่สามารถให้บริการได้ สำหรับ Wu-FTPd ได้แบ่ง class ไว้ 3 class คือ real, guest และ anonymous ซึ่งได้อธิบายไปในตอนต้นแล้วว่ามีกี่แบบและมีลักษณะอย่างไร ส่วนคำว่า demo คือชื่อเซิร์ฟเวอร์ และ 192.168.97.* ใช้เพื่อกำหนดว่าไอพีใดอยู่ใน class ใด
limit demo 20 /var/ftp/.too_many.msg
กำหนดจำนวนผู้ใช้ที่สามารถล็อกอินเข้ามาใช้บริการ FTP Server ได้พร้อมกันในเวลาเดียวกัน ในตัวอย่างกำหนดให้มีผู้ใช้สามารถล็อกอินเข้ามาใช้บริการได้พร้อมกันมากที่สุดในเวลาเดียวกันได้ 20 คน ถ้าเข้ามามากกว่าจำนวนที่อนุญาต จะแจ้งเตือนตามข้อความที่อยู่ในไฟล์ /var/ftp/.too_many.msg นอกจากกำหนดจำนวนผู้ใช้แล้ว ยังสามารถกำหนดวันเวลาที่อนุญาตให้เข้ามาใช้บริการได้อีกด้วย ตัวอย่างเช่น
limit demo 20 MoTuWeTh,Fr0000-1800 /var/ftp/.too_many.msg
หมายความว่าสามารถใช้บริการได้ทั้งวันในวันจันทร์ถึงวันพฤหัสบดี ส่วนวันศุกร์เข้ามาได้เฉพาะเวลา 00.00 ถึง 18.00 เท่านั้น และไม่อนุญาตให้เข้ามาใช้บริการในวันวันเสาร์และอาทิตย์ และเข้ามาใช้บริการได้พร้อมกันได้มากที่สุด 20 คน
message /.message.welcome login
message .message cwd=*
กำหนดข้อความในการแสดงผล ข้อความในไฟล์ /var/ftp/.message.welcome จะแสดงตอนเริ่มต้นเมื่อล็อกอินเข้ามาใช้บริการ ส่วนข้อความในไฟล์ .message จะใช้ในการแจ้งรายละเอียดของไดเรกทอรีต่างๆ เมื่อผู้ใช้เข้าสู่ไดเรกทอรีนั้น
compress yes all
tar yes all
chmod no anonymous
delete no anonymous
overwrite no anonymous
rename no anonymous
umask no anonymous
อนุญาตให้ใช้การบีบอัดข้อมูลในขณะโอนย้ายไฟล์ได้ แต่ไม่อนุญาตให้ chmod, delete, overwrite, rename และ umask บนทุกไดเรกทอรีใน Chroot Environment สำหรับ class แบบ anonymous
log commands anonymous
log transfers anonymous inbound,outbound
log security anonymous
กำหนดให้เก็บล็อกของคำสั่งที่ใช้บน FTP Server และข้อมูลการเชื่อมต่อที่เกิดขึ้นไปเก็บไว้ในไฟล์ /var/log/messages และเก็บล็อกการดาวโหลดไฟล์จาก FTP Server ไว้ในไฟล์ /var/log/xferlog
upload /var/ftp/* / no
upload /var/ftp/* /etc no
upload /var/ftp/* /bin no
upload /var/ftp/* /lib no
upload /var/ftp/* /pub no
ไม่อนุญาตให้อัพโหลดไฟล์ขึ้นเซิร์ฟเวอร์ในทุกไดเรกทอรี
noretrieve /var/ftp/etc
noretrieve /var/ftp/bin
noretrieve /var/ftp/lib
ไม่อนุญาตให้แสดงผลไฟล์ในไดเรกทอรี etc/, bin/ และ lib/
guest-root /var/ftp ftp
guestgroup ftp
restriced-uid ftp
restriced-gid ftp
กำหนดให้มีสิทธิ์เป็นผู้ใช้ ftp เท่านั้นเมื่อเข้ามาใช้บริการ Anonymous FTP Server
greeting text ThaiCERT Demo FTP Anonymous Server
signoff text ThaiCERT Demo FTP Anonymous Server Goodbye!
กำหนดข้อความในการตอบรับการเชื่อมต่อ และปิดการเชื่อมต่อการใช้บริการ Anonymous FTP Server โดยปกติแล้วถ้าไม่กำหนดนั้น ข้อความตอบรับการเชื่อมต่อจะเป็นดังนี้ # ftp demo
Connected to demo.thaicert.nectec.or.th.
220 A8-demo1.nectec.or.th FTP server (Version wu-2.6.1-18) ready.
Name (demo:root): ftp
331 Guest login ok, send your complete e-mail address as password.
Password:
เป็นการแสดงตัวตนของโปรแกรมอย่างชัดเจน ใช้โปรแกรมใด เวอร์ชันอะไร และมีชื่อโฮสว่าอะไร การกำหนดข้อความในการตอบรับการเชื่อมต่อจะทำให้ไม่แสดงข้อมูลเหล่านี้ได้
# ftp demo
Connected to demo.thaicert.nectec.or.th.
220 ThaiCERT Demo FTP Anonymous Server
Name (demo:root): ftp
331 Guest login ok, send your complete e-mail address as password.
Password:
--------------------------------------------------------------------------------
เปิดใช้บริการ Anonymous FTP Server ผ่าน xinetd
แก้ไขไฟล์ /etc/xinetd.d/wu-ftpd ให้ xinetd รอรับการเชื่อมต่อผ่านโพรโตคอล FTP
# default: on
# description: The wu-ftpd FTP server serves FTP connections. It uses \
# normal, unencrypted usernames and passwords for authentication.
service ftp
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.ftpd
server_args = -l -a
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 10
only_from = 192.168.97
}
แก้ไขไอพีที่อนุญาตให้สามารถเข้ามาใช้บริการ Anonymous FTP Server ใน only_from ตามต้องการ
จากนั้นรีสตาร์ต xinetd เพื่อให้ใช้ configuration ที่มีการแก้ไขใหม่นี้โดยใช้คำสั่ง
# /etc/rc.d/init.d/xinetd restart
--------------------------------------------------------------------------------
แก้ไข logrotate ให้เหมาะสม
แก้ไขไฟล์ /etc/logrotate.d/ftpd เพื่อให้ logrotate จัดการไฟล์ล็อก /var/log/xferlog ซึ่งเป็นไฟล์ที่เก็บข้อมูลการโอนย้ายไฟล์ที่เกิดขึ้นกับ FTP Server
/var/log/xferlog {
# ftpd doesn't handle SIGHUP properly
nocompress
}
--------------------------------------------------------------------------------
เครื่องมืออำนวยความสะดวกสำหรับ FTP Server
ftpwho
ใช้แสดงผลผู้ใช้ที่เข้ามาใช้บริการ FTP Server ในขณะใดขณะหนึ่ง และข้อมูลของโพรเซสที่เกิดขึ้นจากการเชื่อมต่อด้วย
# ftpwho
Service class demo:
1886 ? SN 0:00 ftpd: 192.168.97.220: ftp: IDLE
1891 ? SN 0:00 ftpd: 192.168.97.220: ftp: IDLE
- 2 users (20 maximum)
ftpcount
คล้ายกับ ftpwho แต่แสดงเฉพาะผู้ใช้ที่เข้ามาเท่านั้น
# ftpcount
Service class demo - 2 users (20 maximum)
No comments:
Post a Comment