CentOS7环境下搭建vsftpd服务器
背景信息
FTP(File Transfer Protocol)是一种文件传输协议,基于客户端/服务器架构,支持以下两种工作模式:
- 主动模式:客户端向FTP服务器发送端口信息,由服务器主动连接该端口。
- 被动模式:FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接。
大多数FTP客户端都在局域网中,没有独立的公网IP地址,且有防火墙阻拦,主动模式下FTP服务器成功连接到客户端比较困难。因此,如无特殊需求,建议将FTP服务器配置为被动模式。
FTP支持以下三种认证模式:
- 匿名用户模式:任何人无需密码验证就可以直接登录到FTP服务器。这种模式最不安全,一般只用来保存不重要的公开文件,不推荐在生产环境中使用。
- 本地用户模式:通过Linux系统本地账号进行验证的模式,相较于匿名用户模式更安全。
- 虚拟用户模式:FTP服务器的专有用户。虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问Linux系统的其他资源,进一步增强了FTP服务器的安全性。
本文使用本地用户模式进行配置。
操作步骤
安装vsftpd
安装vsftpd
1
yum install -y vsftpd
如下图所示,出现此界面表示安装成功
配置FTP服务开机自启
1
systemctl enable vsftpd.service
启动FTP服务
1
systemctl start vsftpd.service
查看服务状态
如果有防火墙,开放ftp服务
1
2防火墙开放21端口
firewall-cmd --zone=public --add-port=21/tcp --permanent或者开放ftp服务
1
firewall-cmd --add-service=ftp --permanent
这两个随便执行哪个都可以
1
2刷新防火墙配置
firewail-cmd --reload
配置vsftpd
为保证数据安全,本文主要介绍被动模式下,使用本地用户访问FTP服务器的配置方法。
创建一个Linux用户
1
useradd -s /sbin/nologin ftpuser1
设置改用户的密码
1
passwd ftpuser1
创建FTP服务使用的目录
1
mkdir /var/ftp/work
创建测试文件
1
touch /var/ftp/work/testfile.txt
修改目录权限
1
chown -R ftpuser1:ftpuser1 /var/ftp/work
修改
vsftpd.conf
配置文件1
vim /etc/vsftpd/vsftpd.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30#禁止匿名登录FTP服务器。
anonymous_enable=NO
#允许本地用户登录FTP服务器。
local_enable=YES
#监听IPv4 sockets。
listen=YES
#关闭监听IPv6 sockets。
#listen_ipv6=YES
#在配置文件的末尾添加下列参数:
#设置本地用户登录后所在目录。
local_root=/var/ftp/work
#全部用户被限制在主目录。
chroot_local_user=YES
#启用例外用户名单。
chroot_list_enable=YES
#指定例外用户列表文件,列表中用户不被锁定在主目录。
chroot_list_file=/etc/vsftpd/chroot_list
#开启被动模式。
pasv_enable=YES
allow_writeable_chroot=YES
#设置FTP服务的IP。
pasv_address=<FTP服务器公网IP地址>
#设置被动模式下,建立数据传输可使用的端口范围的最小值。
#建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
pasv_min_port=<port number>
#设置被动模式下,建立数据传输可使用的端口范围的最大值。
pasv_max_port=<port number>创建
chroot_list
文件,在文件中可以指定例外的用户,这里我设置为空1
touch /etc/vsftpd/chroot_list
安装ftp客户端,本地进行测试
1
yum install -y ftp
本地连接ftp服务进行测试
1
ftp <你自己服务器的IP>
常见问题
530问题
如果出现530错误提示,需要修改/etc/pam.d/vsftpd
,注释这一行
1 | auth required pam_shells.so |
然后重启ftp服务
1 | systemctl restart vsftpd |
500 OOPS问题
手动创建chroot_list
文件
1 | touch /etc/vsftpd/chroot_list |
然后再重新连接就可以了。