天天看點

Linux安裝配置vsftpd

vsftpd(very secure ftp daemon,非常安全的FTP守護程序) 是一款運作在Linux作業系統上的FTP服務程式,不僅完全開源而且免費,此外,還具有很高的安全性、傳輸速度,以及支援虛拟使用者驗證等其他FTP服務程式不具備的特點。

vsftpd可用yum安裝:

yum install vsftpd

測試環境為RHEL8

一、有關配置檔案

/etc/vsftpd/vsftpd.conf:主配置檔案
/etc/vsftpd/ftpusers :禁止登陸vsftpd的使用者清單檔案。
/etc/vsftpd/user_list:禁止或允許使用vsftpd的使用者清單檔案。
/etc/pam.d/vsftpd : PAM認證檔案(此檔案中file=/etc/vsftpd/ftpusers字段,指明阻止通路的使用者來自/etc/vsftpd/ftpusers檔案中的使用者)
           

二、登入方式

1.匿名使用者登入

匿名使用者(anonymous,ftp)登陸後的主目錄:

/var/ftp

,此目錄一般為755權限,如果為777權限,則會出現錯誤資訊

匿名使用者的下載下傳目錄:

/var/ftp/pub

,匿名使用者一般在此目錄下工作,此目錄需設定777權根,必要時設定SBIT特殊權限(可使得使用者隻能上傳不能删除)

chmod 1777 /var/ftp

2.本地使用者登入

本地使用者登陸後的主目錄:該使用者在系統中的主目錄

3.虛拟使用者登入

虛拟使用者登陸後的主目錄:管理者指定的任意使用者的主目錄

三、主配置檔案常用參數說明

[[email protected] ~]#  vim  /etc/vsftpd/vsftpd.conf

#匿名使用者相關配置
anonymous_enable=NO  #是否允許匿名登入FTP伺服器,如果為YES,則使用者可通過使用者名ftp或anonymous來登入
anon_upload_enable=YES  #是否允許匿名使用者上傳檔案,當SELinux 為強制模式(enforcing )時,需檢查selinux中的allow_ftpd_anon_write, allow_ftpd_full_access規則是否開啟
anon_mkdir_write_enable=YES  # 是否允許匿名使用者建立目錄
anon_root=/var/ftp  #匿名使用者的FTP根目錄,預設為/var/ftp
anon_other_write_enable=YES	#是否開放匿名使用者的其他寫入權限(包括重命名、删除等操作權限)
anon_max_rate=0   #設定匿名使用者的最大傳輸速率,機關為B/s,值為0表示不限制
anon_umask=022	 #匿名使用者上傳檔案的umask值

#本地使用者相關配置
local_enable=YES  #是否允許本地使用者(即linux系統中的使用者帳号)登入FTP伺服器,當SELinux 為強制模式(enforcing )時,需檢查selinux中的ftp_home_dir規則是否開啟
write_enable=YES  # 是否允許本地使用者對FTP伺服器檔案具有寫權限,預設設定為YES允許
local_max_rate=0   #設定本地使用者的最大傳輸速率,機關為B/s,值為0時表示不限制
local_umask=022   #本地使用者上傳檔案的umask值,其中022和077最為常見

#虛拟使用者有關配置
guest_enable=YES    #設定啟用虛拟使用者功能
guest_username=vsftpduser    #指定虛拟使用者的宿主使用者
user_config_dir=/etc/vsftpd/vsftpduser    #指定虛拟使用者的配置檔案存放目錄,該目錄下儲存着單個虛拟使用者的配置檔案


#其他有關全局配置
dirmessage_enable=YES   #是否激活目錄歡迎資訊功能,一般歡迎資訊是通過該目錄下的.message檔案(使用者自己建立)獲得的
ftpd_banner=Welcome to blah FTP service.  #設定登陸顯示文字資訊

xferlog_enable=YES  # 是否開啟日志功能
xferlog_file=/var/log/xferlog  # 設定日志檔案存儲路徑,預設為/var/log/xferlog
xferlog_std_format=YES  # 設定日志檔案的标準格式,/var/log/xferlog 日志檔案使用的是xferlog_std_format标準

connect_from_port_20=YES  #資料傳輸端口開啟,注意確定ftp-data資料傳輸端口為20 

# 設定匿名使用者上傳檔案的屬主。注意,不推薦使用root使用者上傳檔案
#chown_uploads=YES
#chown_username=whoever

# 是否以ASCII方式傳輸資料。啟用ASCII方式傳輸資料,可能會導緻由"SIZE /big/file"方式引起的DoS攻擊
#ascii_upload_enable=YES
#ascii_download_enable=YES

idle_session_timeout=600  #設定空閑或者無操作時自動退出登陸的時間
data_connection_timeout=120  #設定資料連接配接逾時時間
ls_recurse_enable=YES # 是否允許遞歸查詢。
listen=NO   #是否開啟監聽(不支援ipv6),如開啟,則由vsftpd自己監聽ipv4端口
listen_ipv6=YES   #是否開啟ipv6端口監聽
listen_address=IP   #設定要監聽的IP位址
listen_port=端口号  #設定FTP服務的監聽端口
max_client=0    #設定FTP伺服器所允許的最大用戶端連接配接數,值為0時表示不限制
max_per_ip=0    #設定對于同一IP位址允許的最大用戶端連接配接數,值為0時表示不限制

chroot_local_user=YES  # 是否将使用者鎖定在自身的FTP目錄。當chroot_local_user=YES,表示鎖定開啟。
chroot_list_enable=YES  # 當chroot_list_enable=YES則表示/etc/vsftpd/chroot_list清單中的使用者鎖定在自身的FTP目錄,否則,清單以外的使用者鎖定在自身的FTP目錄。
chroot_list_file=/etc/vsftpd/chroot_list  # 控制使用者是否可以通路自身FTP目錄以外的目錄,檔案内為使用者清單

deny_email_enable=YES # 郵件黑名單設定
banned_email_file=/etc/vsftpd/banned_emails  # 郵件黑名單存儲路徑

pam_service_name=vsftpd  # 設定PAM可插拔認證子產品的配置檔案名,即/etc/pam.d/vsftpd檔案(一般将vsftpd檔案作為本地使用者認證子產品名,而将vsftpd.vu作為虛拟使用者認證子產品名)
# 此檔案中file=/etc/vsftpd/ftpusers字段,說明了PAM子產品能抵擋的帳号内容來自檔案/etc/vsftpd/ftpusers中

userlist_enable=YES   #是否使得userlist_deny有效以及user_list檔案生效
           

四、虛拟使用者登入配置步驟

1.建立虛拟使用者

#建立vsftpd虛拟使用者清單vuser.list,并添加兩個vsftpd虛拟使用者vuser1和vuser2,密碼均為redhat

[[email protected] ~]# cd /etc/vsftpd/
[[email protected] vsftpd]# vim vuser.list  
vuser1
redhat
vuser2
redhat
           

将vuser.list進行資料轉換,形成可用于ftp認證的資料庫檔案

vuser.db

,建議删除

vuser.list

及降低vuser.db的權限(600權限)

指令文法:

db_load -T -t hash -f user user.db

-T 允許非Berkeley DB的應用程式使用文本格式轉換的DB資料檔案
-t hash   讀取檔案的基本方
-f 指定資料源檔案也就是vuser.list
           
[ro[email protected] vsftpd]# db_load -T -t hash -f vuser.list vuser.db
           

2.建立一個本地使用者,禁止登入系統,指定家目錄并賦予755權限。以便将該家目錄作為虛拟使用者登入後的主目錄。

[[email protected] vsftpd]# useradd -d /var/ftphome -s /sbin/nologin vsftpduser
[[email protected] vsftpd]# chmod -Rf 755 /var/ftphome
           

3.建立支援vuser.db的pam檔案vsftpd.vu

pam檔案在/etc/pam.d/目錄下,檔案名應與主配置檔案中pam_service_name的參數相同,也就是

pam_service_name=vsftpd.vu

[[email protected] vsftpd]# vim /etc/pam.d/vsftpd.vu

auth       required     pam_userdb.so  db=/etc/vsftpd/vuser
account    required     pam_userdb.so  db=/etc/vsftpd/vuser
#這裡的vuser指向的就是vuser.db,隻是省略了檔案的字尾。
           

4.配置主配置檔案參數

[[email protected] vsftpd]# vim vsftpd.conf

anonymous_enable=NO

local_enable=YES
local_umask=022
write_enable=YES

guest_enable=YES
guest_username=vsftpduser
allow_writeable_chroot=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.vu
userlist_enable=YES
           

5.設定虛拟使用者權限

此時可以通過虛拟使用者名和密碼進行登入,但隻有讀取權限,需要進行進一步的權限設定才能達到想要的效果。

1).命名并建立一個虛拟使用者目錄vsftpduser,一般放在vsftpd工作目錄下比較便于記憶
[[email protected] vsftpd]# mkdir vsftpduser
           
2)在虛拟使用者目錄下,建立虛拟使用者配置檔案,檔案名與虛拟使用者同名,也就是vuser1和vuser2
[[email protected] vsftpd]# cd vsftpduser/
[[email protected] vsftpduser]# touch vuser1
[[email protected] vsftpduser]# touch vuser2
           
3)對虛拟使用者配置檔案進行配置,這裡隻配置vuser1,虛拟使用者配置檔案的配置用到的是匿名使用者配置參數
[[email protected] vsftpduser]# vim vuser1

anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
           
4)回到主配置檔案,在适當位置添加虛拟使用者配置目錄資訊
[[email protected] vsftpduser]# cd ..
[[email protected] vsftpd]# vim vsftpd.conf

user_config_dir=/etc/vsftpd/vsftpduser
           

6.記得修改selinux規則,将ftpd_full_access設定為on

[[email protected] vsftpd]# setsebool -P ftpd_full_access on
           

7.重新開機vsftpd服務

[[email protected] vsftpd]# systemctl restart vsftpd
           

8.用vuser1虛拟使用者登入ftp伺服器通路

[[email protected] vsftpd]# ftp 192.168.100.100
Connected to 192.168.100.100 (192.168.100.100).
220 (vsFTPd 3.0.3)
Name (192.168.100.100:root): vuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir testdir   #建立目錄
257 "/testdir" created
ftp> ls
227 Entering Passive Mode (192,168,100,100,236,230).
150 Here comes the directory listing.
drwx------    2 1001     1001            6 Jan 21 23:39 testdir
226 Directory send OK.
ftp> rmdir testdir     #删除目錄
250 Remove directory operation successful.
ftp> ls
227 Entering Passive Mode (192,168,100,100,208,14).
150 Here comes the directory listing.
226 Directory send OK.
ftp> 
           

嘗試用vuser2登入,可以發現并不能建立和删除目錄。

五、有關說明

1.使用者登陸權限的參數說明

1)ftpusers檔案中的使用者(永遠的黑名單)總是被禁止登陸vsftp
2)隻有在userlist_enable=YES時,userlist_deny才有效,user_list檔案才生效。
3)user_list檔案中的使用者可以為禁止登陸使用者,也可以是“隻”允許登陸使用者(此時其他使用者則為禁止登陸使用者,當然,user_list檔案必須為生效狀态)
#允許所有使用者(ftpusers使用者除外)登陸vsftp
userlist_enable=NO

#禁止user_list使用者(黑名單)登陸,也就是允許所有使用者中除ftpusers使用者和user_list使用者以外的使用者登陸。
userlist_enable=YES
userlist_deny=YES

#隻允許user_list使用者清單中使用者登陸(ftpusers中使用者除外)
userlist_enable=YES
userlist_deny=NO 
           

2.umask作用

當建立目錄時,所賦予的目錄的權限為:

777 - umask

值(當umask=022時,建立目錄的權限為755)

當建立檔案時,所賦予的檔案的權限為:

666 - umask

值(當umask=022時,建立檔案的權限為644)

[[email protected] ~]# cd /var/ftp
[[email protected] ftp]# mkdir dir1
[[email protected] ftp]# touch file1
[[email protected] ftp]# ls -l
total 0
drwxr-xr-x. 2 root root  6 Jan 13 07:16 dir1   #新建立的目錄權限為755
-rw-r--r--. 1 root root  0 Jan 13 07:17 file1   #新建立的檔案權限為644
drwxrwxrwx. 4 root root 26 Jan 13 07:07 pub
           

3.FTP登陸界面中有關數字代碼的含義

110 重新啟動标記應答。
120 服務在多久時間内ready。
125 資料鍊路端口開啟,準備傳送。
150 檔案狀态正常,開啟資料連接配接端口。
200 指令執行成功。
202 指令執行失敗。
211 系統狀态或是系統求助響應。
212 目錄的狀态。
213 檔案的狀态。
214 求助的訊息。
215 名稱系統類型。
220 新的聯機服務ready。
221 服務的控制連接配接端口關閉,可以登出。
225 資料連結開啟,但無傳輸動作。
226 關閉資料連接配接端口,請求的檔案操作成功。
227 進入passive mode。
230 使用者登入。
250 請求的檔案操作完成。
257 顯示目前的路徑名稱。
331 使用者名稱正确,需要密碼。
332 登入時需要賬号資訊。
350 請求的操作需要進一部的指令。
421 無法提供服務,關閉控制連結。
425 無法開啟資料鍊路。
426 關閉聯機,終止傳輸。
450 請求的操作未執行。
451 指令終止:有本地的錯誤。
452 未執行指令:磁盤空間不足。
500 格式錯誤,無法識别指令。
501 參數文法錯誤。
502 指令執行失敗。
503 指令順序錯誤。
504 指令所接的參數不正确。
530 未登入。 
532 儲存檔案需要賬戶登入。
550 未執行請求的操作。
551 請求的指令終止,類型未知。
552 請求的檔案終止,儲存位溢出。 
553 未執行請求的的指令,名稱不正确
           

繼續閱讀