Linux VSFTP 實現基於MariaDB 驗證的虛擬用戶訪問

VSFTP

VSFTP是一個基於GPL發佈的類Unix系統上使用的FTP服務器軟件,它的全稱是Very Secure FTP 從此名稱可以看出來,編制者的初衷是代碼的安全。除了這與生俱來的安全特性以外,高速與高穩定性也是VSFTP的兩個重要特點。在速度方面,使用ASCII代碼的模式下載數據時,VSFTP的速度是Wu-FTP的兩倍,如果Linux主機使用2.4.*的內核,在千兆以太網上的下載速度可達86MB/S。在穩定方面,VSFTP就更加的出色,VSFTP在單機(非集羣)上支持4000個以上的併發用戶同時連接,根據Red Hat的Ftp服務器的數據,VSFTP服務器可以支持15000個併發用戶

  • 它是一個安全、高速、穩定的FTP服務器
  • 它可以做基於多個IP的虛擬FTP主機服務器
  • 匿名服務設置十分方便
  • 匿名FTP的根目錄不需要任何特殊的目錄結構,或系統程序或其它的系統文件
  • 不執行任何外部程序,從而減少了安全隱患
  • 支持虛擬用戶,並且每個虛擬用戶可以具有獨立的屬性配置
  • 可以設置從inetd中啓動,或者獨立的FTP服務器兩種運行方式
  • 支持兩種認證方式(PAP或xinetd/ tcp_wrappers
  • 支持帶寬限制

  • 下面開始配置基於 MariaDB 驗證的 VSFTP虛擬用戶訪問

  • 實驗環境
  • VSFTP      192.168.10.2     CentOS 7.5 
  • MariaDB    192.168.10.6     CentOS 7.5

  • 首先在 192.168.10.2 上使用 YUM方式安裝 VSFTP服務

VSftp 服務主配置文件 /etc/vsftpd/vsftpd.conf 詳細說明

  • anonymous_enable=YES/NO(YES)#控制是否允許匿名用戶登入,YES 爲允許匿名登入,NO 爲不允許。默認值爲YES。
  • write_enable=YES/NO(YES)#是否允許登陸用戶有寫權限。屬於全局設置,默認值爲YES。
  • no_anon_password=YES/NO(NO)#若是啓動這項功能,則使用匿名登入時,不會詢問密碼。默認值爲NO。
  • ftp_username=ftp #定義匿名登入的使用者名稱。默認值爲ftp。
  • anon_root=/var/ftp #使用匿名登入時,所登入的目錄。默認值爲/var/ftp。注意ftp目錄不能是777的權限屬性,即匿名用戶的家目錄不能有777的權限。
  • anon_upload_enable=YES/NO(NO)#如果設爲YES,則允許匿名登入者有上傳文件(非目錄)的權限,只有在write_enable=YES時,此項纔有效。當然,匿名用戶必須要有對上層目錄的寫入權。默認值爲NO。
  • anon_world_readable_only=YES/NO(YES)#如果設爲YES,則允許匿名登入者下載可閱讀的檔案(可以下載到本機閱讀,不能直接在FTP服務器中打開閱讀)。默認值爲YES。
  • anon_mkdir_write_enable=YES/NO(NO)#如果設爲YES,則允許匿名登入者有新增目錄的權限,只有在write_enable=YES時,此項纔有效。當然,匿名用戶必須要有對上層目錄的寫入權。默認值爲NO。
  • anon_other_write_enable=YES/NO(NO)#如果設爲YES,則允許匿名登入者更多於上傳或者建立目錄之外的權限,譬如刪除或者重命名。(如果 anon_upload_enable=NO,則匿名用戶不能上傳文件,但可以刪除或者重命名已經存在的文件;如果 anon_mkdir_write_enable=NO,則匿名用戶不能上傳或者新建文件夾,但可以刪除或者重命名已經存在的文件夾。)默認值爲NO。
  • chown_uploads=YES/NO(NO)#設置是否改變匿名用戶上傳文件(非目錄)的屬主。默認值爲NO。
  • chown_username=username #設置匿名用戶上傳文件(非目錄)的屬主名。建議不要設置爲root。
  • anon_umask=077 #設置匿名登入者新增或上傳檔案時的umask 值。默認值爲077,則新建檔案的對應權限爲700。
  • deny_email_enable=YES/NO(NO)#若是啓動這項功能,則必須提供一個檔案/etc/vsftpd/banner_emails,內容爲email address。若是使用匿名登入,則會要求輸入email address,若輸入的email address 在此檔案內,則不允許進入。默認值爲NO。
  • banned_email_file=/etc/vsftpd/banner_emails #此文件用來輸入email address,只有在deny_email_enable=YES時,纔會使用到此檔案。若是使用匿名登入,則會要求輸入email address,若輸入的email address 在此檔案內,則不允許進入。
  • local_enable=YES/NO(YES)#控制是否允許本地用戶登入,YES 爲允許本地用戶登入,NO爲不允許。默認值爲YES。
  • local_root=/home/username #當本地用戶登入時,將被更換到定義的目錄下。默認值爲各用戶的家目錄。
  • write_enable=YES/NO(YES)#是否允許登陸用戶有寫權限。屬於全局設置,默認值爲YES。
  • local_umask=022 #本地用戶新增檔案時的umask 值。默認值爲077。
  • file_open_mode=0755 # 本地用戶上傳檔案後的檔案權限,與chmod 所使用的數值相同。默認值爲0666。
  • dirmessage_enable=YES/NO(YES)#如果啓動這個選項,那麼使用者第一次進入一個目錄時,會檢查該目錄下是否有.message這個檔案,如果有,則會出現此檔案的內容,通常這個檔案會放置歡迎話語,或是對該目錄的說明。默認值爲開啓。
  • message_file=.message #設置目錄消息文件,可將要顯示的信息寫入該文件。默認值爲.message。
  • banner_file=/etc/vsftpd/banner #當使用者登入時,會顯示此設定所在的檔案內容,通常爲歡迎話語或是說明。默認值爲無。如果歡迎信息較多,則使用該配置項。
  • ftpd_banner=Welcome to BOB's FTP server #這裏用來定義歡迎話語的字符串,banner_file是檔案的形式,而ftpd_banner 則是字符串的形式。預設爲無。
  • 在默認配置下,本地用戶登入FTP後可以使用cd命令切換到其他目錄,這樣會對系統帶來安全隱患。可以通過以下三條配置文件來控制用戶切換目錄。
  • chroot_list_enable=YES/NO(NO) #設置是否啓用chroot_list_file配置項指定的用戶列表文件。默認值爲NO。
  • chroot_list_file=/etc/vsftpd.chroot_list #用於指定用戶列表文件,該文件用於控制哪些用戶可以切換到用戶家目錄的上級目錄。
  • chroot_local_user=YES/NO(NO)#用於指定用戶列表文件中的用戶是否允許切換到上級目錄。默認值爲NO。
  • 通過搭配能實現以下幾種效果:
  • 當chroot_list_enable=YES,chroot_local_user=YES時,在/etc/vsftpd.chroot_list文件中列出的用戶,可以切換到其他目錄;未在文件中列出的用戶,不能切換到其他目錄。
  • 當chroot_list_enable=YES,chroot_local_user=NO時,在/etc/vsftpd.chroot_list文件中列出的用戶,不能切換到其他目錄;未在文件中列出的用戶,可以切換到其他目錄。
  • 當chroot_list_enable=NO,chroot_local_user=YES時,所有的用戶均不能切換到其他目錄。
  • 當chroot_list_enable=NO,chroot_local_user=NO時,所有的用戶均可以切換到其他目錄。
  • ascii_upload_enable=YES/NO(NO)#設置是否啓用ASCII 模式上傳數據。默認值爲NO。
  • ascii_download_enable=YES/NO(NO) #設置是否啓用ASCII 模式下載數據。默認值爲NO。
  • tcp_wrappers=YES/NO(YES)#設置vsftpd是否與tcp wrapper相結合來進行主機的訪問控制。默認值爲YES。如果啓用,則vsftpd服務器會檢查/etc/hosts.allow 和/etc/hosts.deny 中的設置,來決定請求連接的主機,是否允許訪問該FTP服務器。這兩個文件可以起到簡易的防火牆功能。僅允許192.168.0.1—192.168.0.254的用戶可以連接FTP服務器,則在/etc/hosts.allow文件中添加以下內容:
  • vsftpd:192.168.0. :allow
  • all:all :deny
  • 對於用戶的訪問控制可以通過/etc目錄下的vsftpd.user_list和ftpusers文件來實現。
  • userlist_file=/etc/vsftpd.user_list #控制用戶訪問FTP的文件,裏面寫着用戶名稱。一個用戶名稱一行。
  • userlist_enable=YES/NO(NO)#是否啓用vsftpd.user_list文件。
  • userlist_deny=YES/NO(YES)#決定vsftpd.user_list文件中的用戶是否能夠訪問FTP服務器。若設置爲YES,則vsftpd.user_list文件中的用戶不允許訪問FTP,若設置爲NO,則只有vsftpd.user_list文件中的用戶才能訪問FTP。
  • /etc/vsftpd/ftpusers文件專門用於定義不允許訪問FTP服務器的用戶列表(注意: 如果userlist_enable=YES,userlist_deny=NO,此時如果在vsftpd.user_list和ftpusers中都有 某個用戶時,那麼這個用戶是不能夠訪問FTP的,即ftpusers的優先級要高)。默認情況下vsftpd.user_list和ftpusers,這 兩個文件已經預設置了一些不允許訪問FTP服務器的系統內部賬戶。如果系統沒有這兩個文件,那麼新建這兩個文件,將用戶添加進去即可。
  • anon_max_rate=0 #設置匿名登入者使用的最大傳輸速度,單位爲B/s,0 表示不限制速度。默認值爲0。
  • local_max_rate=0 #本地用戶使用的最大傳輸速度,單位爲B/s,0 表示不限制速度。預設值爲0。
  • accept_timeout=60 #設置建立FTP連接的超時時間,單位爲秒。默認值爲60。
  • connect_timeout=60 #PORT 方式下建立數據連接的超時時間,單位爲秒。默認值爲60。
  • data_connection_timeout=120 #設置建立FTP數據連接的超時時間,單位爲秒。默認值爲120。
  • idle_session_timeout=300 #設置多長時間不對FTP服務器進行任何操作,則斷開該FTP連接,單位爲秒。默認值爲300 。
  • xferlog_enable= YES/NO(YES)#是否啓用上傳/下載日誌記錄。如果啓用,則上傳與下載的信息將被完整紀錄在xferlog_file 所定義的檔案中。預設爲開啓。
  • xferlog_file=/var/log/vsftpd.log #設置日誌文件名和路徑,默認值爲/var/log/vsftpd.log。
  • xferlog_std_format=YES/NO(NO) #如果啓用,則日誌文件將會寫成xferlog的標準格式,如同wu-ftpd 一般。默認值爲關閉。
  • log_ftp_protocol=YES|NO(NO) #如果啓用此選項,所有的FTP請求和響應都會被記錄到日誌中,默認日誌文件在/var/log/vsftpd.log。啓用此選項時,xferlog_std_format不能被激活。這個選項有助於調試。默認值爲NO。
  • user_config_dir=/etc/vsftpd/userconf #設置用戶配置文件所在的目錄。當設置了該配置項後,用戶登陸服務器後,系統就會到/etc/vsftpd/userconf目錄下,讀取與當前用戶名相同的文件,並根據文件中的配置命令,對當前用戶進行更進一步的配置。
  • 例如:定義user_config_dir=/etc/vsftpd/userconf,且主機上有使用 者 test1,test2,那麼我們就在user_config_dir 的目錄新增文件名爲test1和test2兩個文件。若是test1 登入,則會讀取user_config_dir 下的test1 這個檔案內的設定。默認值爲無。利用用戶配置文件,可以實現對不同用戶進行訪問速度的控制,在各用戶配置文件中定義local_max_rate=XX, 即可。
  • listen_port=21 #設置FTP服務器建立連接所監聽的端口,默認值爲21。
  • connect_from_port_20=YES/NO  #指定FTP使用20端口進行數據傳輸,默認值爲YES。
  • ftp_data_port=20 #設置在PORT方式下,FTP數據連接使用的端口,默認值爲20。
  • pasv_enable=YES/NO(YES) #若設置爲YES,則使用PASV工作模式;若設置爲NO,則使用PORT模式。默認值爲YES,即使用PASV工作模式。
  • pasv_max_port=0 #在PASV工作模式下,數據連接可以使用的端口範圍的最大端口,0 表示任意端口。默認值爲0。
  • pasv_min_port=0 #在PASV工作模式下,數據連接可以使用的端口範圍的最小端口,0 表示任意端口。默認值爲0。
  • listen=YES/NO(YES)#設置vsftpd服務器是否以standalone模式運行。以standalone模式運行是一種較好 的方式,此時listen必須設置爲YES,此爲默認值。建議不要更改,有很多與服務器運行相關的配置命令,需要在此模式下才有效。若設置爲NO,則 vsftpd不是以獨立的服務運行,要受到xinetd服務的管控,功能上會受到限制。
  • max_clients=0 #設置vsftpd允許的最大連接數,默認值爲0,表示不受限制。若設置爲100時,則同時允許有100個連接,超出的將被拒絕。只有在standalone模式運行纔有效。
  • max_per_ip=0 #設置每個IP允許與FTP服務器同時建立連接的數目。默認值爲0,表示不受限制。只有在standalone模式運行纔有效。
  • listen_address=IP地址 #設置FTP服務器在指定的IP地址上偵聽用戶的FTP請求。若不設置,則對服務器綁定的所有IP地址進行偵聽。只有在standalone模式運行纔有效。
  • setproctitle_enable=YES/NO(NO)#設置每個與FTP服務器的連接,是否以不同的進程表現出來。默認值爲NO,此時使用ps aux |grep ftp只會有一個vsftpd的進程。若設置爲YES,則每個連接都會有一個vsftpd的進程。
  • pam_service_name=vsftpd #設置PAM使用的名稱,默認值爲/etc/pam.d/vsftpd。
  • guest_enable= YES/NO(NO) #啓用虛擬用戶。默認值爲NO。
  • guest_username=ftp #這裏用來映射虛擬用戶。默認值爲ftp。
  • virtual_use_local_privs=YES/NO(NO)#當該參數激活(YES)時,虛擬用戶使用與本地用戶相同的權限。當此參數關閉(NO)時,虛擬用戶使用與匿名用戶相同的權限。默認情況下此參數是關閉的(NO)。
  • text_userdb_names= YES/NO(NO)#設置在執行ls –la之類的命令時,是顯示UID、GID還是顯示出具體的用戶名和組名。默認值爲NO,即以UID和GID方式顯示。若希望顯示用戶名和組名,則設置爲YES。
  • ls_recurse_enable=YES/NO(NO)#若是啓用此功能,則允許登入者使用ls –R(可以查看當前目錄下子目錄中的文件)這個指令。默認值爲NO。
  • hide_ids=YES/NO(NO)#如果啓用此功能,所有檔案的擁有者與羣組都爲ftp,也就是使用者登入使用ls -al之類的指令,所看到的檔案擁有者跟羣組均爲ftp。默認值爲關閉。
  • download_enable=YES/NO(YES)#如果設置爲NO,所有的文件都不能下載到本地,文件夾不受影響。默認值爲YES。

  • 編輯 /etc/vsftpd/vsftpd.conf
  • 紅色字體部分爲必須選項
  • write_enable=YES                      #允許登陸用戶有寫權限         
    xferlog_enable=YES                   #啓用上傳/下載日誌記錄
    connect_from_port_20=YES      #指定FTP使用20端口進行數據傳輸  
    xferlog_file=/var/log/xferlog        
    xferlog_std_format=YES            #日誌文件寫成xferlog的標準格式
    idle_session_timeout=600          #設置自動斷開連接時間爲600秒
    data_connection_timeout=120    #設置建立FTP數據連接的超時時間120秒
    chroot_local_user=YES               #允許切換到上級目錄
    ls_recurse_enable=YES
    listen=yes                                     #設置vsftpd服務器以standalone模式運行
    allow_writeable_chroot=YES       #鎖定訪問目錄爲用戶目錄  
    userlist_enable=YES                    #啓用vsftpd.user_list文件
    tcp_wrappers=YES
    local_enable=YES                        #允許本地用戶登入
    anonymous_enable=YES            #啓用匿名用戶登錄
    guest_enable=YES                      #啓用虛擬用戶 
    guest_username=vuser               #映射虛擬用戶爲 vuser (可以自行設定用戶)
    pam_service_name=vsftpd.mysql      #設置PAM使用的名稱,默認值爲/etc/pam.d/vsftpd,可以自行設定
    user_config_dir=/etc/vsftpd/conf.d     #設置虛擬用戶配置文件所在的目錄

  • 確認無誤重啓 VSftpd 服務
  •  
  • mkdir -p /var/ftproot/ftp{1,2,3}/{upload,pub}     創建3個虛擬用戶 FTP 家目錄,不允許目錄有寫入權限
  • chmod -R 555 /var/ftproot     設置目錄爲只讀,不允許寫入
  • useradd -s /sbin/nologin  -d /var/ftproot vuser    創建虛擬映射用戶 vuser ,家目錄爲 /var/ftproot/ ,不允許登錄系統
  • setfacl -R -m u:vuser:rwx /var/ftproot/ftp{1,2,3}/{upload,pub}    使用訪問控制列表增加映射用戶有寫入權限

  • 創建 /etc/vsftpd/conf.d 目錄
  • 分別創建虛擬用戶配置文件 /etc/vsftpd/conf.d/ftp1  /etc/vsftpd/conf.d/ftp2  /etc/vsftpd/conf.d/ftp3
  • vim /etc/vsftpd/conf.d/ftp1
  • local_root=/var/ftproot/ftp1/                #鎖定登錄目錄
    anon_upload_enable=YES                 #開啓文件上傳功能
    anon_mkdir_write_enable=YES         #允許匿名登入者有新增目錄的權限
    anon_other_write_enable=YES         #允許匿名登入者更多於上傳或者建立目錄之外的權限,譬如刪除或者重命名
    anon_umask=022        #設置匿名登入者新增或上傳檔案時的umask 值。值爲022,則新建檔案的對應權限爲755
  • vim /etc/vsftpd/conf.d/ftp2
    anon_upload_enable=YES                #僅允許用戶有上傳文件的功能
    local_root=/var/ftproot/ftp2/
    anon_umask=022
  • vim /etc/vsftpd/conf.d/ftp3 
    local_root=/var/ftproot/                     #僅允許登錄

  • 建立pam認證所需文件  vsftpd.mysql 
  • vim /etc/pam.d/vsftpd.mysql

  • 添加下面2條內容

auth required pam_mysql.so user=ftp passwd=password host=192.168.10.6 db=vsftpd table=ftpusers usercolumn=name passwdcolumn=password  crypt=2

account required pam_mysql.so user=ftp passwd=password host=192.168.10.6 db=vsftpd table=ftpusers usercolumn=name passwdcolumn=password  crypt=2


  • 接下來在 192.168.10.6 上創建需要的數據庫、表、用戶
  • 需要安裝、配置好 MariaDB 詳細操作請參考拙作:https://blog.csdn.net/gaofei0428/article/details/103829676
  • 創建需要的數據庫、表、用戶,然後在表中插入數據

  • mysql -uroot -p123456 -e "create database vsftpd;"
    mysql -uroot -p123456 -e "create table vsftpd.ftpusers(name char(20),password char(50));"
    mysql -uroot -p123456 -e "grant select on vsftpd.ftpusers to ftp@'%' identified by 'password';"
    mysql -uroot -p123456 -e "insert vsftpd.ftpusers value ('ftp1',password('ftp1password'));"
    mysql -uroot -p123456 -e "insert vsftpd.ftpusers value ('ftp2',password('ftp2password'));"
    mysql -uroot -p123456 -e "insert vsftpd.ftpusers value ('ftp3',password('ftp3password'));"


  • 回到 192.168.10.2 上重新啓動 VSFTP

  • 使用虛擬用戶登陸測試

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章