簡介
vsftpd是“very secure FTP daemon”的縮寫,是一個完全免費的、開發源代碼的ftp服務器軟件。
vsftpd,它是一款在Linux發行版中最受推崇的FTP服務器程序,小巧輕快,安全易用,支持虛擬用戶、支持帶寬限制等功能。
一、環境準備
centos7 64位
二、軟件下載與安裝
1)執行以下命令進行安裝:
yum -y install vsftpd
注意:
①是否使用sudo 權限執行請根據具體環境來決定;
②安裝之前可通過以下命令,先檢查是否已經安裝過 vsftpd :
rpm -qa | grep vsftpd
③配置文件默認在 /etc/vsftpd/vsftpd.conf 。
2)創建虛擬用戶
①選擇在根目錄或者用戶目錄下創建ftp文件夾: mkdir ftpfile ,例如創建目錄: /ftpfile
②添加匿名用戶:
useradd ftpuser -d /ftpfile -s /sbin/nologin
③修改ftpfile目錄的權限:
chown -R ftpuser.ftpuser /ftpfile
chmod -R 555 /ftpfile
注: vsftpd設置用戶目錄權限的時候,必須設置根目錄權限爲555,不能給太高的權限(例如:777),不然會導致登陸失敗。至於根目錄裏面的權限隨便設置。
④重設 ftpuser 密碼:
passwd ftpuser
例如本人輸入的密碼是: testcheck 。需要記住該密碼,後續登陸搭建好的 ftp 服務器會使用到。
注:是否使用sudo 權限執行需要根據系統的具體環境來決定。
⑤進入 /ftpfile 目錄,創建一個文件,用於後續校驗 ftp服務器能否正常訪問:
cd ftpfile/
vim index.txt
按下按鍵 i 進入 vim 的編輯模式,隨意輸入測試句子:
按下鍵盤左上角的 ESC 按鍵退出編輯模式,輸入 :wq 保存退出,該文件用於後面檢驗測試使用。
三、配置
1)創建 ftp 服務器白名單用戶文件:
cd /etc/vsftpd
sudo vim chroot_list
2)添加虛擬用戶:把上面新增的虛擬用戶,例如我在上面創建的是 ftpuser 添加到此配置文件中,後續需要使用到:
3)按下鍵盤左上角的 ESC 按鍵退出編輯模式,通過 vim 的 " :wq " 命令進行保存退出。
4)修改 selinux 安全配置:
sudo vim /etc/selinux/config
把其中的 SELINUX 修改爲 SELINUX=disabled 。
5)按下鍵盤左上角的 ESC 按鍵退出編輯模式,通過vim 的 " :wq " 命令進行保存退出。
注:如果下面驗證的時候出現 550 拒絕訪問錯誤請執行:
sudo setsebool -P ftp_home_dir 1
爲了確保上述配置生效,需重啓linux服務器,執行 reboot 命令進行重啓。如果後續步驟正常,則忽略此步驟。
6)修改 vsftpd 配置文件:
sudo vim /etc/vsftpd/vsftpd.conf
7)添加或更新配置 :
注: 配置屬性時,屬性值後面不能有任何空格!!!!注意檢查!!!我就在這一步卡了很久,因爲有一個屬性配置後面多了幾個空格,導致啓動 vsftpd 時報錯。請務必檢查清楚!!!
1)local_root=/ftpfile(當本地用戶登入時,將被更換到定義的目錄下,默認值爲各用戶的家目錄)
2)anon_root=/ftpfile(使用匿名登入時,所登入的目錄)
3)use_localtime=YES(默認是GMT時間,改成使用本機系統時間)
4)anonymous_enable=NO(不允許匿名用戶登錄)
5)local_enable=YES(允許本地用戶登錄)
6)write_enable=YES(本地用戶可以在自己家目錄中進行讀寫操作)
7)local_umask=022(本地用戶新增檔案時的umask值)
8)dirmessage_enable=YES(如果啓動這個選項,那麼使用者第一次進入一個目錄時,會檢查該目錄下是否有.message這個檔案,如果有,則會出現此檔案的內容,通常這個檔案會放置歡迎話語,或是對該目錄的說明。默認值爲開啓)
9)xferlog_enable=YES(是否啓用上傳/下載日誌記錄。如果啓用,則上傳與下載的信息將被完整紀錄在xferlog_file 所定義的檔案中。預設爲開啓。)
10)connect_from_port_20=YES(指定FTP使用20端口進行數據傳輸,默認值爲YES)
11)xferlog_std_format=YES(如果啓用,則日誌文件將會寫成xferlog的標準格式)
12)ftpd_banner=Welcome to mmall FTP Server(這裏用來定義歡迎話語的字符串)
13)chroot_local_user=NO(用於指定用戶列表文件中的用戶是否允許切換到上級目錄)
14)chroot_list_enable=YES(設置是否啓用chroot_list_file配置項指定的用戶列表文件)
15)chroot_list_file=/etc/vsftpd/chroot_list(用於指定用戶列表文件)
16)listen=YES(設置vsftpd服務器是否以standalone模式運行,以standalone模式運行是一種較好的方式,此時listen必須設置爲YES,此爲默認值。建議不要更改,有很多與服務器運行相關的配置命令,需要在此模式下才有效,若設置爲NO,則vsftpd不是以獨立的服務運行,要受到xinetd服務的管控,功能上會受到限制)
17)pam_service_name=vsftpd(虛擬用戶使用PAM認證方式,這裏是設置PAM使用的名稱,默認即可,與/etc/pam.d/vsftpd對應)
18)userlist_enable=YES(是否啓用vsftpd.user_list文件,黑名單,白名單都可以
19)pasv_min_port=61001(被動模式使用端口範圍最小值)
20)pasv_max_port=62000(被動模式使用端口範圍最大值)
21)pasv_enable=YES (pasv_enable=YES/NO(默認值爲YES)
#若設置爲YES,則使用PASV工作模式;若設置爲NO,則使用PORT模式。默認值爲YES,即使用PASV工作模式。
FTP協議有兩種工作方式:PORT方式和PASV方式,分別表示主動式和被動式。
1)PORT(主動)方式的連接過程是:客戶端向服務器的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路。
當需要傳送數據時,客戶端在命令鏈路上用 PORT命令告訴服務器:“我打開了****端口,你過來連接我”。於是服務器從20端口向客戶端的****端口發送連接請求,建立一條數據鏈路來傳送數據。需傳輸數據時,FTP服務器主動發送連接請求。
2)PASV(被動)方式的連接過程是:客戶端向服務器的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路。
當需要傳送數據時,服務器在命令鏈路上用 PASV命令告訴客戶端:“我打開了****端口,你過來連接我”。於是客戶端向服務器的****端口發送連接請求,建立一條數據鏈路來傳送數據。需傳輸數據時,FTP服務器被動接收連接請求。
從上面可以看出,兩種方式的命令鏈路連接方法是一樣的,而數據鏈路的建立方法就完全不同。而FTP的複雜性就在於此。
8)修改完 vsftpd 配置文件後,需要重啓服務,讓配置生效,也可以檢查配置是否有問題,如果出現 500 錯誤,記得檢查配置文件中的屬性值後面是否有多餘的空格。
9)防火牆配置。
①配置 iptables 配置文件:
sudo vim /etc/sysconfig/iptables
②將以下配置添加到防火牆中:
#vsftpd
-A INPUT -p TCP --dport 61001:62000 -j ACCEPT
-A OUTPUT -p TCP --sport 61001:62000 -j ACCEPT
-A INPUT -p TCP --dport 20 -j ACCEPT
-A OUTPUT -p TCP --sport 20 -j ACCEPT
-A INPUT -p TCP --dport 21 -j ACCEPT
-A OUTPUT -p TCP --sport 21 -j ACCEPT
③按下鍵盤左上角的 ESC 按鍵退出編輯模式,通過vim 的 " :wq " 命令進行保存退出。
④執行命令重啓防火牆服務,讓配置生效:
sudo service iptables restart
四、校驗
1)重啓 vsftpd 服務:
sudo service vsftpd restart
2)執行 ifconfig 查看運行 vsftpd 服務器的 ip 地址:
3)根據上面查詢到的 ip 地址,如本人的centos系統的 ip 地址爲 192.168.56.101 ,打開瀏覽器進行訪問 ftp://192.168.56.101 。 需要根據個人系統的具體ip輸入,不能生硬照搬:
4)輸入之前創建的 ftp 匿名用戶賬戶和密碼,參加上面第二大步驟 軟件下載與安裝 中創建的虛擬用戶和密碼,例如我的是:
用戶名 : ftpuser
密 碼 : testcheck
5)如果可以正常跳轉到如下頁面,表示配置 FTP 服務器成功:
6)除此之外,我們還可以通過ftp客戶端軟件進行校驗。
例如:cuteftp、filezilla、viperftp、flashftp、leapftp等進行連接 ftp 服務器,進行文件上傳、下載來驗證。
附vsftpd常用命令
啓動:sudo service vsftpd start
關閉:sudo service vsftpd stop
重啓:sudo service vsftpd restart
參考鏈接:
vsftpd無法登陸:https://blog.bccn.net/%E9%9D%99%E5%A4%9C%E6%80%9D/61146
安裝步驟主要參考了慕課網實戰課程《Java從零到企業級電商項目實戰》的教學。