1. Giới thiệu:
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/IP, FTP cung cấp cơ chế truyền tin dƣới dạng tập tin (file) thông qua mạng TCP/IP, FTP là một dịch vụ đặc biệt vì nó dùng đến 02 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).
2. Mô hình hoạt động:
FTP có 02 chế độ hoạt động đó là: Active FTP (chế độ chủ động) và Passive FTP (chế độ thụ động).
Ở chế độ chủ động (active), máy khách FTP (FTP Client) dùng một 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).
Hình 22: Sơ đồ kết nối active FTP
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 đó.
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). Ở 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ở 02 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ở 01 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.
Từ 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).
Hình 23: 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.
Bƣớ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: Server trả lời 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ấn đề thứ hai là một số FTP client lại không hổ trợ chế độ thụ động. Khi đó cần phải có thêm trình FTP client. 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://.
3. 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 trên 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.
4. 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 1 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
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-file […] Xóa nhiều file
Mget mget remote-file […] 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-file […] 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
Disconnect 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
Chúng ta có thể sử dụng trình duyệt web để kết nối với FTP server theo cú pháp sau:
ftp://<địa chỉ FTP_server>. 5. Cài đặt và cấu hình FTP:
vsftpd (Very Secure FTP Daemon): là một phần mềm làm FTP server đƣợc tích hợp chung với hệ điều hành Linux. vsftpd đƣợc phát triển xoay quanh tính năng truy cập nhanh, ổn định và an toàn, hỗ trợ nhiều kết nối đồng thời đến FTP Server.
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…
/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ức thƣ mục pub cho ngƣời dung anonymous. Thƣ mục này chỉ có thể đọc, chỉ có root mới có khả năng ghi.
Sau khi cài đặt vsftpd hoặc sau khi chúng ta hay đổi cấu hình, ta phải kích hoạt dịch vụ FTP. Quá trình khởi động lại sẽ giúp cho daemon vsftpd cập nhật 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 #/etc/init.d/vsftpd start/stop/restart
Mặc định dịch vụ FTP sử dụng phần mềm vsftpd cho phép ngƣời dung anonymous, ngƣời dung cục bộ 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 dữ 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.
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, mặc định có giá trị 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 là 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ở 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ị 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.
userlist_enable: nếu tùy chọn này có giá trị YES thì những ngƣời dùng đƣợc chỉ ra trong tập tin 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.
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.
anon_other_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 xóa và đổi tên thƣ mục. 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.
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.
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.
chmod_enable: cho phép ngƣời dùng đƣợc phép thay đổi quyền hạn trên tập tin.
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.
local_root: chỉ ra thƣ mục vsftpd sau khi ngƣời dùng cục bộ login vào.