FTP(File Transfer Protocol)是一种文件传输协议,基于客户端/服务器架构,支持以下两种工作模式:
主动模式(PORT):客户端向FTP服务器发送端口信息,由服务器主动连接该端口。
被动模式(PASV):FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接。
FTP支持以下三种认证模式:
匿名用户模式:任何人无需密码验证就可以直接登录FTP服务器。该模式不安全,一般只用来传输不重要的公开文件,不推荐在生产环境中使用。
本地用户模式:通过Linux系统本地用户验证登录权限,相较于匿名用户模式更安全。
虚拟用户模式:通过虚拟用户验证登录权限,虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问Linux系统的其它资源。该模式相较于其他两种模式更加安全,如果您对服务器的数据有较高的安全性要求,建议在相关专业人员的指导下,自行配置该模式。
Liunx系统下有好几款很不错的ftp服务,比如ProFTPD,Pure-FTPd各有特点,适应于不同的应用场合。一般在linux发行版中,默认带有的ftp软件是vsftp(非常安全的ftp)
本文是针对CentOs7系统下搭建vsftpd服务,本地用户模式
部分使用应用镜像部署的轻量应用服务器已经预安装了vsftpd,如果再次安装可能会出现冲突。使用命令,如果没有回显说明没有安装对应服务
rpm -qa | grep vsftpd
--或者 vsftp -v
如果有配置本地yum源或者有服务器是联网的,可以直接使用安装
yum install -y vsftpd
如果离线不会配置本地yum源,可以参考下面的文章
centos7或centos8配置本地yum源_小小白下士的博客-CSDN博客
使用yum安装的好处就是会解决依赖包的问题。
systemctl start vsftpd.service
systemctl enable vsftpd.service
--创建FTP用户
adduser ftptest1
--修改密码
passwd ftptest1
--创建一个给ftp服务使用的目录
mkdir /var/ftp/test1
--更改所有者权限
chown -R ftptest1:ftptest1 /var/ftp/test1
修改配置文件/etc/vsftpd/vsftpd.conf。
如果您在安装vsftpd时,使用的是apt install vsftpd安装命令,则配置文件路径为/etc/vsftpd.conf。
vim /etc/vsftpd/vsftpd.conf
(1)修改里面对应的参数
#禁止匿名登录FTP服务器。
anonymous_enable=NO
#监听IPv4 sockets。
listen=YES(2)注释参数,关闭监听IPv6 sockets
#listen_ipv6=YES
(3)最后添加行
#设置本地用户登录后所在目录。
local_root=/var/ftp/test1
#全部用户被限制在主目录。
chroot_local_user=YES(4)其他参数可以自行配置(略)
#启用例外用户名单。
chroot_list_enable=YES
#指定例外用户列表文件,列表中用户不被锁定在主目录。
chroot_list_file=/etc/vsftpd/chroot_list
#开启被动模式。
pasv_enable=YES
allow_writeable_chroot=YES
#设置被动模式下,建立数据传输可使用的端口范围的最小值。
#建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
pasv_min_port=50000
#设置被动模式下,建立数据传输可使用的端口范围的最大值。
pasv_max_port=50010
输入例外用户名单。此名单中的用户不会被锁定在主目录,可以访问其他目录。
没有例外用户时,也必须创建chroot_list文件,内容可为空。
touch /etc/vsftpd/chroot_list
systemctl restart vsftpd
到此完成,开始测试远程连接
我这里用的另一台服务器,远程访问ftp服务器
挂载光驱,去挂载目录找到Packages包目录安装一下就好,或者直接yum安装一下,这里略过去
检查ftp服务器,服务是启动的,查看ftp端口也没有冲突的问题
查看ftp防火墙,原来是防火墙不允许,可以自行打开端口,我这里就直接关闭了ftp服务器的防火墙测试(systemctl stop firewalld)。
ftp + ip 来远程访问ftp服务器,输入用户就是之前创建的ftptest1,这里查看目录根目录,其实就是/var/ftp/test1
在ftp服务器下建一个文件
在远程上下载这两个文件
(get 文件名 是下载到本地,lcd是本地切换路径 ,dir 查看当前路径下的信息)
ftp> dir
227 Entering Passive Mode (192,168,80,123,24,121).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Sep 07 07:40 1.txt
-rw-r--r-- 1 0 0 0 Sep 07 07:40 2.txt
226 Directory send OK.
ftp> lcd /opt
Local directory now /opt
ftp> get 1.txt
local: 1.txt remote: 1.txt
227 Entering Passive Mode (192,168,80,123,129,253).
150 Opening BINARY mode data connection for 1.txt (0 bytes).
226 Transfer complete.
ftp> exit
221 Goodbye.
[root@tidbserver Packages]# cd /opt/
[root@tidbserver opt]# ll 1.txt
-rw-r--r-- 1 root root 0 9月 7 15:41 1.txt
测试完成 ,后续安全或者权限配置暂时未写
连接ftp后使用
binary(或bi)将文件传送类型设置为二进制。
bye(或by)结束与远程计算机的 FTP会话并退出 ftp。
cd 更改远程计算机上的工作目录。
dir 显示远程目录文件和子目录列表。
disconnect从远程计算机断开,保留 ftp 提示。
get 使用当前文件转换类型将远程文件复制到本地计算机。
lcd 更改本地计算机上的工作目录。默认情况下,工作目录是启动 ftp的目录。
ls 显示远程目录文件和子目录的缩写列表。
mkdir 创建远程目录。
mput 使用当前文件传送类型将本地文件复制到远程计算机上。
put 使用当前文件传送类型将本地文件复制到远程计算机上。
pwd 显示远程计算机上的当前目录。
quote 将参数逐字发送到远程 FTP服务器。将返回单个的 FTP 回复代码。