Linux環境下安裝配置vsftpd服務(三種認證模式)


    

一、FTP簡介

文件傳輸協議(英文:File Transfer Protocol,縮寫:FTP)是用於在網絡上進行文件傳輸的一套標准協議。它工作於網絡傳輸協議的應用層,使用客戶/服務器模式,主要是用來在服務器與客戶端之間進行數據傳輸。FTP 其實是以 TCP 封包的模式進行服務器與客戶端計算機之間的聯機,當聯機建立后,使用者可以在客戶端端連上 FTP 服務器來進行文件的下載與上傳,此外,也可以對 FTP 服務器上面的文檔進行管理等。

FTP傳輸模式
文件傳輸協議(File Transfer Protocol,FTP),基於該協議FTP客戶端與服務端可以實現共享文件、上傳文件、下載文件。
FTP基於C/S模式,FTP客戶端與服務器端有兩種傳輸模式,分別是FTP主動模式、FTP被動模式(默認的工作模式)。主被動模式均是以FTP服務器端為參照。

FTP主動模式:客戶端從一個任意的端口N(N>1024)連接到FTP服務器的port 21命令端口,客戶端開始監聽端口N+1,並發送FTP命令“port N+1”到FTP服務器,FTP服務器以數據端口(20)連接到客戶端指定的數據端口(N+1)。

    

FTP被動模式:客戶端從一個任意的端口N(N>1024)連接到FTP服務器的port 21命令端口,客戶端開始監聽端口N+1,客戶端提交 PASV命令,服務器會開啟一個任意的端口(P >1024),並發送PORT P命令給客戶端。客戶端發起從本地端口N+1到服務器的端口P的連接用來傳送數據。

    

在企業實際環境中,如果FTP客戶端與FTP服務端均開放防火牆,FTP需以主動模式工作,這樣只需要在FTP服務器端防火牆規則中,開放20、21端口即可。

環境准備

屬性 FTP服務端 FTP客戶端
節點 wencheng-1 windows10
系統 CentOS Linux release 7.5.1804 (Minimal) windows10 企業版
內核 3.10.0-862.el7.x86_64 windows10 企業版2019 x64
IP地址 172.16.70.185 172.16.70.50
SELinux setenforce 0 | disabled  

FTP服務端操作步驟

  • 1.服務端安裝vsftpd服務。
[root@wencheng-1 ~]# yum install -y vsftpd
[root@wencheng-1 ~]# rpm -qa | grep vsftpd
vsftpd-3.0.2-28.el7.x86_64

[root@wencheng-1 ~]# rpm -ql vsftpd 
/etc/pam.d/vsftpd    # vsftpd 使用PAM模塊時的配置文件,主要做認證功能
/etc/vsftpd/ftpusers    # 用戶登錄黑名單,拒絕ftpusers列表內的用戶登錄vsftpd,一行一個賬號
/etc/vsftpd/user_list    # 默認為用戶登錄黑名單,拒絕user_list列表內的用戶登錄vsftpd,一行一個賬號,這個
配置是否能夠生效與 vsftpd.conf 內的參數 userlist_enable, userlist_deny 有關
/etc/vsftpd/vsftpd.conf    # vsftpd 服務器的主配置文件,配置格式使用 [參數=設定值] 來設定,注意,等號兩邊不能有空白
/etc/vsftpd/vsftpd_conf_migrate.sh    # 遷移腳本
/usr/sbin/vsftpd    # vsftpd命令執行腳本文件
/var/ftp    # 匿名用戶訪問根目錄

[root@wencheng-1 ~]# systemctl start vsftpd
[root@wencheng-1 ~]# ps -ef | grep vsftpd
root      10988      1  0 16:20 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root      10990   1583  0 16:21 pts/1    00:00:00 grep --color=auto vsftpd

[root@wencheng-1 ~]# ps -ef | grep vsftpd
root      10988      1  0 16:20 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root      10992   1583  0 16:21 pts/1    00:00:00 grep --color=auto vsftpd

[root@wencheng-1 ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

 注意:從現在開始,凡是涉及到服務的配置,就要考慮防火牆和SELinux的因素,很多教程和書籍上都是直接關閉防火牆和selinux,雖然這樣在學習階段可以避免干擾,但是這樣非常不安全。另外凡是配置了服務,都要加入開機啟動中,讓其每次重啟自動生效。

  •  2.服務端修改配置文件/etc/vsftpd/vsftpd.conf
[root@wencheng-1 ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
[root@wencheng-1 ~]# grep -Ev "^$|#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf

[root@wencheng-1 ~]# cat /etc/vsftpd/vsftpd.conf    # 默認配置文件詳解
# 默認匿名用戶配置
anonymous_enable=YES           # 開啟匿名用戶訪問;

# 默認本地用戶配置
local_enable=YES               # 啟用本地系統用戶訪問;
local_umask=022                # 本地用戶創建文件及目錄默認權限掩碼;

# 默認全局配置
write_enable=YES               # 本地系統用戶寫入權限;
dirmessage_enable=YES          # 打印目錄顯示信息,通常用於用戶第一次訪問目錄時,信息提示;
xferlog_enable=YES             # 啟用上傳/下載日志記錄; 
connect_from_port_20=YES       # FTP使用20端口進行數據傳輸;
xferlog_std_format=YES         # 日志文件將根據xferlog的標准格式寫入;
listen=NO                      # Vsftpd不以獨立的服務啟動,通過Xinetd服務管理,建議改成YES;
listen_ipv6=YES                # 啟用IPV6監聽;
pam_service_name=vsftpd        # 登錄FTP服務器,依據/etc/pam.d/vsftpd中內容進行認證;
userlist_enable=YES            # Vsftpd.user_list和ftpusers配置文件里用戶禁止訪問FTP;
tcp_wrappers=YES               # 設置vsftpd與tcp wrapper結合進行主機的訪問控制,Vsftpd服務器檢查/etc/hosts.allow 和/etc/hosts.deny中的設置,
                   來決定請求連接的主機,是否允許訪問該FTP服務器。
  • 3.vsftpd三種認證模式

  vsftpd作為更加安全的文件傳輸的服務程序,允許用戶以三種認證模式登錄到FTP服務器上:匿名開放模式、本地用戶模式、虛擬用戶模式。實際生產環境中虛擬用戶模式用的較多。

  首先要在防火牆添加ftp,20,21端口。

# firewalld 添加ftp,20,21端口
[root@wencheng-1 ~]# firewall-cmd --zone=public --add-service=ftp --permanent
success
[root@wencheng-1 ~]# firewall-cmd --zone=public --add-port=20/tcp --permanent
success
[root@wencheng-1 ~]# firewall-cmd --zone=public --add-port=21/tcp --permanent
success

[root@wencheng-1 ~]# firewall-cmd --zone=public --list-ports    # 查看firewalld開放的端口
20/tcp 21/tcp
[root@wencheng-1 ~]# firewall-cmd --get-services | grep -o 'ftp'  # 查看firewalld開放的協議
ftp

[root@wencheng-1 ~]# systemctl restart firewalld
  • 3.1 匿名開放模式:任何人都可以無需密碼驗證而直接登錄到FTP服務器,是一種最不安全的認證模式。
[root@wencheng-1 ~]# vim /etc/vsftpd/vsftpd.conf
# 全局配置
write_enable=YES               # 本地系統用戶寫入權限;
local_umask=022                # 本地用戶創建文件及目錄默認權限掩碼;
dirmessage_enable=YES          # 打印目錄顯示信息,通常用於用戶第一次訪問目錄時,信息提示;
xferlog_enable=YES             # 啟用上傳/下載日志記錄; 
connect_from_port_20=YES       # FTP使用20端口進行數據傳輸;
xferlog_std_format=YES         # 日志文件將根據xferlog的標准格式寫入;
listen=NO                      # Vsftpd不以獨立的服務啟動,通過Xinetd服務管理,建議改成YES;
listen_ipv6=YES                # 啟用IPV6監聽;
pam_service_name=vsftpd        # 登錄FTP服務器,依據/etc/pam.d/vsftpd中內容進行認證;
userlist_enable=YES            # Vsftpd.user_list和ftpusers配置文件里用戶禁止訪問FTP;
tcp_wrappers=YES               # 設置vsftpd與tcp wrapper結合進行主機的訪問控制,Vsftpd服務器檢查/etc/hosts.allow 和/etc/hosts.deny中的設置,
                   來決定請求連接的主機,是否允許訪問該FTP服務器。

# 本地用戶配置
local_enable=YES               # 啟用本地系統用戶訪問;
local_umask=022                # 本地用戶創建文件及目錄默認權限掩碼;
local_root=/data/ftpdata    # 修改本地用戶登錄時訪問的目錄路徑

# 匿名用戶訪問配置(最大權限)
anonymous_enable=YES           # 開啟匿名用戶訪問;
anon_umask=022          # 匿名用戶上傳文件的umask值
anon_upload_enable=YES      # 允許匿名用戶上傳文件
anon_mkdir_write_enable=YES   # 允許匿名用戶創建目錄
anon_other_write_enable=YES     # 允許匿名用戶修改目錄名稱或刪除目錄
anon_root=/data/ftpdata      # 修改匿名用戶登錄時訪問的目錄路徑

注:工作中,匿名用戶只是只讀訪問,寫的權限也沒有的。

[root@wencheng-1 ~]# ls -l /data/ftpdata
drwxr-xr-x. 2 root root 18 Mar 25 16:26 ftppub
[root@wencheng-1 ~]# ls -ld /data/ftpdata
drwxr-xr-x. 3 root root 17 Mar 25 14:53 /data/ftpdata

# 修改目錄權限
[root@wencheng-1 ~]# chmod o+w /data/ftpdata/ftppub
# 修改目錄屬主
[root@wencheng-1 ~]# chown ftp /data/ftpdata/ftppub/ -R
[root@wencheng-1 ~]# ls -ld /data/ftpdata/ftppub/
drwxr-xrwx. 2 ftp root 18 Mar 25 16:26 /data/ftpdata/ftppub

[root@wencheng-1 ~]# systemctl restart vsftpd

 3.1.1 匿名訪問測試。

Win10測試訪問ftp路徑。

    

 並能執行上傳/下載/刪除操作。

     

FTP服務端查看。

    

  • 3.2 本地用戶模式:是通過Linux系統本地的賬戶密碼信息進行認證的模式。如果被黑客破解了賬戶信息,就可以暢通無阻地登錄FTP服務器,從而完全控制整台服務器。

   a.將anonymous_enable=YES改為NO,即關閉了匿名模式,此時就不能在使用匿名模式登陸了。

   b.另外前面新加的與匿名配置參數可以保留,也可以直接刪除,只要總開關anonymous_enable關閉了就禁用了匿名登錄。

[root@wencheng-1 ~]# vim /etc/vsftpd/vsftpd.conf
# 全局配置
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

# 本地用戶配置
local_enable=YES
local_umask=022
local_root=/data/ftpdata

# 匿名用戶設置
anonymous_enable=NO    # 僅修改此項為NO
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_root=/data/ftpdata

[root@wencheng-1 ~]# systemctl restart vsftpd

3.2.1 此時已需要賬號密碼登錄。

    

3.2.2 添加一個ftp用戶並創建密碼,用來登錄ftp服務器。

[root@wencheng-1 ~]# useradd ftpuser -s /sbin/nologin
[root@wencheng-1 ~]# passwd ftpuser
Changing password for user ftpuser.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.

[root@wencheng-1 ~]# grep ftpuser /etc/passwd
ftpuser:x:1000:1000::/home/ftpuser:/sbin/nologin

 3.2.3 再次嘗試訪問ftppub目錄。

    

    

  • 3.3 虛擬用戶模式:需要為FTP服務單獨 建立用戶數據庫文件,虛擬出用來進行口令驗證的賬戶信息,而這些賬戶信息在 服務器系統中實際上是不存在的,僅供 FTP 服務程序進行認證使用。這樣,即使 黑客破解了賬戶信息也無法登錄服務器,從而有效降低了破壞范圍和影響。是三種模式中最安全的一種認證模式。

Vsftpd虛擬用戶企業案例配置步驟如下:

a.安裝Vsftpd虛擬用戶需用到的軟件及認證模塊:

[root@wencheng-1 ~]# yum install pam* libdb-utils libdb* --skip-broken -y

 b.創建包含用戶信息的文件vuser.list(文件名字任意取),文件中奇數行表示賬號名,偶數行表示密碼。

[root@wencheng-1 ~]# vim /etc/vsftpd/vuser.list
vuser1
123456
vuser2
123456

 c.生成Vsftpd虛擬用戶數據庫認證文件,設置權限700。

[root@wencheng-1 ~]# db_load -T -t hash -f /etc/vsftpd/vuser.list /etc/vsftpd/vsftpd_login.db
[root@wencheng-1 ~]# chmod 700 /etc/vsftpd/vsftpd_login.db

 d.配置PAM認證文件,/etc/pam.d/vsftpd行首加入如下兩行。

[root@wencheng-1 ~]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_bak
[root@wencheng-1 ~]# vim /etc/pam.d/vsftpd
auth      required        pam_userdb.so  db=/etc/vsftpd/vsftpd_login
account   required        pam_userdb.so  db=/etc/vsftpd/vsftpd_login

 e.所有Vsftpd虛擬用戶需要映射到一個系統用戶,該系統用戶不需要密碼,也不需要登錄,主要用於虛擬用戶映射使用。

[root@wencheng-1 ~]# useradd -d /data/ftpdir -s /sbin/nologin ftpvuser  # /data/ftpdir 為虛擬用戶默認訪問目錄
[root@wencheng-1 ~]# chmod -Rf /data/ftpdir/
[root@wencheng-1 ~]# ls -ld /data/ftpdir/
drwxr-xr-x. 2 ftpvuser ftpvuser 76 Mar 29 23:51 /data/ftpdir/

 f.創建虛擬用戶各自的配置文件

 假設我們要區別對待vuser1和vuser2,只允許vuser1查看文件,而允許vuser2上傳、創建、修改、查看、刪除文件。這種需求在企業真實環境中是常見的。

[root@wencheng-1 ~]# mkdir -p /etc/vsftpd/vsftpd_users_conf
[root@wencheng-1 ~]# cd /etc/vsftpd/vsftpd_users_conf
[root@wencheng-1 vsftpd_users_conf]# touch vuser1
[root@wencheng-1 vsftpd_users_conf]# vim vuser2
 anon_upload_enable=YES
 anon_mkdir_write_enable=YES
 anon_other_write_enable=YES

g.修改配置文件/etc/vsftpd/vsftpd.conf。

[root@wencheng-1 ~]# vim /etc/vsftpd/vsftpd.conf
# 全局配置
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

# 本地用戶配置
local_enable=YES
local_umask=022
#local_root=/data/ftpdata

# 虛擬用戶設置
anonymous_enable=NO    # 禁止匿名開放模式
guest_enable=YES      # 開啟虛擬用戶模式
guest_username=ftpvuser  # 映射虛擬用戶至系統用戶ftpvuser
allow_writeable_chroot=YES  # 允許對禁錮的FTP根目錄執行寫入操作,而且不拒絕用戶的登錄請求
user_config_dir=/etc/vsftpd/vsftpd_users_conf   # 設置虛擬用戶配置文件所在的目錄

[root@wencheng-1 ~]# systemctl restart vsftpd

測試通過Windows10客戶端資源管理器訪問登錄。

[root@wencheng-1 ~]# echo 11 > /data/ftpdir/Vfire1
[root@wencheng-1 ~]# echo 22 > /data/ftpdir/Vfire2
[root@wencheng-1 ~]# echo 33 > /data/ftpdir/Vfire3
[root@wencheng-1 ~]# ls /data/ftpdir/
Vfire1  Vfire2  Vfire3

客戶端操作步驟

測試賬號:vuser1;密碼:123456  

   

 無法執行刪除操作。

    

 測試賬號:vuser2;密碼:123456

    

 刪除成功。

    

 至此,已實現vsftpd服務的三種認證模式。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM