Vsftpd檔案傳輸服務(三種認證模式:匿名開放 、本地使用者、虛擬使用者)
FTP協議有兩種工作模式:
1. 主動模式: FTP伺服器主動向客戶端發起連線請求;
2. 被動模式: FTP伺服器等待客戶端發起連線請求(預設模式);
vsftpd的三種認證模式
1. 匿名開放模式:
它是一種最不安全的認證模式,任何人都可以無需密碼驗證而直接登入到FTP伺服器;2. 本地使用者模式
它是通過Linux系統本地的賬戶密碼資訊進行認證的模式,相較於匿名開放模式更安全,而且配置起來也很簡單。但是若被惡意使用者破解了賬戶的資訊,就可以暢通無阻地登入FTP伺服器,從而完全控制伺服器;3. 虛擬使用者模式
它是三種模式中最安全的一種認證模式,它需要為FTP服務單獨建立使用者資料庫檔案,虛擬出的使用者進行口令驗證的賬戶資訊,而這些賬戶資訊在伺服器系統上並不存在,僅供FTP伺服器進行認證使用。
一、匿名開放模式
- 修改vsftpd.conf配置檔案
......
anonymous_enable=YES //允許匿名訪問模式
......
anon_upload_enable=YES //啟用,允許匿名使用者上傳檔案
anon_mkdir_write_enable=YES //啟用,允許匿名使用者建立目錄
新增下面引數
anon_other_write_enable=YES //允許匿名使用者修改目錄名稱或刪除目錄
- 啟動服務
chkconfig vsftpd on
service vsftpd start
- 修改ftp目錄許可權
chown ftp:ftp /var/ftp/pub chmod 777 /var/ftp/pub
二、本地使用者模式 centos 7.4系統下
- 修改vsftpd.conf配置檔案
......
anonymous_enable=NO //禁止匿名訪問模式
local_enable=YES //允許本地使用者模式
write_enable=YES //設定可寫許可權
local_umask=022 //本地使用者建立檔案的umask值
userlist_enable=YES //啟動“禁止名單”,名單檔案為ftpusers和user_list
userlist_deny=YES //開啟使用者作用名單檔案功能chroot_local_user=YES //chroot_local_user 是否將所有使用者限制在主目錄,YES為啟用 NO禁用.(該項預設值是NO,即在安裝vsftpd後不做配置的話,ftp使用者是可以向上切換到要目錄之外的)
chroot_list_enable=YES //chroot_list_enable #是否啟動限制使用者的名單 YES為啟用 NO禁用(包括註釋掉也為禁用)
chroot_list_file=/etc/vsftpd/chroot_list //#是否限制在主目錄下的使用者名稱單,至於是限制名單還是排除名單,這取決於chroot_local_user的值,
local_root=/var/zxcfile //本地使用者登入目錄
- 建立本地使用者zxc
useradd -s /sbin/nologin zxc//建立使用者
passwd zxc //設定密碼,輸入兩次
2、對主目錄授權 (不然連結不了,命令提示符顯示 錯誤:500 OOPS: cannot change directory:/home/xxx 500 OOPS: child died)chown ftp:ftp /var/zxcfile
chmod 755 /var/zxcfile
vi /etc/vsftpd/chroot_list // 配置檔案中chroot_list_enable=YES 和chroot_local_user=YES 那麼不在chroot_list_file=/etc/vsftpd/chroot_list 檔案中的使用者表示鎖定在該使用者的主目錄下,不能切換目錄。
- 新增chroot_list檔案
讓我們舉個例子:
假設有ftp1, ftp2兩個ftp使用者, 計劃讓ftp1使用者鎖定在主目錄下,不允許切換到其他目錄, 但是允許ftp2使用者自由切換目錄,則可以分如下兩種方式實現:
方式一:
令:
chroot_local_user=YES
chroot_list_enable=YES
/etc/vsftpd/chroot_list名單列表為:
ftp2
解釋:chroot_local_user=YES將所有使用者限定在主目錄內,chroot_list_enable=YES表示要啟用chroot_list_file, 因為chroot_local_user=YES,即全體使用者都被“限定在主目錄內”,所以總是作為“例外列表”的chroot_list_file這時列出的是那些“不會被
- 重啟服務
systemctl restart vsftpd.service
5. 測試
三、虛擬使用者模式
- 建立ftp使用者資料庫檔案
cd /etc/vsftpd/ //進入目錄
vim vuser //建立ftp使用者資料庫檔案,奇數行為使用者名稱,偶數行為密碼
test
123123
tom
123123
- 對vuser檔案進行加密轉換為資料庫檔案
db_load -T -t hash -f vuser vuser.db //轉換為資料庫檔案
chmod 600 vuser.db //修改許可權不讓其他使用者檢視
- 建立vsftpd服務程式使用者儲存檔案的根目錄以及虛擬使用者對映的系統本地使用者
useradd -d /opt/vuser -s /sbin/nologin vuser
- 建立使用者支援虛擬使用者的PAM認證模組檔案
vim /etc/pam.d/vsftpd.vu
//新增以下兩行資料
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
- 修改vsftpd服務程式的主配置檔案
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO //禁止匿名開放模式
local_enable=YES //允許本地使用者
guest_enable=YES //開啟虛擬使用者
guest_username=vuser //指定虛擬使用者為vuser
pam_service_name=vsftpd.vu //指定PAM檔案
- 重啟服務
service vsftpd restart
7. 測試
客戶端使用虛擬賬戶tom進行登入,可以正常登入
一、如果你的ftp使用者登陸目錄預設的是不是在 /home/ftp下,出現了500 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list
出錯原因:使用者沒有變更根目錄的許可權。
ftp使用者預設的根目錄是/home/ftp,如果要切換登陸目錄,需要給予許可權
解決方案
1、開啟/etc/vsftpd/vsftpd.conf,做如下配置:
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
2、在/etc/vsftpd下新建chroot_list,加入登陸使用者的名字
然後再到/etc/vsftpd目錄下新建chroot_list 檔案 並新增允許訪問的使用者
二、參考