1 安装
现查看一下系统版本,确定适用的vsftpd版本
$ cat /etc/centos-release
CentOS Linux release 7.5.1804 (Core)
下载rpm包,然后安装
$ sudo su -
# rpm -ivh vsftpd-3.0.2-28.el7.x86_64.rpm
默认安装位置
# which vsftpd
/usr/sbin/vsftpd
# vsftpd -v
vsftpd: version 3.0.2
2 配置vsftpd
由于采用虚拟用户登录ftp server,先配置虚拟用户
在/etc/vsftpd
目录下创建一个vusers文件,记录ftp的虚拟用户名和密码,单行是用户名,双行是密码。文件名可以任意指定。我在文件中创建了一个虚拟用户ftptest
,密码是ftptest123
,如下所示:
# vim /etc/vsftpd/vusers
ftptest
ftptest123
然后使用db_load命令生成相应的认证数据文件,同样数据文件的名字可以任意指定,我这里把文件名命名为vusers.db
# db_load -T -t hash -f /etc/vsftpd/vusers /etc/vsftpd/vusers.db
然后配置一个vsftpd的pam文件,因为ftp虚拟用户的权限认证是委托给pam模块进行认证的,这个文件指定pam使用上面生成的vusers.db
数据库进行权限认证
# vim /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
上面pam_userdb.so
是pam具体执行认证的模块,db指定我们上面生成的vusers.db
文件,注意,由于pam会自动在db文件后面添加.db
后缀,所以需要填写.db
后缀
编辑vsftpd.conf配置文件
# vim /etc/vsftpd/vsftpd.conf
########## 全局配置 ##########
listen=YES
connect_from_port_20=YES
#pasv 传输方式端口上下限
pasv_min_port=61000
pasv_max_port=62000
write_enable=YES
local_umask=022
dirmessage_enable=NO
userlist_enable=YES
tcp_wrappers=YES
#设置禁止用户跳出主目录
chroot_local_user=NO
#设置允许特殊用户跳出主目录
chroot_list_enable=YES
#设置特殊用户配置文件
chroot_list_file=/etc/vsftpd/chroot_list
########## 日志 ##########
xferlog_enable=YES
xferlog_std_format=YES
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
log_ftp_protocol=YES
########## 匿名用户配置 ##########
#禁止匿名用户访问
anonymous_enable=NO
#指定匿名用户访问根目录
anon_root=/home/ftp/ftptest
#匿名用户允许上传文件
anon_upload_enable=NO
#匿名用户不允许创建文件夹
anon_mkdir_write_enable=NO
#匿名用户不允许删除/更名文件/文件夹
anon_other_write_enable=NO
#匿名用户代理系统用户
ftp_username=ftp
########## 虚拟用户配置 ##########
# 设置运行本地用户登录
local_enable=YES
# 开启虚拟用户登录
guest_enable=YES
#指定pam 服务名称, 和/etc/pam.d 目录下的文件vsftpd 保持一致
pam_service_name=vsftpd
# 设置虚拟用户代理系统用户名
guest_username=ftp
# 设置默认登录路径
local_root=/home/ftp/ftptest
# 设置具体用户配置文件目录
user_config_dir=/etc/vsftpd/vusers_conf
还可以为每个虚拟用户设定单独的配置文件,该文件中的配置会覆盖/etc/vsftpd/vsftpd.conf
文件中的配置
# 虚拟用户的配置文件统一放在vusers_conf目录下
# mkdir -p /etc/vsftpd/vusers_conf
# 为虚拟用户ftptest创建一个配置文件,文件名就是虚拟用户的名字
# vim /etc/vsftpd/vusers_conf/ftptest
# 设定根目录
local_root=/home/ftp/ftptest
# 设定权限,不拥有和代理系统用于同样的权限
virtual_use_local_privs=YES
# 允许上传文件
write_enable=YES
3 启动
编辑vsftpd.service
文件
# cat /usr/lib/systemd/system/vsftpd.service
[Unit]
Description=Vsftpd ftp daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Restart=on-failure
[Install]
WantedBy=multi-user.target
启动
# systemctl daemon-reload
# systemctl enable etcd.service
# systemctl start etcd.service
验证正常启动
# lsof -i :21
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vsftpd 23431 root 4u IPv4 2474859639 0t0 TCP *:ftp (LISTEN)