寫在前面:一定添加下面的兩個虛擬用戶!
一、安裝VSFTP
1.為了方便后續操作,現將用戶切換到root用戶 su -
2.查看是否已經安裝vsftpd
方法一:
[root@localhost ~]# rpm -q vsftpd
vsftpd-3.0.2-22.el7.x86_64
方法二:
[root@localhost ~]# vsftpd -v
yum安裝vsftpd
[root@localhost ~]# yum -y install vsftpd
3.安裝完成后,查看位置
[root@localhost ~]# whereis vsftpd
vsftpd: /usr/sbin/vsftpd /etc/vsftpd /usr/share/man/man8/vsftpd.8.gz
4.直接啟動VSFTP服務
[root@localhost ~]# systemctl start vsftpd.service
[root@localhost ~]#
5.查看是否啟動成功
[root@localhost ~]# netstat -npal|grep vsftpd
tcp6 0 0 :::21 ::😗 LISTEN 4432/vsftpd
可以看到服務已經啟動,端口為21,pid為4432
6.關閉SELinux限制,添加防火牆白名單
①設置關閉SELinux對ftp的限制
[root@localhost ~]# getsebool -a | grep ftp
ftp_home_dir --> on
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> on
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
[root@localhost ~]# setsebool -P ftpd_full_access on
②將ftp加入防火牆白名單
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
查看防火牆狀態:firewall-cmd --list-all
二、配置修改
1.修改配置文件
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# vim vsftpd.conf
不允許匿名訪問(不登錄默認訪問某目錄/var/ftp)
anonymous_enable=NO
允許ascii文件上傳和下載
ascii_upload_enable=YES
ascii_download_enable=YES
將用戶限制在為其配置的主目錄
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
三、匿名登錄
匿名登陸
如果設置anonymous_enable=NO表示可以匿名登陸,保存后重新啟動vsftp服務systemctl restart vsftpd.service),即可以匿名登陸ftp服務(ftp ipaddr),密碼是空,對應目錄是/var/ftp,如果你在配置里面配置了anonymous_enable=NO,匿名就無法登錄。
四、多用戶配置
1.首先需要在vsftp.conf添加如下配置
#設置啟用虛擬用戶功能
guest_enable=YES
#制定宿主用戶名(我們后續需要為我們的系統增加該用戶)
guest_username=ftpuser
#制定虛擬用戶配置文件放置文件夾(需要我們自己建立)
user_config_dir=/etc/vsftpd/vuser_conf
#允許寫
allow_writeable_chroot=YES
2.創建宿主用戶
#創建宿主主文件夾
cd /home
mkdir vsftpd
創建用戶 ftpuser 指定 /home/vsftpd
目錄
-s /sbin/nologin ftpuser 表示不允許該用戶通過命令行方式登錄
useradd -g root -M -d /home/vsftpd -s /sbin/nologin ftpuser
# 設置用戶 ftpuser 的密碼
passwd ftpuser
# 把 /home/vsftpd 的所有權給ftpuser.root
chown -R ftpuser.root /home/vsftpd
3.創建虛擬用戶信息文件
vsftp目錄下
cd /etc/vsftpd/
創建用戶信息文件
touch vuser_passwd
vim vuser_passwd
#編輯如下內容,創建虛擬賬戶信息,奇數行為用戶名,偶數行為密碼
ftp-user1
123456
ftp-user2
123456
4.生成虛擬用戶數據文件
db_load -T -t hash -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db
chmod 600 /etc/vsftpd/vuser_passwd.db
在當前文件夾下生成一個vuser_passwd.db文件
5.編輯pam認證文件
vim /etc/pam.d/vsftpd
將其他都注釋掉,添加下面兩行;
注:db=/etc/vsftpd/vuser_passwd 中的vuser_passwd 是你生成的虛擬用戶的db文件,這里不要加擴展名。
系統為32位:
auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd account
required pam_userdb.so db=/etc/vsftpd/vuser_passwd
系統為64位:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
查看系統位數
getconf LONG_BIT
6.為虛擬賬戶創建訪問根目錄,要在宿主用戶下
下面是目錄結構
/home/vsftpd
├──ftp-user1
│ └── files
└──ftp-user2
└──files
修改權限
chmod 777 ftp-user1
chmod 777 ftp-user2
7.創建虛擬用戶配置目錄
cd /etc/vsftpd/
#創建上述配置文件中配置的虛擬用戶文件夾,一定要對應
mkdir vuser_conf
cd vuser_conf
#創建虛擬用戶配置文件,文件名稱要與虛擬用戶名稱相同
#這里我們配置兩個虛擬用戶就創建兩個配置文件
touch ftp-user1 ftp-user2
#編輯兩個文件,加入以下信息(注意加粗部分要替換為你虛擬賬戶要訪問的根目錄名稱)
local_root=/home/vsftpd/ ftp-user1
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
8.創建chroot_list
cd /etc/vsftpd
#創建使當前配置的虛擬用戶允許訪問
[root@localhost vsftpd]# touch chroot_list
[root@localhost vsftpd]# vim chroot_list
#寫入虛擬用戶名
ftp-user1
ftp-user2
9.重啟VSFTP服務
systemctl restart vsftpd.service
10.可以在windows中訪問測試,或者使用FileZilla連接
linux中測試
ftp 服務器地址
問題匯總:
1、解決報錯 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
添加配置
allow_writeable_chroot=YES # 如果啟用了限定用戶在其主目錄下需要添加這個配置。
2、登錄報錯530,日志顯示
pam_unix(vsftpd:auth): check pass; user unknown
檢查一下/etc/pam.d/vsftpd文件配置,一般是pam認證文件配置錯誤。
轉載自C N:小明同鞋
原文鏈接:https://blog.csdn.net/sinat_30802291/article/details/81706152