RHEL 5.2下vsftp配置全教程
原創FTP文件傳送協議(File Transfer Protocol,簡稱FTP),是一個用于從一臺主機到另送文件的協議。該協議的歷史可追溯到1971年(當時因特網尚處于實驗之中),不過至今仍然極為流行。
FTP在RFC 959中具體說明。HTTP和FTP都是文件傳送協議,它們有許多共同的特征,比如都運行在TCP之上等。不過這兩個應用層協議之間存在重要的差別。最重要的差別是FTP使用兩個并行的TCP連接,一個是控制連接,一個是數據連接。控制連接用于在客戶主機和服務器主機之間發送控制信息,例如用戶名和口令、改變遠程目錄的命令、取來或放回文件的命令。數據連接用于真正發送文件。在整個會話期間,FTP服務器必須維護關于用戶的狀態。具體地說,服務器必須把控制連接與特定的用戶關聯起來,必須隨用戶在遠程目錄樹中的游動跟蹤其當前目錄。為每個活躍的用戶會話保持這些狀態信息極大地限制了FTP能夠同時維護的會話數。無狀態的HTTP卻不必維護任何用戶狀態信息。FTP服務可以工作在主動模式(active)和被動模式(passive)二種模式下:
主動模式(一般FTP服務器默認模式):FTP客戶端開啟一個隨機選擇的TCP端口連接FTP服務器的21端口請求建立連接。當完成Three-Way Handshake后,連接就成功建立,但這僅是控制連接的建立。當兩端需要傳送數據的時候,客戶端通過命令通道用一個port command告訴服務器,客戶端可以用另一個TCP端口做數據通道。然后服務器用20端口和剛才客戶端所通知的TCP端口建立數據連接。注意:連接方向是從服務器到客戶端的,TCP分組中會有一個SYN flag。 然后客戶端會返回一個帶ACK flag的確認分組,并完成另一次的Three-Way Handshake 過程。這時候,數據連接才能成功建立。開始數據傳送。
被動模式:FTP客戶端開啟一個隨機選擇的TCP端口連接FTP服務器的21端口請求建立連接,完成控制連接的建立。當兩端需要傳送數據的時候,客戶端 通過命令通道發送一個PASV command給服務器,要求進入被動傳輸模式。然后 服務器像上述的主動模式第 2 步驟那樣,挑一個TCP端口,并用控制連接告訴 客戶端。 然后客戶端用另一個TCP端口連接剛才服務器告知的TCP端口來建立數據通道。此時分組中帶有SYN flag。服務器確認后回送一個ACK分組。并完成所有握手過程、成功建立數據通道,開始數據傳送。
目前可以實現FTP服務的軟件非常多,比如Windows平臺下的IIS、Serv-U,Linux平臺下的wuFTP、vsftp等。vsftp(Very Secure FTP)是一種在Unix/Linux中非常安全且快速穩定的FTP服務器,目前已經被許多大型站點所采用,vsftpd也是RHEL默認的ftp服務,本文主要講述vsftp相關配置方法。
一、安裝vsftp。
rpm -ivh vsftpd-2.0.5-12.el5.rpm |
安裝完成后,vsftpd配置文件為/etc/vsftpd/vsftpd.conf,通過以下命令可啟動vsftpd并將其設置為自動啟動。
service vsftpd restart |
二、第一個FTP站點。
vsftp在安裝完成并啟動后,即可使用。默認情況下可以使用匿名用戶,下圖中使用ftp命令進行。
1:使用ftp命令連接到ftp服務器。
2:因為目前使用匿名用戶連接到ftp服務器,所有輸入匿名用戶(一般ftp服務器匿名為anonymous,這里的ftp用戶是在安裝vsftp時自動創建的,該用戶也是vsftp的匿名用戶)。
在連接到vsftp后,其默認目錄為該用戶的家目錄,而ftp用戶的家目錄位于/var/ftp,所有。下圖是用系統其它用戶連接ftp服務器(如果在RHEL中開啟SELinux,需要運行以下命令set sebool -P ftp_home_dir=1)。
參數 |
說明 |
listen_address=ip address |
指定偵聽IP |
listen_port=port_value |
指定偵聽端口,默認21 |
anonymous_enable=YES |
是否允許使用匿名帳戶 |
local_enable=YES |
是否允許本地用戶登錄 |
nopriv_user=ftp |
指定vsftpd服務的運行帳戶,不指定時使用ftp |
write_enable=YES |
是否允許寫入 |
anon_upload_enable=YES |
匿名用戶是否可上傳文件 |
anon_mkdir_write_enable=YES |
匿名用戶是否建立目錄 |
dirmessage_enable=YES |
進入每個目錄是顯示歡迎信息,在每個目錄下建立.message文件在里面寫歡迎信息 |
xferlog_enable=YES |
上傳/下載文件時記錄日志 |
connect_from_port_20=YES |
是否使用20端口傳輸數據(是否使用主動模式) |
chown_uploads=YES、chown_username=whoever |
修改匿名用戶上傳文件的擁有者 |
xferlog_file=/var/log/vsftpd.log |
日志文件 |
xferlog_std_format=YES |
使用標準文件日志 |
idle_session_timeout=600 |
會話超時,客戶端連接到ftp但未操作 |
data_connection_timeout=120 |
數據傳輸超時 |
async_abor_enable=YES |
是否允許客戶端使用sync等命令 |
ascii_upload_enable=YES、ascii_download_enable=YES |
是否允許上傳/下載二進制文件 |
chroot_local_user=YES |
限制所有的本地用戶在自家目錄 |
chroot_list_enable=YES、chroot_list_file=/etc/vsftpd/chroot_list |
指定不能離開家目錄的用戶,將用戶名一個一行寫在/etc/vsftpd/chroot_list文件里,使用此方法時必須chroot_local_user=NO |
ls_recurse_enable=YES |
是否允許使用ls -R等命令 |
listen=YES |
開啟ipv4監聽 |
listen_ipv6=YES |
開啟ipv6監聽 |
pam_service_name=vsftpd |
使用pam模塊控制,vsftpd文件在/etc/pam.d目錄下 |
userlist_enable=YES |
此選項被激活后,vsftpd將讀取userlist_file參數所指定的文件中的用戶列表。當列表中的用戶登錄FTP服務器時,該用戶在提示輸入密碼之前就被禁止了。即該用戶名輸入后,vsftpd查到該用戶名在列表中,vsftpd就直接禁止掉該用戶,不會再進行詢問密碼等后續步聚 |
userlist_deny=YES |
決定禁止還是只允許由userlist_file指定文件中的用戶登錄FTP服務器。此選項在userlist_enable 選項啟動后才生效。YES,默認值,禁止文件中的用戶登錄,同時也不向這些用戶發出輸入密碼的提示。NO,只允許在文件中的用戶登錄FTP服務器 |
tcp_wrappers=YES |
是否允許tcp_wrappers管理 |
local_root=/home/ftp |
所有用戶的根目錄,,對匿名用戶無效 |
anon_max_rate |
匿名用戶的最大傳輸速度,單位是Byts/s |
local_max_rate |
本地用戶的最大傳輸速度,單位是Byts/s |
download_enable= YES |
是否允許下載 |
在上面所有參數中,只要涉及到上傳的參數在啟用后還需要對應本地目錄有寫入權限。
#p#
四、身份認證。
在上面的參數中,可以通過將anonymous_enable設置為NO禁止匿名用戶訪問。在禁止匿名用戶后,可通過以下方式的授權用戶:
本地用戶:以/etc/passwd中的用戶名為認證方式
虛擬用戶:支持將用戶名和口令保存在數據庫文件或數據庫服務器中。相對于FTP的本地用戶形式來說,虛擬用戶只是FTP服務器的專有用戶,虛擬用戶只能訪問FTP服務器所提供的資源,這大大增強系統本身的安全性。相對于匿名用戶而言,虛擬用戶需要用戶名和密碼才能獲取FTP服務器中的文件,增加了對用戶和下載的可管理性。對于需要提供下載服務,但又不希望所有人都可以匿名下載;既需要對下載用戶進行管理,又考慮到主機安全和管理方便的FTP站點來說,虛擬用戶是一種極好的解決方案
本地用戶在這里就不多介紹了,主要介紹實現虛擬用戶的二種方法:
1、使用本地數據文件:
生成虛擬用戶文件,建立/etc/vsftpd/vuser.txt文件,內容如下:
tonyzhang #虛擬用戶1 |
安裝生成數據庫rpm包:db4-utils。
rpm -ivh db4-utils-4.3.29-9.fc6.i386.rpm |
生成虛擬用戶數據庫。
db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.txt |
創建本地映射用戶,修改本地映射用戶家目錄權限。
useradd -d /var/ftp/vuserdir -s /sbin/nologin vuser |
修改pam認證文件/etc/pam.d/vsftpd,將原有內容注釋。
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vusers |
guest_enable=YES |
2、使用MySQL數據文件:
創建本地映射用戶。
useradd -s /sbin/nologin vuser |
修改/etc/vsfptd/vsftp.conf,增加以下內容。
guest_enable=YES |
安裝MySQL及相關軟件包。
|
在MySQL中建立數據庫及用戶表。
[root@polo ]# mysql -u root mysql -p |
|
在上述授權完成后,可通過下圖方法驗證授權是否成功。
#p#
編譯MySQL的PAM認證模塊。
首先需要下載(http://sourceforge.net/projects/pam-mysql)MySQL的PAM認證模塊源碼,使用tar命令解壓后,進行編譯。在編譯前需要安裝以下軟件包。
|
./configure |
編輯完成后可查看/lib/security目錄下是否已有對應pam模塊(如下圖)。
修改pam認證文件/etc/pam.d/vsftpd,將原有內容注釋。
auth required pam_mysql.so user=vuser passwd=123 host=localhost db=ftpvuser table=users usercolumn=name passwdcolumn=passwd crypt=2 |
上述二種虛擬用戶配置完成后,在通過以下步驟可針對每個虛擬用戶指定不同的配置文件。
1、修改/etc/vsfptd/vsftp.conf
user_config_dir=/etc/vsftpd/vuserconf |
2、在/etc/vsfptd/vsftp.vuserconf目錄下,以每個虛擬用戶的用戶名為名稱建立配置文件即可。
五、虛擬主機。
在默認情況下,vsftp不像IIS那樣可以在同一臺主機上建立多個ftp站點,不過并不是沒有法子讓vsftp在同一臺主機上建立多個ftp站點,方法如下:
1、添加一個虛擬IP地址(eth0的IP地址192.168.0.10)
ifconfig eth0:0 192.168.0.11/24 |
|
3、準備虛擬FTP服務器的配置文文件
cp /etc/vsfptd/vsftpd.conf /etc/vsfptd/vsftpd1.conf |
listen_address=192.168.0.10 |
listen_address=192.168.0.11 |
【編輯推薦】