基於SSL加密的VSFTPD 服務器搭建和配置
1、安裝
ubuntu系統:apt-get install vsftp lftp centos系統:yum install -y vsftpd ftp
2、添加虛擬用戶
useradd -s /sbin/nologin virtual
3、編輯配置文件(注意備份)
vim /etc/vsftpd.conf
anonymous_enable=NO guest_enable=YES guest_username=virtual pam_service_name=virtual user_config_dir=/etc/vsftpd/vconf local_enable=YES write_enable=YES local_umask=022 connect_from_port_20=YES listen=YES pam_service_name=vsftpd #tcp_wrappers=YES chroot_local_user=YES chroot_list_enable=NO allow_writeable_chroot=YES ###vsftpd 被動模式 pasv_enable=YES pasv_min_port=40000 pasv_max_port=41000 ####ssl ssl_enable=YES rsa_cert_file=/etc/vsftpd/cert/vsftpd.pem allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO require_ssl_reuse=NO ssl_ciphers=HIGH #####log xferlog_enable=YES xferlog_std_format=NO xferlog_file=/var/log/vsftpd.log log_ftp_protocol=YES debug_ssl=YES
如果想linux下命令也能訪問,關閉debug_ssl=YES此選項,或者在lftp配置中增加一項配置
vim /etc/lftp.conf
alias dir ls
alias less more
alias zless zmore
alias bzless bzmore
alias reconnect "close; cache flush; cd ."
set ssl:verify-certificate no(添加的是該項)
4、創建配置文件目錄
mkdir /etc/vsftpd/vconf mkdir /etc/vsftpd/cert
5、創建虛擬用戶密碼文件: 一行用戶 一行密碼
vim /etc/vsftpd/vuser.txt
admin 123456 test 123456
6、轉換成db格式的文件(后綴.db一定不能少)
db_load -T -t hash -f etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db
7、設置虛擬用戶訪問權限
cd /etc/vsftpd/vconf
vim admin
local_root=/data/vsftp/admin anon_umask=023 write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES max_clients=5 max_per_ip=5
vim test
local_root=/data/vsftp/admin anon_umask=023 write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES max_clients=5 max_per_ip=5
8、編輯/etc/pam.d/vsftpd (注意備份vsftpd)
vim /etc/pam.d/vsftpd
#%PAM-1.0 auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser (注意 lib64為64為系統的路徑)
備注:
此處的vuser,后面不能添加.db其實就是/etc/vsftpd/vuser.db,如果用戶不能訪問,注意vuser.db的權限問題,centos下的pam_userdb.so db可能不是這個路徑
9、創建ssl認證文件:
openssl req -x509 -days 365 -newkey rsa:2048 -nodes -keyout /etc/vsftpd/cert/vsftpd.pem -out /etc/vsftpd/cert/vsftpd.pem
10、創建虛擬用戶家目錄(屬主數組必須是guest_username的屬主屬組,我前面創建的是virtual)
mkdir /data/vsftp/admin -pv mkdir /data/vsftp/test -pv chown -R virtual.virtual /data/vsftp/admin chown -R virtual.virtual /data/vsftp/test
11、服務器iptables 設置
-A INPUT -p tcp -m state --state NEW -m multiport --dport 20,21 -j ACCEPT -A INPUT -p tcp --dport 40000:41000 -j ACCEPT
12、重啟iptables vsftpd
13、連接訪問
基於ssl的vsftpd服務的虛擬用戶只能通過filezlia類似第三方工具訪問或linux客戶端方法
客戶端訪問使用:lftp -uuser ip地址訪問
其他補充
配置參數說明:
vsftpd的配置文件
/etc/vsftpd/vsftpd.conf #主配置文件
/usr/sbin/vsftpd #vsftpd的主程序
/etc/rc.d/init.d/vsftpd #啟動腳本
/etc/pam.d/vsftpd #PAM認證文件(此文件中file=/etc/vsftpd/ftpusers字段,指明阻止訪問的用戶來自/etc/vsftpd/ftpusers文件中的用戶)
/etc/vsftpd/ftpusers #禁止使用vsftpd的用戶列表文件。記錄不允許訪問FTP服務器的用戶名單,管理員可以把一些對系統安全有威脅的用戶賬號記錄在此文件中,以免用戶從FTP登錄后獲得大於上傳下載操作的權利,而對系統造成損壞。(注意:linux-4中此文件在/etc/目錄下)
/etc/vsftpd/user_list #禁止或允許使用vsftpd的用戶列表文件。這個文件中指定的用戶缺省情況(即在/etc/vsftpd/vsftpd.conf中設置userlist_deny=YES)下也不能訪問FTP服務器,在設置了userlist_deny=NO時,僅允許user_list中指定的用戶訪問FTP服務器。(注意:linux-4中此文件在/etc/目錄下)
/var/ftp #匿名用戶主目錄;本地用戶主目錄為:/home/用戶主目錄,即登錄后進入自己家目錄
/var/ftp/pub #匿名用戶的下載目錄,此目錄需賦權根chmod 1777 pub(1為特殊權限,使上載后無法刪除)
/etc/logrotate.d/vsftpd.log #vsftpd的日志文件
vsftpd的主配置文件/etc/vsftpd/vsftpd.conf說明
# 是否允許匿名登錄FTP服務器,默認設置為YES允許
# 用戶可使用用戶名ftp或anonymous進行ftp登錄,口令為用戶的E-mail地址。
# 如不允許匿名訪問則設置為NO
anonymous_enable=YES
# 是否允許本地用戶(即linux系統中的用戶帳號)登錄FTP服務器,默認設置為YES允許
# 本地用戶登錄后會進入用戶主目錄,而匿名用戶登錄后進入匿名用戶的下載目錄/var/ftp/pub
# 若只允許匿名用戶訪問,前面加上#注釋掉即可阻止本地用戶訪問FTP服務器
local_enable=YES
# 是否允許本地用戶對FTP服務器文件具有寫權限,默認設置為YES允許
write_enable=YES
# 掩碼,本地用戶默認掩碼為077
# 你可以設置本地用戶的文件掩碼為缺省022,也可根據個人喜好將其設置為其他值
#local_umask=022
# 是否允許匿名用戶上傳文件,須將全局的write_enable=YES。默認為YES
#anon_upload_enable=YES
# 是否允許匿名用戶創建新文件夾
#anon_mkdir_write_enable=YES
# 是否激活目錄歡迎信息功能
# 當用戶用CMD模式首次訪問服務器上某個目錄時,FTP服務器將顯示歡迎信息
# 默認情況下,歡迎信息是通過該目錄下的.message文件獲得的
# 此文件保存自定義的歡迎信息,由用戶自己建立
#dirmessage_enable=YES
# 是否讓系統自動維護上傳和下載的日志文件
# 默認情況該日志文件為/var/log/vsftpd.log,也可以通過下面的xferlog_file選項對其進行設定
# 默認值為NO
xferlog_enable=YES
# Make sure PORT transfer connections originate from port 20 (ftp-data).
# 是否設定FTP服務器將啟用FTP數據端口的連接請求
# ftp-data數據傳輸,21為連接控制端口
connect_from_port_20=YES
# 設定是否允許改變上傳文件的屬主,與下面一個設定項配合使用
# 注意,不推薦使用root用戶上傳文件
#chown_uploads=YES
# 設置想要改變的上傳文件的屬主,如果需要,則輸入一個系統用戶名
# 可以把上傳的文件都改成root屬主。whoever:任何人
#chown_username=whoever
# 設定系統維護記錄FTP服務器上傳和下載情況的日志文件
# /var/log/vsftpd.log是默認的,也可以另設其它
#xferlog_file=/var/log/vsftpd.log
# 是否以標准xferlog的格式書寫傳輸日志文件
# 默認為/var/log/xferlog,也可以通過xferlog_file選項對其進行設定
# 默認值為NO
#xferlog_std_format=YES
# 以下是附加配置,添加相應的選項將啟用相應的設置
# 是否生成兩個相似的日志文件
# 默認在/var/log/xferlog和/var/log/vsftpd.log目錄下
# 前者是wu_ftpd類型的傳輸日志,可以利用標准日志工具對其進行分析;后者是vsftpd類型的日志
#dual_log_enable
# 是否將原本輸出到/var/log/vsftpd.log中的日志,輸出到系統日志
#syslog_enable
# 設置數據傳輸中斷間隔時間,此語句表示空閑的用戶會話中斷時間為600秒
# 即當數據傳輸結束后,用戶連接FTP服務器的時間不應超過600秒。可以根據實際情況對該值進行修改
#idle_session_timeout=600
# 設置數據連接超時時間,該語句表示數據連接超時時間為120秒,可根據實際情況對其個修改
#data_connection_timeout=120
# 運行vsftpd需要的非特權系統用戶,缺省是nobody
#nopriv_user=ftpsecure
# 是否識別異步ABOR請求。
# 如果FTP client會下達“async ABOR”這個指令時,這個設定才需要啟用
# 而一般此設定並不安全,所以通常將其取消
#async_abor_enable=YES
# 是否以ASCII方式傳輸數據。默認情況下,服務器會忽略ASCII方式的請求。
# 啟用此選項將允許服務器以ASCII方式傳輸數據
# 不過,這樣可能會導致由"SIZE /big/file"方式引起的DoS攻擊
#ascii_upload_enable=YES
#ascii_download_enable=YES
# 登錄FTP服務器時顯示的歡迎信息
# 如有需要,可在更改目錄歡迎信息的目錄下創建名為.message的文件,並寫入歡迎信息保存后
#ftpd_banner=Welcome to blah FTP service.
# 黑名單設置。如果很討厭某些email address,就可以使用此設定來取消他的登錄權限
# 可以將某些特殊的email address抵擋住。
#deny_email_enable=YES
# 當上面的deny_email_enable=YES時,可以利用這個設定項來規定哪些郵件地址不可登錄vsftpd服務器
# 此文件需用戶自己創建,一行一個email address即可
#banned_email_file=/etc/vsftpd/banned_emails
# 用戶登錄FTP服務器后是否具有訪問自己目錄以外的其他文件的權限
# 設置為YES時,用戶被鎖定在自己的home目錄中,vsftpd將在下面chroot_list_file選項值的位置尋找chroot_list文件
# 必須與下面的設置項配合
#chroot_list_enable=YES
# 被列入此文件的用戶,在登錄后將不能切換到自己目錄以外的其他目錄
# 從而有利於FTP服務器的安全管理和隱私保護。此文件需自己建立
#chroot_list_file=/etc/vsftpd/chroot_list
# 是否允許遞歸查詢。默認為關閉,以防止遠程用戶造成過量的I/O
#ls_recurse_enable=YES
# 是否允許監聽。
# 如果設置為YES,則vsftpd將以獨立模式運行,由vsftpd自己監聽和處理IPv4端口的連接請求
listen=YES
# 設定是否支持IPV6。如要同時監聽IPv4和IPv6端口,
# 則必須運行兩套vsftpd,采用兩套配置文件
# 同時確保其中有一個監聽選項是被注釋掉的
#listen_ipv6=YES
# 設置PAM外掛模塊提供的認證服務所使用的配置文件名,即/etc/pam.d/vsftpd文件
# 此文件中file=/etc/vsftpd/ftpusers字段,說明了PAM模塊能抵擋的帳號內容來自文件/etc/vsftpd/ftpusers中
#pam_service_name=vsftpd
# 是否允許ftpusers文件中的用戶登錄FTP服務器,默認為NO
# 若此項設為YES,則user_list文件中的用戶允許登錄FTP服務器
# 而如果同時設置了userlist_deny=YES,則user_list文件中的用戶將不允許登錄FTP服務器,甚至連輸入密碼提示信息都沒有
#userlist_enable=YES/NO
# 設置是否阻扯user_list文件中的用戶登錄FTP服務器,默認為YES
#userlist_deny=YES/NO
# 是否使用tcp_wrappers作為主機訪問控制方式。
# tcp_wrappers可以實現linux系統中網絡服務的基於主機地址的訪問控制
# 在/etc目錄中的hosts.allow和hosts.deny兩個文件用於設置tcp_wrappers的訪問控制
# 前者設置允許訪問記錄,后者設置拒絕訪問記錄。
# 如想限制某些主機對FTP服務器192.168.57.2的匿名訪問,編緝/etc/hosts.allow文件,如在下面增加兩行命令:
# vsftpd:192.168.57.1:DENY 和vsftpd:192.168.57.9:DENY
# 表明限制IP為192.168.57.1/192.168.57.9主機訪問IP為192.168.57.2的FTP服務器
# 此時FTP服務器雖可以PING通,但無法連接
tcp_wrappers=YES
