服務器環境:CentOS Linux release 7.4 3.10.0-693.5.2.el7.x86_64html
服務器軟件:vsftpd-3.0.2服務器
主動模式app
被動模式tcp
/etc/vsftpd/vsftpd.conf 主配置文件工具
/etc/vsftpd/ftpusers 黑名單ui
/etc/vsftpd/vsftpd_conf_migrate.sh 遷移腳本spa
/etc/vsftpd/user_list 用戶列表,與userlist_enbale和userlist_deny選項密切相關,詳見http://blog.csdn.net/bluishglc/article/details/42273197.net
# yum -y install vsftpd
安裝Berkeley DB工具,用於生成虛擬用戶認證文件rest
# yum -y install libdb-utils #CentOS7是libdb-utils # yum -y install db4 db4-utils #CentOS6是db4-utils
建立宿主用戶,即guest_username,全部虛擬用戶都是映射宿主用戶的目錄權限。日誌
# useradd -d /var/vsftp -s /sbin/nologin vsftp
# vi /etc/vsftpd/vsftpd.conf #關閉匿名訪問 anonymous_enable=NO #啓用本地系統用戶,包括虛擬用戶 local_enable=YES #容許執行FTP命令,若是禁用,將不能進行上傳、下載、刪除、重命名等操做 write_enable=YES #本地用戶umask值 local_umask=022 dirmessage_enable=YES #啓用日誌 xferlog_enable=YES xferlog_std_format=YES #關閉ftp-data端口,至關於不使用主動模式 connect_from_port_20=NO #限制用戶不能離開FTP主目錄,啓用並設置例外用戶清單 chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list #使用ipv4進行監聽 listen=YES listen_ipv6=NO #pam認證文件名稱,位於/etc/pam.d/ pam_service_name=vsftpd #啓用全局用戶例外清單 userlist_enable=YES #啓用tcp封裝 tcp_wrappers=YES
#虛擬用戶權限是否與本地用戶相同。爲NO時,將與匿名用戶的權限相同,在每一個虛擬用戶配置文件裏設置匿名用戶的選項等於虛擬用戶的權限
virtual_use_local_privs=NO #啓用guest後,全部非匿名用戶將映射到guest_username進行訪問,包括本地系統用戶也不能使用,而且轉換成一個虛擬用戶,與其餘虛擬用戶的配置方法同樣 guest_enable=YES guest_username=vsftp #虛擬用戶配置文件目錄 user_config_dir=/etc/vsftpd/vuser_conf
#啓用pasv模式
pasv_enable=YES
pasv_min_port=33000
pasv_max_port=34000
主配置文件可參考:man vsftpd.conf或https://security.appspot.com/vsftpd/vsftpd_conf.html
chroot()會檢查chroot_list文件
# touch /etc/vsftpd/chroot_list
奇行爲用戶名,偶行爲密碼
# vi /etc/vsftpd/vuser
ftpserver 111111
# db_load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db
# chmod 600 /etc/vsftpd/vuser.db
註釋掉其餘本地用戶認證的內容,由於啓用了guest_enable後,本地用戶將失效,全部非匿名用戶變成虛擬用戶
# cp /etc/pam.d/vsftpd{,.bak}
# vi /etc/pam.d/vsftpd
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
# mkdir /etc/vsftpd/vuser_conf/ # vi /etc/vsftpd/vuser_conf/ftpserver #文件名與對應FTP虛擬用戶一致
local_root=/var/vsftp/ftpserver #虛擬用戶主目錄,用戶和組必須指定爲宿主用戶vsftp #vsftpd主配置文件中已規定虛擬用戶權限與匿名用戶一致,所以如下針對匿名用戶的權限配置即爲虛擬用戶的權限 anon_umask=077 anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
最新版vsftpd不容許用戶主目錄有w權限,所以在主目錄下新建一個子目錄,賦予700權限。全部上傳、下載、刪除、重命名等操做只能在子目錄中進行
# mkdir -p /var/vsftp/ftpserver/newdir # chown -R vsftp.vsftp /var/vsftp # chmod -R 500 /var/vsftp
# chmod -R 700 /var/vsftp/newdir
# setsebool -P ftpd_full_access on
# iptables -I INPUT -p tcp --dport 21 -j ACCEPT #FTP鏈接端口 # iptables -I INPUT -p tcp --dport 33000:34000 -j ACCEPT #pasv模式下的隨機端口 # iptables-save >/etc/sysconfig/iptables #保存防火牆配置
# systemctl restart iptables.service
# systemctl restart vsftpd.service