1、vsftpd的簡介
vsftpd是“very secure TTP daemon”的縮寫,是一個完全免費的、開放源代碼的ftp服務器軟件
2、特點
vsftpd是一款在Linux發行版中最受推崇的ftp服務器程序,小巧輕快,安全易用,支持虛擬用戶,支持帶寬限制等功能
3、安裝(關閉防火牆和setenforce 0)
檢查Linux系統是否安裝了vsftpd的命令:rpm -qa|grep vsftpd
卸載vsftpd的命令yum remove vsftpd
執行yum -y install vsftpd
[root@localhost ~]# yum -y install vsftpd
使用whereis vsftpd 查看安裝路徑
[root@localhost ~]#whereis vsftpd
注:
(1)是否使用sudo權限執行,請根據具體環境決定
(2)yum安裝vsftpd的默認配置文件在/etc/vsftpd/vsftpd.conf
4、創建虛擬用戶
(1)選擇在根目錄或用戶目錄下創建ftp文件目錄:mkdir ftpfile,如/ftpfile,
[root@localhost ~]# cd /
[root@localhost /]# mkdir ftpfile
[root@localhost /]# ls
通過ftp上傳時就會傳到這個文件夾下
(2)添加匿名用戶:useradd ftpuser -d /ftpfile/ -s /sbin/nologin #添加用戶沒有登錄機器的權限,只有上傳ftpfile有權限.
[root@localhost ftpfile]# useradd ftpuser -d /ftpfile/ -s /sbin/nologin
(3)修改ftpfile權限:chown -R ftpuser.ftpuser /ftpfile/ #把創建的用戶和創建的文件夾的權限對應上。-R表示遍歷,把用戶或者用戶組賦予到/ftpfile這個文件夾的權限上
[root@localhost ftpfile]# chown -R ftpuser.ftpuser /ftpfile/
查看該文件目錄的權限
此時的用戶名和用戶組的權限都為ftpuser
(4)重設ftpuser密碼:passwd ftpuser 123456(這里設置的密碼為123456)
[root@localhost /]# passwd ftpuser
(5)在vsftpd文件目錄下創建測試文件zxr.txt
[root@localhost /]# cd ftpfile/
[root@localhost ftpfile]# touch zxr.txt
[root@localhost ftpfile]# ls
zxr.txt
[root@localhost ftpfile]# vi zxr.txt
5、vsftpd服務器的配置
(1)vsftpd.conf文件
查看ftp服務器的安裝路徑
[root@localhost ftpfile]# whereis vsftpd
進入/etc/vsftpd/目錄下
[root@localhost ftpfile]# cd /etc/vsftpd/
編輯vsftpd.conf文件,把創建的用戶配置上
修改客戶端登錄,提示的歡迎信息(vi打開文件輸入/然后將banner輸入,再點擊enter鍵,能快速找到banner信息)
需要將注釋取消掉,改為自己想要的提示信息
還需要添加一些重要的屬性節點(注意不能有空格,復制下面要把注釋去掉)
local_root=/ftpfile #把本地賬戶指向創建的ftpfile文件夾
anon_root=/ftpfile #添加匿名賬戶訪問ftpfile目錄
use_localtime=YES #ftp服務器用到的是本地的時間
查找chroot_list節點
#chroot_local_user=YES #這個節點為是否鎖定創建的/ftpfile為根目錄,不解除注釋,默認為chroot_local_user=NO,鎖定創建的/ftpfile為根目錄,如果解除后設置為chroot_local_user=YES,那么就沒有鎖定創建的/ftpfile為根目錄,在命令行是可以訪問到/ftpfile的上級目錄,也就是系統的根目錄,這是絕對不安全的。所以這個節點不用解除注釋,或者解除更改為chroot_local_user=NO。
編輯該節點,解除
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
添加節點
allow_writeable_chroot=YES #加上這行解決了無法登陸的問題
兩條命令的注釋,將新建的用戶添上。
查找節點anonymous_enable
將該節點改為anonymous_enable=NO,不允許匿名用戶登錄
在該文件的末尾添加傳輸接口的范圍,最大接口61001,最大接口62000,限定嚴格的設置防火牆。
添加范圍
pasv_min_port=61001
pasv_max_port=62000
編輯完成保存退出。
(2)配置chroot_list文件
該文件目錄的節點在上一步配置vsftpd.conf文件中已解除注釋。
進入到/etc/vsftpd/目錄下創建文件chroot_list
[root@localhost vsftpd]# cd /etc/vsftpd/
[root@localhost vsftpd]# vi chroot_list
#用編輯器打開文件時,如果沒有這個文件,會默認自動創建一個該文件。
將用戶添加進入該新建的chroot_list文件中
保存退出。
(5)編輯文件/etc/selinux/config文件
[root@localhost vsftpd]# vi /etc/selinux/config
修改為SELINUX=disabled,如果不改的話,匿名賬戶無法創建文件文件或者文件目錄
:wq保存退出
注:如果在驗證的時候碰到550拒絕訪問請執行:
sudo setsebool -P ftp_home_dir 1
然后重啟Linux服務器,執行reboot命令。
6、vsftpd配置文件說明
sudo vi /etc/vsftpd/vsftpd.conf
vsftpd.conf文件的配置文件的添加或更新配置
本項目要用到的配置項:
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對應) userlist_enable=YES(是否啟用vsftpd.user_list文件,黑名單,白名單都可以
18)pasv_min_port=61001(被動模式使用端口范圍最小值)
19)pasv_max_port=62000(被動模式使用端口范圍最大值)
20)pasv_enable=YES(pasv_enable=YES/NO(YES)
若設置為YES,則使用PASV工作模式;若設置為NO,則使用PORT模式。默認值為YES,即使用PASV工作模式。
FTP協議有兩種工作方式:PORT方式和PASV方式,中文意思為主動式和被動式。
一、PORT(主動)方式的連接過程是:客戶端向服務器的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路。
當需要傳送數據時,客戶端在命令鏈路上用 PORT命令告訴服務器:“我打開了****端口,你過來連接我”。於是服務器從20端口向客戶端的****端口發送連接請求,建立一條數據鏈路來傳送數據。
二、PASV(被動)方式的連接過程是:客戶端向服務器的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路。
當需要傳送數據時,服務器在命令鏈路上用 PASV命令告訴客戶端:“我打開了****端口,你過來連接我”。於是客戶端向服務器的****端口發送連接請求,建立一條數據鏈路來傳送數據。
從上面可以看出,兩種方式的命令鏈路連接方法是一樣的,而數據鏈路的建立方法就完全不同。而FTP的復雜性就在於此。
)
7、防火牆的配置
防火牆的配置(這里采用的是centos6,用的還是Iptables文件設置防火牆)
(1)編輯防火牆文件
sudo vi /etc/sysconfig/iptables
(2)添加防火牆規則到配置文件中
-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
(3):wq保存退出
(4)sudo service iptables restart 執行命令重啟防火牆
8、vsftpd的驗證
(1)執行sudo service vsftpd restart
[root@localhost vsftpd]# service vsftpd restart
注:第一次啟動時Shutting down vsftpd是failed不用理會,因為這是重啟命令,保證Starting vsftpd for vsftpd是OK即代表vsftpd服務成功。、
service vsftpd stop #表示關閉vsftpd
(2)執行ifconfig查看運行vsftpd服務器的ip地址
(3)打開瀏覽器訪問:ftp://192.168.244.128/
(4)輸入之前創建的ftp匿名用戶賬號和密碼
例如:用戶名:ftpuser,密碼:123456
(5)看到如圖界面代表訪問成功
或者通過ftp客戶端軟件
例如:cuteftp、filezilla、viperftp、flashftp、leapftp等進行連接ftp服務器,進行上傳文件、下載驗證
9、vsftpd的常用命令
(1)啟動:sudo service vsftpd start
(2)關閉:sudo service vsftpd stop
(3)重啟:sudo service vsftpd restart
10、反復需要驗證ftp身份問題解決
在安裝vsftpd的時候如果在瀏覽器中一直提示需要身份驗證,此時在命令行行登錄會報530 Login incorrect錯誤。
在vsftpd的配置文件目錄/etc/vsftpd下中的vsftpd.conf文件中會配置有pam_service_name=vsftpd指定pam下的文件在該文件中內容如下:
其中可能導致登錄不成功(反復需要身份驗證)的問題主要在於以下兩個配置
問題配置一
在/etc/vsftpd/ftpusers這個文件中的用戶是禁止登錄的用戶,先檢查需要登錄的賬戶是否在該文件中,如果在,就將該賬戶注釋或者從該文件中去除
問題配置二:
該配置是允許用戶的shell為 /etc/shells文件內的shell命令時,才能夠成功
此處多留意有的系統里面的shells中的bash會多一些,比如
所以就需要查看當前系統shells文件中的內容與創建ftp用戶的時候,為了禁止ssh登錄,跟上的命令在shells中是否存在;
比如:我當前的shells文件內容為
但是我在創建ftp用戶的時候的命令為
[root@localhost ~]# useradd ftpuser -d /ftpfile/ -s /sbin/nologin
所以此時創建用戶后-s /sbin/nologin並不是有效的。
這時的解決方案為修改/etc/pam.d/vsftpd文件中的
auth required pam_shells.so
修改為auth required pam_nologin.so
最后重啟vsftpd
[root@localhost ~]# service vsftpd restart