1 安装Vsftpd服务
# yum install vsftpd -y
vsftp虚拟用户是为了保证FTP服务器的安全性,由vsftpd服务器提供的非系统用户账号,
相对于FTP的本地用户来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP
服务器所提供的资源。虚拟用户FTP登录后将把指定的目录作为FTP根目录。虚拟用户与本
地用户具有类似的功能,由于虚拟用户账号具有较高的安全性,可以替代本地用户账号使用。
2 创建vsftpd使用的系统用户,主目录为/home/vsftpd,禁止ssh登录, 创建之后所有
虚拟用户使用这个系统用户访问文件
# useradd vsftpd -d /vsftpd -s /bin/false
# ls -ld /vsftpd/
drwx------ 2 vsftpd vsftpd 62 Feb 2 15:34 /vsftpd/
3 创建虚拟用户主目录,比如虚拟用户叫ftp1
# mkdir -p /vsftpd/ftp1/
# mkdir -p /vsftpd/ftp2/
# chown -R vsftpd.vsftpd /vsftpd/*
# ls -l /vsftpd/
total 0
drwxr-xr-x 2 vsftpd vsftpd 6 Feb 2 15:35 ftp1
drwxr-xr-x 2 vsftpd vsftpd 6 Feb 2 15:35 ftp2
4 创建虚拟用户
# vi /etc/vsftpd/loginusers.conf
ftp1
123456
ftp2
456789
这样就创建了ftp1这个虚拟用户,密码为 123456
这样就创建了ftp2这个虚拟用户,密码为 456789
5 创建数据库文件
# db_load -T -t hash -f /etc/vsftpd/loginusers.conf /etc/vsftpd/loginusers.db
# chmod 600 /etc/vsftpd/loginusers.db
# chmod 600 /etc/vsftpd/loginusers.conf
6 启用数据库文件
# vi /etc/pam.d/vsftpd # 注释掉所有内容后,增加下面的内容
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/loginusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/loginusers
7 创建虚拟用户配置文件
# mkdir -p /etc/vsftpd/userconf
这里的文件名称必须与虚拟用户名一致
# vi /etc/vsftpd/userconf/ftp1
local_root=/vsftpd/ftp1
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
# vi /etc/vsftpd/userconf/ftp2
local_root=/vsftpd/ftp2
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 修改主配置文件
# vi /etc/vsftpd/vsftpd.conf
#禁止匿名登录FTP服务器
anonymous_enable=NO
#允许本地用户登录FTP服务器
local_enable=YES
#可以上传(全局控制)
write_enable=YES
#允许下载
#download_enable=YES
#本地用户上传文件的umask
local_umask=022
#设置本地用户登录后所在目录
#local_root=/var/ftp/test
#全部用户被限制在主目录
chroot_local_user=YES
#允许对FTP根目录执行写入操作
allow_writeable_chroot=YES
#是否在进入新目录时显示 message_file 文件中的内容
dirmessage_enable=YES
#启用日志
xferlog_enable=YES
#vsftpd主动模式下开启的数据端口,在被动模式下不启动
connect_from_port_20=YES
#日志是否进行格式化
xferlog_std_format=YES
#监听的端口号
listen_port=21
#监听本地所有端口,默认监听本地所有端口
listen_address=0.0.0.0
#独立服务
listen=YES
#centos7增加此设置,关闭ipv6本地监听,默认监听ipv4和ipv6地址
listen_ipv6=NO
#认证模式
pam_service_name=vsftpd
#启用用户列表
userlist_enable=YES
#启用tcp_wrappers
tcp_wrappers=YES
#开启被动模式
pasv_enable=YES
#FTP服务器公网IP(也就是当前阿里云服务器的公网 IP)
#pasv_address=120.xx.xx.xx
#设置被动模式下,建立数据传输可使用port范围的最小值
pasv_min_port=10000
#设置被动模式下,建立数据传输可使用port范围的最大值
pasv_max_port=10088
guest_enable=YES
# 启动虚拟用户
guest_username=vsftpd
# 虚拟用户使用的系统用户名
user_config_dir=/etc/vsftpd/userconf
# 虚拟用户使用的配置文件目录
9 重启服务使配置生效
# systemctl restart vsftpd
10 测试
(1) ftp1用户
(2) ftp2用户
11 补充
(1) 创建用户并指定家目录
[root@slavenode1 ~]# mkdir -p /data/ftproot
[root@slavenode1 ~]# useradd -s /sbin/nologin -M virtual
[root@slavenode1 ~]# usermod -d /data/ftproot virtual
[root@slavenode1 ~]# chown -R virtual.virtual /data/ftproot/
[root@slavenode1 ~]# ls -ld /data/ftproot/
drwxr-xr-x 2 virtual virtual 6 Feb 2 01:27 /data/ftproot/
等价于
# useradd -d /data/ftproot -s /sbin/nologin virtual
# chmod -R 755 /data/ftproot/
# chown -R virtual.virtual /data/ftproot/