采用vsftpd在CentOS7上搭建FTP服務器。
1、安裝vsftpd
yum -y install vsftpd
2、設置開機啟動
systemctl enable vsftpd
3、啟動ftp服務
systemctl start vsftpd.service
4、打開防火牆,開放21端口
firewall-cmd --zone=public --add-port=21/tcp --permanent firewall-cmd --permanent --zone=public --add-service=ftp firewall-cmd --reload
5、添加ftp用戶
useradd -g root -d /var/www/html -s /sbin/nologin ftpuser
注:表示新增一個ftpuser(用戶名),且指定上傳目錄在/var/www/html/下
如果后期想變更此用戶的上傳目錄到(/home/ftpuser/),請使用下面的命令:
usermod -d /home/ftpuser/ ftpuser
6、設置用戶密碼
passwd ftpuser
7、配置selinux 允許ftp訪問home和外網訪問
setsebool -P allow_ftpd_full_access on setsebool -P ftp_home_dir on
8、設置權限
chown -R ftpuser:root /var/www/html/
#配合allow_writeable_chroot=YES使用,否則報503錯誤
chmod o-w /var/www/html/
9、修改vsftp配置文件,禁用匿名登錄
#vi /etc/vsftpd/vsftpd.conf #改為NO 就是禁止匿名用戶登錄 anonymous_enable=NO #允許本地用戶訪問(/etc/passwd中的用戶) local_enable=YES #允許寫入權限,包括修改,刪除 write_enable=YES #禁止跳出當前用戶權限目錄 chroot_local_user=YES ascii_upload_enable=YES ascii_download_enable=YES #末尾添加 不加會報5XX錯誤 allow_writeable_chroot=YES #當chroot_local_user=NO時,chroot_list里面配置的用戶不可以跳出家目錄,當chroot_local_user=YES時,chroot_list里面配置的用戶可以跳出家目錄 chroot_list_file=/etc/vsftpd/chroot_list
10、被動模式端口
很多客戶端會通過被動模式連接FTP,涉及到映射的時候,數據端口是變化的。可給設置一個固定范圍
#開啟被動模式 pasv_enable=YES pasv_min_port=64500 pasv_max_port=64999
虛擬用戶模式配置:
虛擬用戶的用戶認證是通過pam方式去認證的,pam文件里面指定了認證的db文件,db文件又是通過明文用戶名和密碼文件生成而來,首先要指定pam文件,這個在 /etc/vsftpd/vsftpd.conf 配置文件是通過 pam_service_name=vsftpd 配置指定的,其位置是 /etc/pam.d/vsftpd,編輯該文件,把auth兩行注釋掉,加上以下兩行(32位lib64改為lib):
1、密碼策略
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed #auth required pam_shells.so auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
2、配置文件vsftpd.conf說明
#以下這些是關於Vsftpd虛擬用戶支持的重要配置項目。默認Vsftpd.conf中不包含這些設定項目,需要自己手動添加配置 #用戶家目錄可寫,默認是只讀的 allow_writeable_chroot=YES #設定啟用虛擬用戶功能。 guest_enable=YES #指定虛擬用戶的宿主用戶。 guest_username=testftp #設定虛擬用戶的權限符合他們的宿主用戶。 virtual_use_local_privs=YES #設定虛擬用戶個人vsftp的配置文件存放路徑。也就是說,這個被指定的目錄里,將存放每個vsftp虛擬用戶個性的配置文件,一個需要注意的地方就是這些配置文件名必須和虛擬用戶名相同。 user_config_dir=/etc/vsftpd/vconf #如果配置了以下配置,則還需要在user_list里面添加指定的虛擬用戶,如ftptest,不然不能登錄,如圖 #NO表示所有用戶均不可以登錄ftp,YES表示所有用戶均能訪問ftp,默認是YES userlist_deny=NO #當userlist_deny=NO時,user_list是白名單,當userlist_deny=YES時,user_list是黑名單 userlist_file=/etc/vsftpd/user_list
3、創建用戶
目錄新建virtusers文件,用於存放虛擬用戶及密碼。
touch /etc/vsftpd/virtusers
注:從第一行開始,奇數行為用戶名,偶數行為密碼
user1 123456 user2 123456 user3 123456
#留一個空行,否則報錯,可以驗證一下
4、生成數據文件
cd /etc/vsftpd/ db_load -T -t hash -f virtusers virtusers.db #修改virtusers.db的用戶及組為宿主的用戶及組 chown testftp:testftp virtusers.db #修改virtusers.db的權限,敏感文件只允許宿主讀寫 chmod 600 virtusers.db
5、建立配置文件
根據vsftpd.conf文件中user_config_dir=/etc/vsftpd/vconf的配置,在/etc/vsftpd/目錄創建vconf目錄,目錄里面存放各個虛擬用戶單獨的配置文件。
#創建vconf目錄 mkdir /etc/vsftpd/vconf #創建虛擬用戶單獨的配置文件,ftptest為virtusers中配置的用戶名 touch /etc/vsftpd/vconf/ftptest
配置示例:
#指定此虛擬用戶的家目錄 local_root=/home/testftp/ftp-file #設定不允許匿名用戶訪問 anonymous_enable=NO #設定允許寫操作 write_enable=YES #設定上傳文件權限掩碼 local_umask=022 #設定不允許匿名用戶上傳 anon_upload_enable=NO #設定不允許匿名用戶建立目錄 anon_mkdir_write_enable=NO #設定空閑連接超時時間 idle_session_timeout=600 #設定單次連續傳輸最大時間 data_connection_timeout=120 #設定並發客戶端訪問個數 max_clients=10 #設定單個客戶端的最大線程數,這個配置主要來照顧Flashget、迅雷等多線程下載軟件 max_per_ip=5 #設定該用戶的最大傳輸速率,單位b/s local_max_rate=1024000
重啟FTP服務
systemctl restart vsftpd systemctl stop vsftpd systemctl start vsftpd