Bài t p 3.1 (D ch v FTP)
H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 162/271
I. Gi i thi u v FTP
I.1. Giao th c FTP
FTP là t vi t t t c a File Transfer Protocol. Giao th c này đ c xây d ng d a trên chu n TCP, FTP cung c p c ch truy n tin d i d ng file thông qua m ng TCP/IP, FTP là 1 d ch v đ c bi t vì nó dùng đ n 2 c ng: c ng 20 dùng đ truy n d li u (data port) và c ng 21 dùng đ truy n l nh (command port).
I.1.1 Active FTP
ch đ ch đ ng (active), máy khách FTP (FTP client) dùng 1 c ng ng u nhiên không dành riêng (c ng N > 1024) k t n i vào c ng 21 c a FTP server. Sau đó, máy khách l ng nghe trên c ng N+1 và g i l nh PORT N+1 đ n FTP server. Ti p theo, t c ng d li u c a mình, FTP server s k t n i ng c l i vào c ng d li u c a client đã khai báo tr c đó (t c là N+1), khía c nh firewall, đ FTP Server h tr ch đ active các kênh truy n sau ph i m :
- C ng 21 ph i đ c m cho b t c ngu n g i nào (đ client kh i t o k t n i) - FTP server's port 21 to ports > 1024 (Server tr l i v c ng đi u khi n c a client)
- Cho k t n i t c ng 20 c a FTP server đ n các c ng > 1024 (Server kh i t o k t n i vào c ng d li u c a client)
- Nh n k t n i h ng đ n c ng 20 c a FTP server t các c ng > 1024 (Client g i xác nh n ACKs đ n c ng data c a server)
S đ k t n i
- B c 1, client kh i t o k t n i vào c ng 21 c a server và g i l nh PORT 1027.
- B c 2 server g i xác nh n ACK v c ng l nh c a client.
- B c 3 server kh i t o k t n i t c ng 20 c a mình đ n c ng d li u mà client đã khai báo tr c đó.
- B c 4 client g i ACK ph n h i cho server.
H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 163/271 Khi FTP Server ho t đ ng ch đ ch đ ng, Client không t o k t n i th t s vào c ng d li u c a FTP server, mà ch đ n gi n là thông báo cho server bi t r ng nó đang l ng nghe trên c ng nào và server ph i k t n i ng c v client vào c ng đó. Trên quan đi m firewall đ i v i máy client đi u này gi ng nh 1 h th ng bên ngoài kh i t o k t n i vào h th ng bên trong và đi u này th ng b ng n ch n trên h u h t các h th ng Firewall.
Ví d : Phiên làm vi c active FTP:
Trong ví d này phiên làm vi c FTP kh i t o t máy testbox1.slacksite.com (192.168.150.80), dùng ch ng trình FTP client d ng dòng l nh, đ n máy ch FTP testbox2.slacksite.com (192.168.150.90). Các dòng có d u --> ch ra các l nh FTP g i đ n server và thông tin ph n h i t các l nh này. Các thông tin ng i dùng nh p vào d i d ng ch đ m.
L u ý Khi l nh PORT đ c phát ra trên client đ c th hi n 6 byte. 4 byte đ u là đa ch IP c a máy client còn 2 byte sau là s c ng. Giá tr c ng đu c tính b ng (byte_5*256) + byte_6, ví d ( (14*256) + 178) là 3762.
testbox1: {/home/p-t/slacker/public_html} % ftp -d testbox2 Connected to testbox2.slacksite.com.
220 testbox2.slacksite.com FTP server ready.
Name (testbox2:slacker): slacker ---> USER slacker
331 Password required for slacker.
Password: TmpPass ---> PASS XXXX
230 User slacker logged in.
---> SYST
215 UNIX Type: L8
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
ftp: setsockopt (ignored): Permission denied ---> PORT 192,168,150,80,14,178
200 PORT command successful.
---> LIST
150 Opening ASCII mode data connection for file list.
drwx--- 3 slacker users 104 Jul 27 01:45 public_html 226 Transfer complete.
ftp> quit ---> QUIT 221 Goodbye.
I.1.2 Passive FTP
gi i quy t v n đ là server ph i t o k t n i đ n client, m t ph ng th c k t n i FTP khác đã đ c phát tri n. Ph ng th c này g i là FTP th đ ng (passive) ho c PASV (là l nh mà client g i cho server đ báo cho bi t là nó đang ch đ passive).
H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 164/271 ch đ th đ ng, FTP client t o k t n i đ n server, tránh v n đ Firewall l c k t n i đ n c ng c a máy bên trong t server. Khi k t n i FTP đ c m , client s m 2 c ng không dành riêng N, N+1 (N > 1024). C ng th nh t dùng đ liên l c v i c ng 21 c a server, nh ng thay vì g i l nh PORT và sau đó là server k t n i ng c v client, thì l nh PASV đ c phát ra. K t qu là server s m 1 c ng không dành riêng b t k P (P > 1024) và g i l nh PORT P ng c v cho client..
Sau đó client s kh i t o k t n i t c ng N+1 vào c ng P trên server đ truy n d li u. theo quan đi m Firewall trên server FTP, đ h tr FTP ch đ passive, các kênh truy n sau ph i đ c m :
- C ng FTP 21 c a server nh n k t n i t b t k ngu n nào (cho client kh i t o k t n i) - Cho phép tr l i t c ng 21 FTP server đ n c ng b t k trên 1024 (Server tr l i cho c ng
control c a client)
- Nh n k t n i trên c ng FTP server > 1024 t b t c ngu n nào (Client t o k t n i đ truy n d li u đ n c ng ng u nhiên mà server đã ch ra)
- Cho phép tr l i t c ng FTP server > 1024 đ n các c ng > 1024 (Server g i xác nh n ACKs đ n c ng d li u c a client)
S đ k t n i Passive FTP
+ B c 1, client k t n i vào c ng l nh c a server và phát l nh PASV.
+ B c 2 server tr l i b ng l nh PORT 2024, cho client bi t c ng 2024 đang m đ nh n k t n i d li u.
+ Bu c 3 client t o k t n i truy n d li u t c ng d li u c a nó đ n c ng d li u 2024 c a server.
+ B c 4 là server tr l i b ng xác nh n ACK v cho c ng d li u c a client.
Trong khi FTP ch đ th đ ng gi i quy t đ c v n đ phía client thì nó l i gây ra nhi u v n đ khác phía server. Th nh t là cho phép máy xa k t n i vào c ng b t k > 1024 c a server.
i u này khá nguy hi m tr khi FTP cho phép mô t dãy các c ng >= 1024 mà FTP server s dùng (ví d WU-FTP Daemon). V n đ th hai là m t s FTP client l i không h tr ch đ th đ ng. Ví d ti n ích FTP client mà Solaris cung c p không h tr FTP th đ ng. Khi đó c n ph i có thêm trình FTP client. M t l u ý là h u h t các trình duy t Web ch h tr FTP th đ ng khi truy c p FTP server theo đ ng d n URL ftp://.
Ví d phiên làm vi c passive FTP:
H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 165/271 Trong ví d này phiên làm vi c FTP kh i t o t máy testbox1.slacksite.com (192.168.150.80), dùng ch ng trình FTP client d ng dòng l nh, đ n máy ch FTP testbox2.slacksite.com (192.168.150.90), máy ch Linux ch y ProFTPd 1.2.2RC2. Các dòng có d u --> ch ra các l nh FTP g i đ n server và thông tin ph n h i t các l nh này. Các thông tin ng i nh p vào d i d ng ch đ m.
L u ý: i v i FTP th đ ng, c ng mà l nh PORT mô t chính là c ng s đ c m trên server.
Còn đ i v i FTP ch đ ng c ng này s đ c m client.
testbox1: {/home/p-t/slacker/public_html} % ftp -d testbox2 Connected to testbox2.slacksite.com.
220 testbox2.slacksite.com FTP server ready.
Name (testbox2:slacker): slacker ---> USER slacker
331 Password required for slacker.
Password: TmpPass ---> PASS XXXX
230 User slacker logged in.
---> SYST
215 UNIX Type: L8
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> passive Passive mode on.
ftp> ls
ftp: setsockopt (ignored): Permission denied ---> PASV
227 Entering Passive Mode (192,168,150,90,195,149).
---> LIST
150 Opening ASCII mode data connection for file list
drwx--- 3 slacker users 104 Jul 27 01:45 public_html 226 Transfer complete.
ftp> quit ---> QUIT 221 Goodbye.
II. Ch ng trình FTP Server
FTP Server là máy ch l u gi nh ng tài nguyên và h tr giao th c FTP đ giao ti p v i nh ng máy tính khác cho phép truy n d li u trên Internet. M t s ch ng trình ftp server s d ng trên Linux:
- Vsftpd - Wu-ftpd - PureFTPd - ProFTPD
H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 166/271
III. Ch ng trình FTP client
Là ch ng trình giao ti p v i FTP Server, h u h t các h đi u hành đ u h tr ftp client, trên linux ho c Windows đ m k t n i t i FTP Server ta dùng l nh #ftp <ftp_address>. thi t l p m t phiên giao d ch, ta c n ph i có đa ch IP (ho c tên máy tính), m t tài kho n (username, password). Username mà FTP h tr s n cho ng i dùng đ m m t giao d ch FTP có tên là anonymous v i password r ng. Sau đây là m t ví d v m m t phiên giao d ch đ n FTP Server:
M t s t p l nh c a ftp client:
Tên l nh
Cú pháp Ý ngh a
? ho c l nh help
? [command] Hi n th giúp đ v
[command]
append append local-file [remote-file] Ghép m t file c c b v i 1 file trên Server
ascii ASCII Ch đnh ki u truy n file
là ascii (đây là ki u truy n m c đnh).
binary binary Ch đnh ki u truy n file
là binary(đây là ki u truy n m c đnh).
bye bye K t thúc ftp session
cd cd remote-directory Thay đ i đ ng d n th m c trên FTP Server
delete delete remote-file Xóa file trên FTP Server
dir dir remote-directory Li t kê danh sách file
H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 167/271 get get remote-file [local-file] Download file t FTP
Server v máy c c b lcd lcd [directory] Thay đ i th m c trên
máy c c b
ls ls [remote-directory] [local-file] Li t kê các t p tin và th m c
mdelete mdelete remote-files [ ...] Xóa nhi u file mget mget remote-files [ ...] Download nhi u file
mkdir mkdir directory T o th m c
put put local-file [remote-file] Upload t p tin mput mput local-files [ ...] Upload nhi u t p tin open open computer [port] K t n i t i ftp server
prompt prompt T t c ch confirm sau
m i l n download file disconne
ct
disconnect H y k t n i FTP
Pwd pwd Xem th m c hi n t i
quit quit Thoát kh i ftp session
recv recv remote-file [local-file] Copy file t remote v local
Rename rename filename newfilename Thay đ i tên file
rmdir rmdir directory Xóa th m c
Send send local-file [remote-file] Copy file t local đ n remote
User user user-name [password]
[account]
Chuy n đ i user khác
H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 168/271
IV. Gi i thi u VsFTP
Vsftpd là m t package m i giúp c u hình ftp server trong RedHat Linux 9. Vsftpd (Very Secure FTP Daemon) đ c phát tri n xoay quanh tính n ng nhanh, đnh và an toàn. VsFTP có kh n ng qu n lý s l ng k t n i l n m t cách hi u qu và an toàn.
IV.1. Nh ng t p tin đ c cài đ t liên quan đ n vsftpd
Sau đây li t kê nh ng t p tin và th m c th ng đ c quan tâm khi c u hình vsftpd server:
- /etc/pam.d/vsftpd: T p tin c u hình PAM cho vsftpd. T p tin này đnh ngh a nh ng yêu c u mà ng i dùng ph i cung c p khi đ ng nh p vào ftp server.
- /etc/vsftpd/vsftpd.conf: t p tin c u hình vsftpd server.
- /etc/vsftpd.ftpusers: li t kê nh ng ng i dùng không đ c login vào vsftpd. M c đnh danh sách nh ng ng i dùng này g m root, bin, daemon và nh ng ng i dùng khác
- /etc/vsftpd.user_list: t p tin này đ c c u hình đ c m hay cho phép nh ng ng i dùng đ c li t kê truy c p ftp server. đi u này ph thu c vào tùy ch n userlist_deny đ c xét YES hay NO trong t p tin vsftpd.conf. N u nh ng ng i dùng đã li t kê trong t p tin này thì không đ c xu t hi n trong vsftpd.ftpusers
- /var/ftp/: th m c ch a nh ng t p tin đáp ng cho vsftpd. Nó c ng ch a th m c pub cho ng i dùng anonymous. Th m c này ch có th đ c, ch có root m i có kh n ng ghi.
IV.2. Kh i đ ng và d ng vsftpd
Sau khi cài đ t ph n m m VSFTPD ho c sau khi ta thay đ i c u hình, ta ph i ti n hành kích ho t d ch v FTP. Quá trình kh i đ ng l i s giúp cho Daemon VSFTPD c p l i các thông s mà ta đã thay đ i, s d ng l nh chkconfig vsftpd on đ đ t d ch v FTP là system services. M t s l nh c n s d ng khi ta mu n kh i đ ng l i d ch v FTP:
#service vsftpd start/stop/restart Ho c s d ng l nh
#/etc/init.d/vsftpd start/stop/restart
IV.3. M t s thông s c u hình m c đ nh
M c đnh d ch v FTP s d ng ph n m m VSFTPD cho phép ng i dùng anonymous, ng i dùng c c b trong h th ng đ c quy n login vào FTP Server, ch có user root và nh ng user khác có UID<100 không đ c login.
- i v i anonymous đ c login vào FTP server và có th m c g c /var/ftp v i quy n truy xu t read (đ c và truy xu t tài li u).
- i v i ng i dùng c c b (localuser) đ c quy n login vào d ch v FTP và có th m c FTP root là /home/username (username là tên user login) v i quy n read, write.
H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 169/271 IV.4. Nh ng tùy ch n c u hình vsftpd
T t c nh ng c u hình c a vsftpd đ c l u gi trong t p tin c u hình /etc/vsftpd/vsftpd.conf. M i tùy ch n trong t p tin có đnh d ng sau: <tùy ch n>=<value>, nh ng dòng chú thích đ c đánh d u #
Daemon:
- Listen: Khi nó có giá tr YES thì VSFTPD ch y trong ch đ standalone. Thu c tính này không đ c xét v i listen_ipv6, giá tr m c đnh là YES.
- Session_support: n u tùy ch n này có giá tr là YES thì vsftpd c g ng qu n lý giao d ch login c a ng i dùng ngang qua PAM (Pluggable Authentication Modules), giá tr m c đnh là YES.
ng nh p và đi u khi n truy c p:
- anonymous_enable: n u tùy ch n này có giá tr là YES thì ng i dùng anonymous đ c phép login vào, giá tr m c đnh YES
- banned_email_file: N u tùy ch n deny_email_enable đ c xét là YES, tùy ch n này ch ra t p tin ch a danh sách nh ng password email c a anonymous không cho phép truy c p đ n server, giá tr m c đnh: /etc/vsftpd.banned_emails
- banner_file: ch ra t p tin text s đ c hi n th khi k t n i đ n server đ c thi t l p.
- cmds_allowed: ch ra danh sách nh ng l nh ftp (phân cách nhau b i d u ph y) đ c cho phép b i ftp server. T t c nh ng l nh khác s b t ch i.
- deny_email_enable: n u tùy ch n này có giá tr là YES thì ng i dùng anonymous s d ng password đ c ch ra trong t p tin /etc/vsftpd.banned_emails b c m truy c p đ n server, giá tr m c đnh là NO
- ftpd_banner: n u tùy ch n này có giá tr là YES thì chu i đ c ch ra trong tùy ch n này s hi n th dòng thong tin mô t khi ng i dùng thi t l p k t n i v i server. Tùy ch n này s ghi đè lên banner_file. M c đnh vsftpd hi n th banner chu n.
- local_enable: n u tùy ch n này có giá tr là YES thì nh ng ng i dùng c c b đ c login vào h th ng.
- userlist_deny: c s d ng khi tùy ch n userlist_enable đ c đ t là NO, t t c nh ng ng i dùng c c b b c m truy c p tr nh ng ng i dùng đ c ch ra trong userlist_file. B i vì nh ng truy c p b c m tr c khi client đ c yêu c u nh p vào password, đ t tùy ch n này là NO đ ng n ch n nh ng ng i dùng c c b g i password không mã hóa trên m ng, giá tr m c đnh là YES.
- userlist_enable: n u tùy ch n này có giá tr là YES thì nh ng ng i dùng đ c ch ra trong t p tin trong userlist_file b c m truy c p. B i vì client b c m tr c khi client nh p password, ng i dùng b ng n ch n g i password không mã hóa trên m ng, m c đnh là YES.
- userlist_file: ch ra t p tin li t kê danh sách các ng i dùng, giá tr m c đnh /etc/vsftpd.user_list.
Ng i dùng Anonymous:
- anon_mkdir_write_enable: n u tùy ch n này có giá tr là YES và k t h p v i write_enable=YES thì ng i dùng anonymous đ c phép t o th m c m i trong th m c cha có quy n write, giá tr m c đnh là NO
H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 170/271 - anon_root: ch ra th m c vsftpd trao đ i khi ng i dùng anonymous login vào
- anon_upload_enable: n u tùy ch n này có giá tr là YES và cùng v i write_enable=YES thì ng i dùng anonymous đ c phép upload t p tin trong th m c cha v i quy n ghi, giá tr m c đnh là NO
- anon_world_readable_only: n u tùy ch n này có giá tr là YES thì ng i dùng anonymous ch đ c phép download nh ng t p tin có quy n đ c, giá tr m c đnh là YES
- ftp_username: ch ra ng i dùng c c b đ c s d ng cho anonymous ftp server. Home directory đ c đ c ch ra trong t p tin /etc/passwd cho ng i dùng là th m c g c c a anonymous ftp server, giá tr m c đnh là ftp
- no_anon_password: n u tùy ch n này có giá tr là YES thì ng i dùng anonymous s không yêu c u nh p password, giá tr m c đnh là NO
Ng i dùng c c b :
- Nh ng tùy ch n li t kê sau đây s nh h ng đ n cách truy c p c a ng i dùng c c b đ n server. s d ng nh ng tùy ch n này, tùy ch n local_enable=YES
- local_enable: cho phép ng i dùng c c b truy c p đ n ftp server
- chmod_enable: cho phép ng i dùng đ c phép thay đ i quy n h n trên t p tin, giá tr m c đnh là YES
- chroot_local_user: n u tùy ch n này có giá tr là YES thì ng i dùng có th di chuy n đ n home directory c a h sau khi login vào, giá tr m c đnh là NO
- guest_enable: n u tùy ch n này có giá tr là YES thì ng i dùng anonymous login vào nh guest, mà đ c ch ra trong guest_username, giá tr m c đnh là NO
- guest_username: ch ra username c a ng i dùng guest, giá tr m c đnh là ftp - local_root: Ch ra th m c vsftpd sau khi ng i dùng c c b login vào
Th m c:
- dirlist_enable: N u tùy ch n này có giá tr là YES thì các ng i dùng đ c phép xem n i dung c a th m c, giá tr m c đnh là YES
- dirmessage_enable: N u tùy ch n này có giá tr là YES thì m i khi ng i dùng di chuy n vào th m c s hi n th ra m t thông đi p đ c l u trong t p tin ch đnh s n. T p tin này đ c ch ra trong tùy ch n message_file và tên m c đnh là .message. Nó đ c l u trong th m c di chuy n vào.
- Message_file: ch ra tên c a t p tin message, Giá tr m c đnh là .message Truy n t p tin:
- Download _enable: n u tùy ch n này có giá tr là YES thì download đ c cho phép, giá tr m c đnh là YES
- Chown_uploads: n u tùy ch n này có giá tr là YES thì t t c nh ng t p tin đ c upload b i ng i dùng anonymous đ c s h u b i ng i dùng đ c ch ra trong chown_username, giá tr m c đnh là YES
- chown_username: ch ra ng i s h u nh ng t p tin đ c upload b i ng i dùng anonymous, giá tr m c đnh là root
- write_enable: Cung c p quy n ghi cho ng i dùng
H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 171/271 Ng n ch n host truy xu t vào ftp server: FTP Server k t h p v i tcp_wrappers đ th c thi c ch gi i h n host truy xu t vào FTP Server:
- B c 1: t tcp_wrappers=YES trong file vsftpd.conf
- B c 2: Mô t file thông tin c m host <x.y.z.t> trong file /etc/hosts.deny vsftpd:<host_address>
V. C u hình Virtual FTP Server
T o thêm 1 Virtual IP address (ví d đa ch 1.2.3.4), chép t p tin /etc/vsftpd/vsftpd.conf /etc/vsftpd/*.conf và thay đ i các thông tin sau:
- listen=YES
- listen_address=1.2.3.4 - connect_from_port_20=YES - anonymous_enable=YES - anon_root=/srv/ftp/knusper
- ftpd_banner=Welcome to FTP at knusper.wiremonkeys.org. Behave!
Ch nh s a file /etc/vsftpd/vsftpd.conf và thêm ch d n listen_address=<đa ch IP ban đ u>
Sau đó restart l i d ch v VSFTPD b ng l nh /etc/init.d/vsftpd restart.
V.1. Logging
- dual_log_enable: n u tùy ch n này có giá tr là YES và cùng v i xferlog_enable=YES thì vsftpd s vi t 2 t p tin đ ng th i là: m t log t ng thích v i wu-ftpd đ c ch ra trong xferlog_file và m t t p tin log chu n vsftpd đ c ch ra trong vsftpd_log_file, giá tr m c đnh là NO
- xferlog_enable: n u tùy ch n này có giá tr là YES thì vsftpd ghi l i nh ng k t n i và thông tin truy n t p tin vào t p tin log đ c ch ra trong tùy ch n vsftpd_log_file, giá tr m c đnh là NO - xferlog_file: ch ra t p tin log t ng thích v i wu-ftpd, giá tr m c đnh là /var/log/xferlog - vsftpd_log_file: ch ra t p tin log vsftpd, giá tr m c đnh là /var/log/vsftpd.log
V.2. Network
Nh ng tùy ch n sau đây ph n nh cách vsftpd t ng tác trong m ng:
- accept_timeout: Ch ra l ng th i gian m t client s d ng ch đ passive đ thi t l p k t n i, giá tr m c đnh là 60
- anon_max_rate: Ch ra t c đ truy n d li u t i đa cho ng i dùng anonymous. Tính b ng byte/second, giá tr m c đnh là 0 (không gi i h n t c đ truy n)
- connect_timeout: Ch ra l ng th i gian m t client s d ng ch đ active đ tr l i cho quá trình k t n i d li u. Tính b ng giây, giá tr m c đnh là 60
- data_connect_timeout: Ch ra kh i l ng th i gian truy n d li u t i đa. Tính b ng giây. Khi h t th i gian cho phép k t n i t client s b đóng, giá tr m c đnh là 300
- max_clients: Ch ra s client t i đa có th đ ng th i truy c p đ n server
H c ph n 4 - Ch ng ch qu n tr m ng Linux Trang 172/271