1. 程式人生 > >使用vsftpd服務傳輸檔案(匿名使用者認證、本地使用者認證、虛擬使用者認證)

使用vsftpd服務傳輸檔案(匿名使用者認證、本地使用者認證、虛擬使用者認證)

vsftpd是一款執行在Linux作業系統上的FTP服務程式,不僅完全開源而且免費,此外,還具有很高的安全性、傳輸速度,以及支援虛擬使用者驗證等其他FTP服務程式不具備的特點。

vsftd作為更加安全的檔案傳輸的服務程式,允許使用者以三種認證模式登入到FTP伺服器上。

  • 匿名開放模式: 是一種最不安全的認證模式,任何人都可以無需密碼驗證而直接登入到FTP伺服器。
  • 本地使用者模式
    是通過Linux系統的本地賬戶密碼資訊進行認證,相較於匿名開放模式更安全。但是如果被×××破解了賬戶的資訊,就可以暢通無阻登入FTP伺服器,從而完全控制整臺伺服器。
  • 虛擬使用者模式
    是這三種模式中最安全的一種認證模式,它需要為FTP服務單獨建立使用者資料庫檔案,虛擬出用來進行口令驗證的賬戶資訊,而這些賬戶資訊在伺服器系統中實際上是不存在的,僅供FTP服務程式進行認證使用。

    實驗環境

    FTP伺服器配置完yum倉庫後,安裝vsftpd服務程式 

匿名開放模式

vsftpd服務程式預設開啟了匿名開放模式,需要開啟匿名使用者的上傳、下載許可權,以及讓匿名使用者建立、刪除、更名檔案的許可權。真實環境不建議這樣配置。FTP伺服器匿名使用者對應的系統使用者是ftp。

anonymous_enable=YES / /允許匿名訪問
anon_upload_enable=YES //允許匿名使用者上傳檔案
anon_mkdir_write_enable=YES //允許匿名使用者建立目錄
anon_other_write_enable=YES//允許匿名使用者修改或刪除目錄
anon_umask=022 //設定匿名使用者上傳資料的許可權掩碼


service iptables stop               
setenforce 

在客戶端執行ftp命令連線到ftp伺服器,預設訪問FTP根目錄/var/ftp。基於安全性考慮,FTP根目錄的許可權不允許匿名使用者或其他使用者有寫入許可權(否則訪問時會報500錯誤)

/var/ftp目錄下預設建立了一個子資料夾pub,可以在匿名訪問時供上傳檔案使用,那就要確保匿名使用者ftp對該目錄擁有寫入許可權。


[[email protected]
drwxr-xr-x. 

客戶端測試:


yum install ftp -y                           

Connected to ).
)
Name (
 Please specify the password.
Password:                                                  Login successful. Remote system type  UNIX. Using binary mode to transfer files. ftp> ls  ). 150 Here comes the directory listing. -rw-r--r-- 1 0 0 7 Mar 26 02:42 ftp.txt drwxr-xr-x 2 14 0 4096 Feb 12 2013 pub 226 Directory send OK. ftp>  local: ftp.txt remote: ftp.txt 227 Entering Passive ). 150 Opening BINARY mode data connection ). 226 Transfer complete. 7 bytes received ) ftp> cd pub  250 Directory successfully changed. ftp> put 123.txt  local: 123.txt remote: 123.txt 227 Entering Passive ). 150 Ok to send data. 226 Transfer complete. 7 bytes sent ) ftp> ls  227 Entering Passive ). 150 Here comes the directory listing. -rw------- 1 14 50 7 Mar 26 02:44 123.txt 226 Directory send OK. ftp> mkdir data  257 "/pub/data" created ftp> quit  221 Goodbye.

本地使用者模式

之前用的是匿名開放模式,現在關了,然後開啟本地使用者模式。建立一個本地使用者zhangsan進行測試。

anonymous_enable=NO //禁止匿名訪問
local_enable=YES //允許本地使用者模式
write_enable=YES //設定可寫許可權
local_umask=022 //設定本地使用者模式建立檔案的umask值

在客戶端執行ftp命令連線到ftp伺服器,預設訪問的是該使用者的家目錄,而且該目錄的預設所有者、所屬組都是該使用者自己。

客戶端測試:

[[email protected] ~]# ftp 192.168.10.50
Connected to 192.168.10.50 (192.168.10.50).
220 (vsFTPd 2.2.2)
Name (192.168.10.50:root): zhangsan                         //zhangsan使用者登入
331 Please specify the password.
Password:                                                                    //輸入使用者的密碼
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

257 "/files" created

227 Entering Passive Mode (192,168,10,50,117,63).
150 Here comes the directory listing.
drwxr-xr-x    2 500      500          4096 Mar 26 03:03 files
226 Directory send OK.

350 Ready for RNTO.
250 Rename successful.

227 Entering Passive Mode (192,168,10,50,147,228).
150 Here comes the directory listing.
drwxr-xr-x    2 500      500          4096 Mar 26 03:03 database
226 Directory send OK.
 250 Remove directory operation successful.  227 Entering Passive Mode (192,168,10,50,123,117). 150 Here comes the directory listing. 226 Directory send OK.  221 Goodbye.

需要注意的是7版本需要在配置檔案新增“allow_writeable_chroot=YES”引數才允許本地使用者登入。 //允許對禁錮的FTP根目錄執行寫入操作,而且不拒絕使用者的登入請求

1.禁錮宿主目錄

若還希望將所有的宿主目錄禁錮在其宿主目錄中,可以新增chroot_local_user配置項,否則使用者將能夠任意切換到伺服器的/var/、/etc/、/boot/等宿主目錄以外的資料夾,這樣一來便存在安全隱患。

chroot_local_user=YES //禁錮宿主目錄

客戶端測試:


550 Failed to change directory.

550 Failed to change directory.

221 Goodbye.
2.黑白名單

然而當使用root管理員登入後,系統提示如下錯誤資訊:


Connected to ).
)
Name (以root使用者登入
 Permission denied.
Login failed.

這是因為vsftpd服務程式所在的目錄中預設存放著一個名為“使用者名稱單”的檔案user_list,預設userlist_deny=YES,所以這個名單上出現的名字將不允許登陸到ftp伺服器,也就是黑名單。

[[email protected] ~]# cd /etc/vsftpd/
[[email protected] vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
[[email protected] vsftpd]# vim user_list               //檢視user_list檔案

#



  root bin daemon adm lp sync //這些使用者預設不允許登入ftp伺服器 shutdown halt mail news uucp operator games nobody
虛擬使用者模式
第1步:

建立用於進行FTP認證的使用者資料庫檔案,其中奇數行為賬戶名,偶數行為密碼。


[[email protected]

rose
abc123
jack
abc123

[[email protected]
vuser.db: Berkeley DB (Hash, version , native byte-order)
[[email protected]
[[email protected]
第2步:

建立vsftpd服務程式用於儲存檔案的根目錄以及虛擬使用者對映的系統本地使用者。FTP服務用語儲存檔案的根目錄指的是,當虛擬使用者登入後訪問的預設位置。

第3步:

建立用於支援虛擬使用者的PAM檔案vfstpd.vu,其中“db=”引數是使用db_load命令生成的賬戶密碼資料庫檔案的路徑。



auth required pam_userdb.so db=/etc/vsftpd/vuser 
account required pam_userdb.so db=/etc/vsftpd/vuser 
第4步:

在vsftpd服務程式的主配置檔案中通過pam_service_name引數將pam認證檔案的名稱修改為vsftpd.vu,再新增 guest_enable、guest_username引數。

anonymous_enable=NO //禁止匿名訪問
guest_enable=YES //開啟虛擬使用者模式
guest_username=virtual //指定虛擬使用者賬戶
pam_service_name=vsftpd.vu //指定PAM檔案

第5步:

為虛擬使用者設定不同的許可權。先建立虛擬使用者不同許可權的配置檔案的存放路徑,在這個路徑下再分別建立rose和jack命名的檔案。

第6步:

再次修改vsftpd主配置檔案,通過新增user_config_dir引數定義這兩個虛擬使用者不同許可權的配置檔案所存放的路徑,重啟vsftpd服務。

user_config_dir=/etc/vsftpd/vu_dir //單獨使用者配置檔案

客戶端測試:


Connected to ).
)
Name (
 Please specify the password.
Password:                        Login successful. Remote system type  UNIX. Using binary mode to transfer files. ftp> put anaconda-ks.cfg  local: anaconda-ks.cfg remote: anaconda-ks.cfg ). 150 Ok to send data. 226 Transfer complete. 1498 bytes sent ) ftp> quit 221 Goodbye.

[[email protected]
總用量 
-rw-r--r--.