安装vsftpd

一、安装ftp服务

yum install -y vsftp
# 安装虚拟用户数据库
yum -y install libdb-utils

二、增加一个系统用户‘virftp’ ,所有虚拟用户都会映射到此用户后对文件系统进行读写操作

# 添加用户,用户登录时使用nologin
useradd -s /sbin/nologin virftp
# 设置用户密码
passwd virftp

三、配置vsftp主配置文件

# 备份vsftpd主配置文件
cp /etc/vsftpd/vsftpd.conf{,.bak}
# 查看过滤配置文件注释后内容
grep -v "#" /etc/vsftpd/vsftpd.conf
vim /etc/vsftpd/vsftpd.conf

# 禁止匿名用户登录
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 启用虚拟账户
guest_enable=YES
# 把虚拟账户映射到系统账户virftp
guest_username=virftp
# 使用虚拟用户验证(PAM验证)
pam_service_name=vsftpd
# 设置存放各虚拟用户配置文件的目录(此目录下与虚拟用户名相同的文件为它的配置文件)
user_config_dir=/etc/vsftpd/vsftpd_viruser
# 启用chroot时,虚拟用户根目录允许写入
allow_writeable_chroot=YES#被动模式,文件传输端口的最大最小范围
pasv_min_port=30000
pasv_max_port=35000

四、配置vsftpd pam验证文件

# 备份
cp /etc/pam.d/vsftpd{,.bak}
# 将auth及account的所有配置行均注释掉,再添加如下两行
vim /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/vir_user
account required pam_userdb.so db=/etc/vsftpd/vir_user

五、配置虚拟用户访问vsftpd服务

# 创建虚拟用户密码文件(奇数行为帐号,偶数行为密码)
vim /etc/vsftpd/vir_user
test01
pwd_test01
test02
pwd_test02

六、配置虚拟用户各自的配置文件

#创建‘虚拟用户配置文件’的存放目录
mkdir /etc/vsftpd/vsftpd_viruser/

#创建和配置虚拟用户各自的配置文件(文件名称是‘虚拟用户名’)
vim /etc/vsftpd/vsftpd_viruser/test01

# 允许写入
write_enable=YES
#允许浏览FTP目录和下载
anon_world_readable_only=NO
#禁止用户下载
#download_enable=NO
# 允许虚拟用户上传文件
anon_upload_enable=YES
# 允许虚拟用户创建目录
anon_mkdir_write_enable=YES
# 允许虚拟用户执行其他操作(如改名、删除)
anon_other_write_enable=YES
# 上传文件的掩码,如022时,上传目录权限为755,文件权限为644
anon_umask=022
# 指定虚拟用户的虚拟目录(虚拟用户登录后的主目录,即登录ftp后访问的根目录)
local_root=/home/virftp/test01

七、生成虚拟用户数据库

db_load -T -t hash -f /etc/vsftpd/vir_user  /etc/vsftpd/vir_user.db
chmod 700 /etc/vsftpd/vir_user.db

八、创建虚拟用户的根目录,要保证虚拟用户映射的系统用户,对这个根目录有读写权限

#创建虚拟用户对应根目录
mkdir -p /home/virftp/test01
#修改目录权限
chown -R virftp.virftp /home/virftp/test01

九、重启服务

systemctl restart vsftpd
#开放端口
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --zone=public --add-port=30000-35000/tcp --permanent
firewall-cmd --reload

注:若添加新虚拟用户,创建用户对应根目录文件夹、在/etc/vsftpd/vsftpd_viruser/目录下创建用户名为文件名的配置文件,/etc/vsftpd/vir_user文件中添加帐号密码

# 再执行
db_load -T -t hash -f /etc/vsftpd/vir_user /etc/vsftpd/vir_user.db
# 重启服务
systemctl restart vsftpd

#被动模式,文件传输端口的最大最小范围

pasv_min_port=30000
pasv_max_port=35000

#如果出现500 OOPS: cannot change directory的异常,则尝试执行

setsebool -P allow_ftpd_full_access on
setsebool -P tftp_home_dir on