环境准备:

1.系统环境

  1. [root@wk ~]# uname -r
  2. 3.10.0-1062.el7.x86_64
  3. [root@wk ~]# cat /etc/redhat-release
  4. CentOS Linux release 7.7.1908 (Core)

2.关闭selinux和iptables

[root@wk ~]# getenforce 
Disabled

安装部署

1.安装相关软件包

yum install -y vsftpd
#虚拟用户必要程序
yum install -y pam* db4*

2.修改配置文件vim /etc/vsftpd/vsftpd.conf

reverse_lookup_enable=NO
#不进行DNS反解析,解决登录验证慢的问题
anonymous_enable=NO
#设定不允许匿名访问
local_enable=YES
#设定本地用户可以访问。注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问。
write_enable=YES
#设定可以进行写操作。
local_umask=022
#设定上传后文件的权限掩码。
anon_upload_enable=NO
#禁止匿名用户上传。
anon_mkdir_write_enable=NO
#禁止匿名用户建立目录。
dirmessage_enable=YES
#设定开启目录标语功能。
xferlog_enable=YES
#设定开启日志记录功能。
connect_from_port_20=YES
#设定端口20进行数据连接。(主动模式)
chown_uploads=NO
#设定禁止上传文件更改宿主。
#chown_username=whoever
xferlog_file=/var/log/xferlog
#设定Vsftpd的服务日志保存路径。注意,该文件默认不存在。必须要手动touch出来,并且由于这里更改了Vsftpd的服务宿主用户为手动建立的Vsftpd。必须注意给与该用户对日志的写入权限,否则服务将启动失败。
xferlog_std_format=YES
#设定日志使用标准的记录格式。
#idle_session_timeout=600
#设定空闲连接超时时间,单位为秒,这里默认。
#data_connection_timeout=120
#设定空闲连接超时时间,单位为秒,这里默认
#nopriv_user=ftptest
allow_writeable_chroot=YES
#允许使用主目录
async_abor_enable=YES
#设定支持异步传输功能。

ascii_upload_enable=YES
ascii_download_enable=YES
#设定支持ASCII模式的上传和下载功能。

ftpd_banner=Welcome to blah FTP service.
#设定Vsftpd的登陆标语。

#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails

chroot_list_enable=NO
#禁止用户登出自己的FTP主目录。

# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list

ls_recurse_enable=NO
#禁止用户登陆FTP后使用"ls -R"的命令。该命令会对服务器性能造成巨大开销。如果该项被允许,那么挡多用户同时使用该命令时将会对该服务器造成威胁。
listen=YES
#设定该Vsftpd服务工作在StandAlone模式下
#listen_ipv6=YES

userlist_enable=YES
#设定userlist_file中的用户将不得使用FTP。
#userlist_deny=NO
tcp_wrappers=YES
#设定支持TCP Wrappers
chroot_local_user=YES
#禁止用户登出自已的目录
#下边是关于虚拟用户的重要配置
guest_enable=YES
#设定启用虚拟用户功能。
guest_username=virtualhost
#指定虚拟用户的宿主用户。
virtual_use_local_privs=YES
#设定虚拟用户的权限符合他们的宿主用户。
pam_service_name=vsftpd
#设定PAM服务下Vsftpd的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。
user_config_dir=/etc/vsftpd/virtualconf
#设定虚拟用户个人Vsftp的配置文件存放路径。也就是说,这个被指定的目录里,将存放每个Vsftp虚拟用户个性的配置文件,一个需要注意的地方就是这些配置文件名必须和虚拟用户名相同。

3.创建virtualhost系统用户

useradd virtualhost -s /sbin/nologin

4.创建日志文件

touch /var/log/vsftpd.log
chown virtualhost.virtualhost /var/log/vsftpd.log

5.创建存放虚拟用户的配置目录

mkdir /etc/vsftpd/virtualconf

6.创建虚拟用户u1/u2,奇行是用户名,偶行是密码。

vim /etc/vsftpd/virtusers
u1
123456
u2
123456

7.将明文用户密码文件加密生成/etc/vsftpd/virtusers.db

db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

8.修改vsftpd的pam文件,/etc/pam.d/vsftpd,注释旧的内容,最后加入以下两行

vim /etc/pam.d/vsftpd
#%PAM-1.0
#session    optional     pam_keyinit.so    force revoke
#auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth       required    pam_shells.so
#auth       include     password-auth
#account    include     password-auth
#session    required     pam_loginuid.so
#session    include     password-auth
auth    sufficient      /lib64/security/pam_userdb.so     db=/etc/vsftpd/virtusers
account sufficient      /lib64/security/pam_userdb.so     db=/etc/vsftpd/virtusers

9.创建虚拟ftp文件存放路径,u1/u2用户的家目录,授权用户和用户组为虚拟用户virtualhost

mkdir /data/ftpdata/
mkdir /data/ftpdata/u1
mkdir /data/ftpdata/u2
chown -R virtualhost.virtualhost /data/ftpdata/

创建一个用户的模板vconf.tmp文件,创建用户的时候可以基于这个模板,在进行修改。

[root@wk virtualconf]# vim /etc/vsftpd/virtualconf/vconf.tmp
local_root=/opt/vsftp/virtuser
#指定虚拟用户的具体主路径。
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
#设定并发客户端访问个数。
max_per_ip=5
#设定单个客户端的最大线程数,这个配置主要来照顾Flashget、迅雷等多线程下载软件。
local_max_rate=50000
#设定该用户的最大传输速率,单位b/s。

10.配置u1虚拟用户的ftp配置文件

vim /etc/vsftpd/virtualconf/u1
local_root=/data/ftpdata/u1
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=300
data_connection_timeout=90

11.同理创建u2虚拟用户的配置文件

vim /etc/vsftpd/virtualconf/u2
local_root=/data/ftpdata/u2
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=300
data_connection_timeout=90

12.设置ftp开启自启动,及启动ftp服务

[root@wk ~]# systemctl restart vsftpd
[root@wk ~]# systemctl enable vsftpd

测试验证

1.测试登录u1用户上传文件

vsftpd搭建-虚拟用户 - 图4

2.测试登录u2用户上传文件

vsftpd搭建-虚拟用户 - 图5

3.查看服务器目录文件

vsftpd搭建-虚拟用户 - 图6

参考文档:https://blog.csdn.net/aiynmimi/article/details/77012507