众所周知,文件共享为大家提供了便利,但是文件共享的配置也是比较麻烦。
刚好博主在前些天有在CentOS7下搭建过一次FTP服务,现在把它写下来做个记录。

FTP(File Transfer Protocol)即文件传输协议,是一种基于TCP的协议,采用客户/服务器模式。通过FTP协议,用户可以在FTP服务器中进行文件的上传或下载等操作。虽然现在通过HTTP协议下载的站点有很多,但是由于FTP协议可以很好地控制用户数量和宽带的分配,快速方便地上传、下载文件,因此FTP已成为网络中文件上传和下载的首选服务器。同时,它也是一个应用程序,用户可以通过它把自己的计算机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息。FTP服务的功能是实现完整文件的异地传输。

(一)FTP使用两个平行连接:控制连接和数据连接。控制连接在两主机间传送控制命令,如用户身份、口令、改变目录命令等。数据连接只用于传送数据。
(二)在一个会话期间,FTP服务器必须维持用户状态,也就是说,和某一个用户的控制连接不能断开。另外,当用户在目录树中活动时,服务器必须追踪用户的当前目录,这样,FTP就限制了并发用户数量。
(三)FTP支持文件沿任意方向传输。当用户与一远程计算机建立连接后,用户可以获得一个远程文件也可以将一本地文件传输至远程机器。

ftp网络协议的两种模式

FTP网络协议是给用户提供网络文件传输的一种服务,当搭建完成ftp服务后,客户能通过网络上传、下载、管理服务器上的文件。

FTP网络协议有下面两种工作模式。

主动模式:FTP服务器主动向客户端发起连接请求。(很少有人用了)

被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式,服务器搭建ftp服务都采用这种模式)。

ftp后台和前端
后端:就是搭建在服务器上的时时提供文件下载功能的服务程序,Linux大多使用vsftpd服务。
前端:就是客户连接后台服务,下载文件的图形化和命令行工具。可以是各种浏览器或者ftp工具。

vsftpd服务的三种模式
vsftpd服务有匿名开放模式本地用户模式虚拟用户模式

匿名开放模式
是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器。

本地用户模式
是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果被黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。

虚拟用户模式
是这三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。

正片开始

博主使用的是CentOS7安装的vsftpd,首先安装vsftpd。

yum install vsftpd -y      //如果安装失败请先执行update

首先可以在防火墙上放行规则,也可以清空规则。

# 关闭iptables防火墙
iptables -F
service iptables save

# 关闭firewall防火墙
systemctl stop firewalld
systemctl disable firewalld

接下来就是vsftpd的配置,博主使用得是vsftpd的本地用户模式,即是linux用户作为ftp用户,但是要注意的是ftp用户可限制为不可ssh登录。
配置vsftpd配置文件

#备份配置文件
cp vsftpd.conf vsftpd.conf_default
#修改下列参数的值
anonymous_enable=NO #禁止匿名登录FTP服务器
local_enable=YES #允许本地用户登录FTP服务器
listen=YES #监听IPv4 sockets
#listen_ipv6=YES #关闭监听IPv6 sockets或者改为NO
chroot_local_user=YES #全部用户被限制在主目录
chroot_list_enable=YES #启用例外用户名单
chroot_list_file=/etc/vsftpd/chroot_list #指定例外用户列表文件,列表中用户不被锁定在主目录
allow_writeable_chroot=YES

可以使用下面命令修改上面所需要修改的数据
以上配置可以直接用下面命令进行替换修改

sed -i 's/anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd/vsftpd.conf

sed -i 's/listen=NO/listen=YES/' /etc/vsftpd/vsftpd.conf

sed -i 's/listen_ipv6=YES/listen_ipv6=NO/' /etc/vsftpd/vsftpd.conf

sed -i 's/#chroot_local_user=YES/chroot_local_user=YES/' /etc/vsftpd/vsftpd.conf

sed -i 's/#chroot_list_enable=YES/chroot_list_enable=YES/' /etc/vsftpd/vsftpd.conf
//chroot_local_user=YES 和 chroot_list_enable=YES ,所以没有写进 chroot_list 中的用户都会被限制在当前用户目录下,不能往上一级切换

sed -i 's/#chroot_list_file=/chroot_list_file=/' /etc/vsftpd/vsftpd.conf

echo "allow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf

接下来创建ftp用户
创建ftp用户 例如ysshftp

useradd -d /home/ysshftp -s /sbin/nologin ysshftp     //创建用户但禁止登录ssh

passwd ysshftp
设置密码

接下来启动vsftpd服务,并设置开机自启动

systemctl enable vsftpd
systemctl start vsftpd

此时已经搭建和配置完成,但是可能会遇到某些问题,所以下面是一些坑和解决办法。

踩坑和解决办法

1、输入正确的用户名密码提示530错误

解决办法vi /etc/pam.d/vsftpd
注释掉这一行

auth required pam_shells.so

然后重启vsftpd服务即可

2、提示500 OOPS:could not read chroot() list file://etc/vsftpd/chroot_list. Login failed

解决办法:手动在/etc/vsftpd/目录下创建一下chroot_list文件即可

touch /etc/vsftpd/chroot_list      //后重新登录,可以正常登录了

3、使用cd命令能够跳出用户目录
解决办法:需要将selinux关闭
关闭SELinux,关闭这个对用户目录限制有需要。

#修改selinux配置文件
vi /etc/selinux/config
找到SELINUX=enforcing,按i进入编辑模式,将参数修改为SELINUX=disabled

修改完selinux后需要重启

Last modification:May 1st, 2022 at 03:28 pm