1 ftp工作模式
主動模式下,FTP用戶端從任意的非特殊的端口(N > 1023)連入到FTP伺服器的指令端口--21端口,然後用戶端在N+1(N+1 >= 1024)端口監聽,并且通過N+1(N+1 >= 1024)端口發送指令給FTP伺服器。伺服器會反過來連接配接使用者本地指定的資料端口,比如20端口。
具體過程如下:
1, FTP伺服器指令(21)端口接受用戶端任意端口(用戶端初始連接配接)
2, FTP伺服器指令(21)端口到用戶端端口(>1023)(伺服器響應用戶端指令)
3, FTP伺服器資料(20)端口到用戶端端口(>1023)(伺服器初始化資料連接配接到用戶端資料端口)
4, FTP伺服器資料(20)端口接受用戶端端口(>1023)(用戶端發送ACK包到伺服器的資料端口)
總結:(在主動模式下,FTP用戶端随機開啟一個大于1024的端口N向伺服器的21号端口發起連接配接,然後開放N+1号端口進行監聽,并向伺服器發出PORT N+1指令。伺服器接收到指令後,會用其本地的FTP資料端口(通常是20)來連接配接用戶端指定的端口N+1,進行資料傳輸。)
被動模式FTP:
在被動方式FTP中,指令連接配接和資料連接配接都由用戶端,這樣就可以解決從伺服器到用戶端的資料端口的入方向連接配接被防火牆過濾掉的問題。當開啟一個FTP連接配接時,用戶端打開兩個任意的非特權本地端口(N >; 1024和N+1)。第一個端口連接配接伺服器的21端口,但與主動方式的FTP不同,用戶端不會送出PORT指令并允許伺服器來回連它的資料端口,而是送出PASV指令。這樣做的結果是伺服器會開啟一個任意的非特權端口(P >; 1024),并發送PORT P指令給用戶端。然後用戶端發起從本地端口N+1到伺服器的端口P的連接配接用來傳送資料。
3, FTP伺服器資料端口(>1023)接受用戶端端口(>1023)(用戶端初始化資料連接配接到伺服器指定的任意端口)
4, FTP伺服器資料端口(>1023)到用戶端端口(>1023)(伺服器發送ACK響應和資料到用戶端的資料端口)
總結:(在被動模式下,FTP用戶端随機開啟一個大于1024的端口N向伺服器的21号端口發起連接配接,同時會開啟N+1号端口。然後向伺服器發送PASV指令,通知伺服器自己處于被動模式。伺服器收到指令後,會開放一個大于1024的端口P進行監聽,然後用PORT P指令通知用戶端自己的資料端口是P。用戶端收到指令後,會通過N+1号端口連接配接伺服器的端口P,然後在兩個端口之間進行資料傳輸。)
主動模式與被動模式的區分判斷點在于,最終的資料連接配接是誰發起的,伺服器端發起的是主動模式,用戶端發起的是被動模式。
2 ftp安裝與管理執行個體
[root@localhost ~]# setenforce 0 #關閉selinux
[root@localhost ~]# service iptables stop #關閉iptables
[root@localhost ~]# yum install -y vsftpd #安裝vsftpd
[root@localhost ~]# service vsftpd start
[root@localhost ~]# chkconfig vsftpd on
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf #添加配置檔案
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@localhost ~]# useradd -s /sbin/nologin tom
[root@localhost ~]# useradd -s /sbin/nologin tom2
[root@localhost ~]# useradd -s /sbin/nologin tom3
[root@localhost ~]# touch /home/{tom,tom1,tom2}/test.py
[root@localhost ~]# service vsftpd restart
3 vsftpd配置參數解析
anonymous_enable=YES/NO(YES)
控制是否允許匿名使用者登入,YES 為允許匿名登入,NO 為不允許。預設值為YES。
write_enable=YES/NO(YES)
是否允許登陸使用者有寫權限。屬于全局設定,預設值為YES。
no_anon_password=YES/NO(NO)
若是啟動這項功能,則使用匿名登入時,不會詢問密碼。預設值為NO。
ftp_username=ftp
定義匿名登入的使用者名稱。預設值為ftp。
anon_root=/var/ftp
使用匿名登入時,所登入的目錄。預設值為/var/ftp。注意ftp目錄不能是777的權限屬性,即匿名使用者的家目錄不能有777的權限。
anon_upload_enable=YES/NO(NO)
如果設為YES,則允許匿名登入者有上傳檔案(非目錄)的權限,隻有在write_enable=YES時,此項才有效。當然,匿名使用者必須要有對上層目錄的寫入權。預設值為NO。
anon_world_readable_only=YES/NO(YES)
如果設為YES,則允許匿名登入者下載下傳可閱讀的檔案(可以下載下傳到本機閱讀,不能直接在FTP伺服器中打開閱讀)。預設值為YES。
anon_mkdir_write_enable=YES/NO(NO)
如果設為YES,則允許匿名登入者有新增目錄的權限,隻有在write_enable=YES時,此項才有效。當然,匿名使用者必須要有對上層目錄的寫入權。預設值為NO。
anon_other_write_enable=YES/NO(NO)
如果設為YES,則允許匿名登入者更多于上傳或者建立目錄之外的權限,譬如删除或者重命名。(如果anon_upload_enable=NO,則匿名使用者不能上傳檔案,但可以删除或者重命名已經存在的檔案;如果anon_mkdir_write_enable=NO,則匿名使用者不能上傳或者建立檔案夾,但可以删除或者重命名已經存在的檔案夾。)預設值為NO。
chown_uploads=YES/NO(NO)
設定是否改變匿名使用者上傳檔案(非目錄)的屬主。預設值為NO。
chown_username=username
設定匿名使用者上傳檔案(非目錄)的屬主名。建議不要設定為root。
anon_umask=077
設定匿名登入者新增或上傳檔案時的umask 值。預設值為077,則建立檔案的對應權限為700。
deny_email_enable=YES/NO(NO)
若是啟動這項功能,則必須提供一個檔案/etc/vsftpd/banner_emails,内容為email address。若是使用匿名登入,則會要求輸入email address,若輸入的email address 在此檔案内,則不允許進入。預設值為NO。
local_enable=YES/NO(YES)
控制是否允許本地使用者登入,YES 為允許本地使用者登入,NO為不允許。預設值為YES。
local_root=/home/username
當本地使用者登入時,将被更換到定義的目錄下。預設值為各使用者的家目錄。
本地使用者新增檔案時的umask 值。預設值為077。
file_open_mode=0755
本地使用者上傳檔案後的檔案權限,與chmod 所使用的數值相同。預設值為0666。
dirmessage_enable=YES/NO(YES)
如果啟動這個選項,那麼使用者第一次進入一個目錄時,會檢查該目錄下是否有.message這個檔案,如果有,則會出現此檔案的内容,通常這個檔案會放置歡迎話語,或是對該目錄的說明。預設值為開啟。
message_file=.message
設定目錄消息檔案,可将要顯示的資訊寫入該檔案。預設值為.message。
banner_file=/etc/vsftpd/banner
當使用者登入時,會顯示此設定所在的檔案内容,通常為歡迎話語或是說明。預設值為無。如果歡迎資訊較多,則使用該配置項。
ftpd_banner=Welcome to BOB's FTP server
這裡用來定義歡迎話語的字元串,banner_file是檔案的形式,而ftpd_banner 則是字元串的形式。預設為無。
chroot_list_enable=YES/NO(NO)
設定是否啟用chroot_list_file配置項指定的使用者清單檔案。預設值為NO。
chroot_list_file=/etc/vsftpd.chroot_list
用于指定使用者清單檔案,該檔案用于控制哪些使用者可以切換到使用者家目錄的上級目錄。
chroot_local_user=YES/NO(NO)
用于指定使用者清單檔案中的使用者是否允許切換到上級目錄。預設值為NO。
upload_enable=YES/NO(NO)
設定是否啟用ASCII 模式上傳資料。預設值為NO。
download_enable=YES/NO(NO)
設定是否啟用ASCII 模式下載下傳資料。預設值為NO
tcp_wrappers=YES/NO(YES)
設定vsftpd是否與tcp wrapper相結合來進行主機的通路控制。預設值為YES。如果啟用,則vsftpd伺服器會檢查/etc/hosts.allow 和/etc/hosts.deny 中的設定,來決定請求連接配接的主機,是否允許通路該FTP伺服器。這兩個檔案可以起到簡易的防火牆功能。
userlist_file=/etc/vsftpd.user_list
控制使用者通路FTP的檔案,裡面寫着使用者名稱。一個使用者名稱一行。
userlist_enable=YES/NO(NO)
是否啟用vsftpd.user_list檔案。
userlist_deny=YES/NO(YES)
決定vsftpd.user_list檔案中的使用者是否能夠通路FTP伺服器。若設定為YES,則vsftpd.user_list檔案中的使用者不允許通路FTP,若設定為NO,則隻有vsftpd.user_list檔案中的使用者才能通路FTP。
anon_max_rate=0
設定匿名登入者使用的最大傳輸速度,機關為B/s,0 表示不限制速度。預設值為0。
local_max_rate=0
本地使用者使用的最大傳輸速度,機關為B/s,0 表示不限制速度。預設值為0。
accept_timeout=60
設定建立FTP連接配接的逾時時間,機關為秒。預設值為60。
connect_timeout=60
PORT 方式下建立資料連接配接的逾時時間,機關為秒。預設值為60。
data_connection_timeout=120
設定建立FTP資料連接配接的逾時時間,機關為秒。預設值為120。
idle_session_timeout=300
設定多長時間不對FTP伺服器進行任何操作,則斷開該FTP連接配接,機關為秒。預設值為300 。
xferlog_enable= YES/NO(YES)
是否啟用上傳/下載下傳日志記錄。如果啟用,則上傳與下載下傳的資訊将被完整紀錄在xferlog_file 所定義的檔案中。預設為開啟。
xferlog_file=/var/log/vsftpd.log
設定日志檔案名和路徑,預設值為/var/log/vsftpd.log。
xferlog_std_format=YES/NO(NO)
如果啟用,則日志檔案将會寫成xferlog的标準格式,如同wu-ftpd 一般。預設值為關閉。
log_ftp_protocol=YES|NO(NO)
如果啟用此選項,所有的FTP請求和響應都會被記錄到日志中,預設日志檔案在/var/log/vsftpd.log。啟用此選項時,xferlog_std_format不能被激活。這個選項有助于調試。預設值為NO。
listen_port=21
設定FTP伺服器建立連接配接所監聽的端口,預設值為21。
connect_from_port_20=YES/NO
指定FTP使用20端口進行資料傳輸,預設值為YES。
ftp_data_port=20
設定在PORT方式下,FTP資料連接配接使用的端口,預設值為20。
pasv_enable=YES/NO(YES)
若設定為YES,則使用PASV工作模式;若設定為NO,則使用PORT模式。預設值為YES,即使用PASV工作模式。
pasv_max_port=0
在PASV工作模式下,資料連接配接可以使用的端口範圍的最大端口,0 表示任意端口。預設值為0。
pasv_min_port=0
在PASV工作模式下,資料連接配接可以使用的端口範圍的最小端口,0 表示任意端口。預設值為0。
listen=YES/NO(YES)
設定vsftpd伺服器是否以standalone模式運作。以standalone模式運作是一種較好的方式,此時listen必須設定為YES,此為預設值。建議不要更改,有很多與伺服器運作相關的配置指令,需要在此模式下才有效。若設定為NO,則vsftpd不是以獨立的服務運作,要受到xinetd服務的管控,功能上會受到限制。
max_clients=0
設定vsftpd允許的最大連接配接數,預設值為0,表示不受限制。若設定為100時,則同時允許有100個連接配接,超出的将被拒絕。隻有在standalone模式運作才有效。
max_per_ip=0
設定每個IP允許與FTP伺服器同時建立連接配接的數目。預設值為0,表示不受限制。隻有在standalone模式運作才有效。
listen_address=IP位址
設定FTP伺服器在指定的IP位址上偵聽使用者的FTP請求。若不設定,則對伺服器綁定的所有IP位址進行偵聽。隻有在standalone模式運作才有效。
setproctitle_enable=YES/NO(NO)
設定每個與FTP伺服器的連接配接,是否以不同的程序表現出來。預設值為NO,此時使用ps aux |grep ftp隻會有一個vsftpd的程序。若設定為YES,則每個連接配接都會有一個vsftpd的程序。
guest_enable= YES/NO(NO)
啟用虛拟使用者。預設值為NO。
guest_username=ftp
這裡用來映射虛拟使用者。預設值為ftp。
本文轉自super李導51CTO部落格,原文連結:http://blog.51cto.com/superleedo/1888542 ,如需轉載請自行聯系原作者