步骤一:检查是否安装vsftpd并安装
1.安装vsftpd
# 首先要查看你是否安装vsftpd
rpm -qa | grep vsftpd
vsftpd-3.0.2-10.el7.x86_64
# 显示也就安装成功了!直接进入下一环节吧
# 安装vsftpd
yum install -y vsftpd
2.运行以下命令设置FTP服务开机自启动。
systemctl enable vsftpd.service
3.运行以下命令启动FTP服务。
systemctl start vsftpd.service
4.运行以下命令查看FTP服务监听的端口。
netstat -antup | grep ftp
出现如下图所示界面,表示FTP服务已启动,监听的端口号为21。
此时,vsftpd默认已开启本地用户模式,您还需要继续进行配置才能正常使用FTP服务。
步骤二:配置vsftpd
本示例提供两种方式配置vsftpd:匿名用户模式或本地用户模式
方式一:配置匿名用户上传文件权限。
- 修改配置文件/etc/vsftpd/vsftpd.conf。
- 运行以下命令更改/var/ftp/pub目录的权限,为FTP用户添加写权限。/var/ftp/pub为FTP服务默认的文件目录。
chmod o+w /var/ftp/pub/
- 运行以下命令重新加载配置文件。
systemctl restart vsftpd.service
方式二:配置本地用户访问FTP服务器。
- 运行以下命令为FTP服务创建一个Linux用户。本示例中,该用户名为ftptest。
adduser ftptest
- 运行以下命令修改ftptest用户的密码。
passwd ftptest
- 运行以下命令创建一个供FTP服务使用的文件目录。
mkdir /var/ftp/test
- 运行以下命令更改/var/ftp/test目录的拥有者为ftptest。
chown -R ftptest:ftptest /var/ftp/test
- 修改vsftpd.conf配置文件。
- 运行以下命令打开配置文件。
vim /etc/vsftpd/vsftpd.conf
- 按i进入编辑模式。
- 根据如下内容,修改或添加相关配置参数。
注意 修改和添加配置文件内的信息时,请注意格式问题。例如,添加多余的空格会造成无法重启服务的结果。
#除下面提及的参数外,其他参数保持默认值即可。 #修改下列参数的值 #禁止匿名登录FTP服务器 anonymous_enable=NO #允许本地用户登录FTP服务器 local_enable=YES #监听IPv4 sockets listen=YES #在行首添加#注释掉以下参数,关闭监听IPv6 sockets #listen_ipv6=YES #添加下列参数 #设置本地用户登录后所在目录 local_root=/var/ftp/test #全部用户被限制在主目录 chroot_local_user=YES #启用例外用户名单 chroot_list_enable=YES #指定例外用户列表文件,列表中用户不被锁定在主目录 chroot_list_file=/etc/vsftpd/chroot_list #开启被动模式 pasv_enable=YES allow_writeable_chroot=YES #本教程中为Linux实例公网IP pasv_address=<FTP服务器公网IP地址> #设置被动模式下,建立数据传输可使用的端口范围的最小值 pasv_min_port=<port number> #设置被动模式下,建立数据传输可使用的端口范围的最大值 pasv_max_port=<port number>
说明 建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
- 按Esc退出编辑模式,然后输入:wq并回车以保存并关闭文件。
- 运行以下命令打开配置文件。
- 创建chroot_list文件,并在文件中写入例外用户名单。
说明 没有例外用户时,也必须创建chroot_list文件,内容可为空。
- 运行以下命令创建chroot_list文件。
vim /etc/vsftpd/chroot_list
- 按i进入编辑模式。
- 输入例外用户名单。此名单中的用户不会被锁定在主目录,可以访问其他目录。
- 按Esc退出编辑模式,然后输入:wq并回车以保存并关闭文件。
- 运行以下命令创建chroot_list文件。
7.运行以下命令重启vsftpd服务。
systemctl restart vsftpd.service
步骤三:客户端测试
这里用到了filezilla,下载并安装https://www.filezilla.cn/download/client
但是到了这步我连接失败
如果连接成功,后边的就不用看了。
——————————————————————————————————————————————————————————————————————————————————————————
以下都是为了解决FTP连接不到的问题。
端口21连接不到服务器,但是端口22可以连接到。
步骤一:在服务器端用telnet命令查看是否正常
telnet <换成自己服务器IP> 21
发现自己的cenos系统没有安装telnet服务
1.检查是否安装telnet和telnet-server
rpm -qa | grep telnet
rpm -qa telnet-server
上两张图表示安装了,如果没安装没有任何反应。
2.如果安装了忽略,如果没安装 就执行安装了
yum -y install telnet
yum install telnet-server
PS:telnet-server服务启动需依赖xinetd服务,这里我们继续安装xinetd服务
1.查看是否安装了xinetd
rpm -qa | grep xinetd
上图为已安装
2.安装xinetd
yum -y install xinetd
安装完成后准备开启服务,再开启服务之前,要先去修改文件/etc/xinetd.d/telnet来开启服务 这个文件可能不存在 直接vim创建就可以了
修改参数 disable = yes 为 disable = no
文件完整内容为
# default: yes
# # description: The telnet server servestelnet sessions; it uses \
# # unencrypted username/password pairs for authentication.
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server =/usr/sbin/in.telnetd
log_on_failure += USERID
disable = no
}
保存后退出。
3.启动xinetd 服务
在centos7之前: server xinetd restart
在centos7中(无xinetd的service启动项):systemctl restart xinetd.service
4.看看我们是不是成功了
因为走的是TCP的23号端口
netstat -tnl |grep 23
以上为telnet服务和xinetd服务安装
————————————————————————————————————————————————————————————————————————————————
到这里还是链接不上,后来一顿百度后,发现是阿里云安全组作怪。
设置安全组
搭建好FTP站点后,在实例安全组的入方向添加规则并放行下列FTP端口。具体步骤,请参见添加安全组规则。
说明 大多数客户端位于局域网中,IP地址是经过转换的,因此ipconfig或ifconfig命令返回的IP不一定是客户端的真实公网IP地址。若后续客户端无法登录FTP服务器,请重新确认其公网IP地址。
FTP被动模式需要开放端口,配置详情如下表所示。
规则方向 | 授权策略 | 协议类型 | 端口范围 | 授权对象 |
---|---|---|---|---|
入方向 | 允许 | 自定义TCP | 21/21 | 所有要访问FTP服务器的客户端公网IP地址,多个地址之间用逗号隔开。 允许所有客户端访问时,授权对象为0.0.0.0/0。 |
入方向 | 允许 | 自定义TCP | 不同模式的开放端口范围如下:
| 所有要访问FTP服务器的客户端公网IP地址,多个地址之间用逗号隔开。 允许所有客户端访问时,授权对象为0.0.0.0/0。 |
因为我选择的是本地用户模式,所以我安全策略除了添加了个21/21还加了vsftpd.conf中设置的50000/50010
配置完后,发现可以连接了,但是又遇到个坑,到读取目录列表...这步之后,一直提示服务器发回了不可路由的地址。使用服务器地址代替。
按照网上的各种方法一顿尝试后还是不行,无奈之下提交了阿里云工单。
最后结果是需要在安全策略规则组中添加1024/65535这个端口范围,最终连接成功了。
测试上传下载都正常,虽然问题最终解决了,但是为什么文档中写着匿名才需要配置1024/65535端口,而本地用户是设置vsftpd.conf中设置的min_port和max_port范围,根据文档中的配置无法成功,步骤二之后的FTP配置是阿里云官网的FTP配置文档,这里要想吐槽一下,太坑了真是~~~有知道这是为什么的小伙伴可以评论解释一下,在此谢谢了~!
——————————————————————————————————————————————————————————————————————————————————————
又遇到新问题,回来补充一下,上面的内容是服务器linux防火墙没开启,开启后FTP又连接不上了,连接超时,经过一顿查询解决了,把解决方法记录下来
顺便上面那个为什么要配置1024/65535端口问题我提问阿里云工单得到答案了,说是被动模式下的FTP必须在安全组配置1024/65535这个范围端口。
步骤一:在防火墙firewalld开放21端口
# 开放端口
firewall-cmd --zone=public --add-port=21/tcp --permanent
# 重新载入
firewall-cmd --reload
# 查看所有开放的端口
firewall-cmd --zone=public --list-ports
做完这步后,可以连接上了,但是又出现服务器发回了不可路由的地址。使用服务器地址代替这个问题
接着往下操作。
步骤二:在防火墙iptables开放21端口
查询iptables服务状态
systemctl status iptables.service
在操作iptables服务时提示服务不存在
安装iptables-service
yum install iptables-services
启用iptables
systemctl enable iptables
管理iptablse
服务(这步这里我报错了,尝试跳过了这步,没有做这步)
systemctl [stop|start|restart] iptables
关闭selinux
,修改/etc/sysconfig/selinux
文件
SELINUX=disabled
SELINUXTYPE=targeted
添加21端口在/etc/sysconfig/iptables
下
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
网上还有一种写法是
iptables -I INPUT 5 -p tcp --dport 21 -j ACCEPT
开始我用这个命令,报错什么数太大,网上给我答案是把5换成1,试了下好像可以,但是我还是用了上面那个命令操作的。
重启iptables
sudo service iptables restart
操作完后FTP又正常连接了。