一、FTP简介
FTP: File Transfer Protocol文件传输协议
FTP是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。
在FTP的使用当中,用户经常遇到两个概念:下载(Download)和上传(Upload)。
下载文件就是从远程主机拷贝文件至自己的计算机上,上传文件就是将文件从自己的计算机中拷贝至远程主机上。
FTP协议:文件传输协议(File Transfer Protocol)
-
协议定义了一个在远程计算机系统和本地计算机系统之间传输文件的一个标准
-
FTP运行在OSI模型的应用层,并利用传输协议TCP在不同的主机之间提供可靠的数据传输
-
FTP 在文件传输中还支持断点续传功能,可以大幅度减少CPU网络带宽的开销
用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件,由于FTP的文件传输是明文方式,具有一定危险性,所以就诞生了一种更加安全的传输方式vsftp。
1.1 VSFTP特点
VSFTP是一个比FTP更安全的软件具有以下特点:
-
vsftp一般以普通用户运行,降低了进程的权限,提高了安全性
-
任何需要执行较高权限的指令都需要上层程序的许可
-
ftp的命令都被整合到了vsftp中,不需要系统额外提供命令
-
用于chroot功能,可以改变用户的根目录,限制用户只能在自己的家目录
-
vsftpd是一个基于GPL发布的FTP服务器软件。其中的vs是" Very Secure"的缩写,由此名称缩写可以看出,本服务器的初衷就是服务的安全性。
-
vsftpd是RedHat Linux默认使用的ftp服务端软件。
-
vsftpd不再依赖于xinetd服务
-
vsftpd可同时允许匿名( anonymous )与本地用户(local)访问,还可以支持虚拟用户。
1.2 VSFTP连接类型
控制连接:TCP21,用于发送FTP命令信息
数据连接:TCP20,用于上传、下载数据
1.3 Vsftp工作模式
FTP协议有两种工作方式:PORT方式和PASV方式,主动式和被动式
-
PORT(主动模式):服务端从20端口主动向客户端发起连接
-
客户端连接到ftp服务端的信息端口(默认是20),并向其发送用户名和密码。
-
若客户端想要下载或上传文件,客户端随即开放一个端口(1024以上),发送PORT命令倒ftp服务端,告知ftp服务端采用主动模式并开放数据端口(默认是ftp服务端的信息端口-1,也就是20)。
-
随后ftp服务端会通过数据端口和客户端开发的端口进连接,从而传输文件信息。
-
-
PASV(被动模式):服务端在指定范围内某个端口被动等待客户端连接
-
客户端连接到ftp服务端的信息端口(默认是21),并向其发送用户名和密码。
-
若客户端想要下载或上传文件,客户端发送PASV命令倒ftp服务端,告知ftp服务端采用被动模式,服务器在本地随即开放一个端口(自己配置范围),然后将开放的端口告诉客户端。
-
客户端连接服务器这个开放的端口,从而上传或下载文件。
-
模式的不同:
-
PORT:需要客户端开放端口给服务器进行文件的上传和下载,但不同客户端自身防火墙规则不同,可能出现不能传输文件的情况。
-
PASV:服务器开放端口给客户端进行文件的上传和下载,防火墙可控,因此较为推荐。
1.4 FTP用户的类型
匿名用户:anonymous或ftp
本地用户:计算机操作系统的用户名和密码,帐号名称、密码等信息保存在passwd/shadow文件中
虚拟用户:使用独立的帐号/密码数据文
二、VSFTPD安装
2.1 服务介绍
-
服务包:vsftpd
-
服务类型:由Systemd启动的守护进程
-
配置单元: /usr/lib/systemd/system/vsftpd.service
-
守护进程: /usr/sbin/vsftpd
-
端口: 21(ftp) , 20(ftp‐data)
-
主配置文件: ==/etc/vsftpd/vsftpd.conf==
-
用户访问控制配置文件: /etc/vsftpd/ftpusers /etc/vsftpd/user_list
-
日志文件: /etc/logrotate.d/vsftpd
2.2 配置文件参数
参数 | 作用 |
---|---|
listen=NO | 是否以独立运行的方式监听服务 |
listen_address=ip地址 | 设置要监听的IP地址 |
listen_port=21 | 设置FTP服务的监听端口 |
download_enable=YES | 是否允许下载文件 |
userlist_enable=YES | 设置用户列表为"允许" |
userlist_deny=YES | 设置用户列表为"禁止" |
max_clients=0 | 最大客户端连接数,0为不限制 |
max_per_ip=0 | 同一IP地址的最大连接数,0为不限制 |
anonymous_enable=YES | 是否允许匿名用户访问 |
anon_upload_enable=YES | 是否允许匿名用户上传文件 |
anon_umask | 匿名用户上传文件的umask权限 |
anon_root=/var/ftp | 匿名用户的ftp根目录 |
anon_mkdir_write_enable=YES | 是否允许匿名用户创建目录 |
anon_other_write_enable=YES | 是否开放匿名用户的其他写入权限(重命名、删除等) |
anon_max_rate=0 | 匿名用户的最大传输速率,0为不限制 |
local_enable=yes | 是否允许本地用户登录 |
local_umask=022 | 本地用户上传文件的umask值 |
local_root=/vat/ftp | 本地用户的ftp根目录 |
chroot_local_user=YES | 是否将用户权限禁锢在ftp目录,以确保安全 |
local_max_rate=0 | 本地用户的最大传输速率,0为不限制 |
2.3 关闭selinux
关闭防火墙
修改之后需要执行命令reboot重启Linux服务
reboot
2.4 安装VSFP
使用yum安装vsfp
yum -y install vsftpd
三、允许匿名用户上传文件
3.1 找到配置文件进行修改
cd /etc/vsftpd/
将下面这些添加进去
# 匿名用户上传文件的umask值
anon_umask=022
# 匿名用户允许上传文件
anon_upload_enable=YES
# 匿名用户允许创建文件夹
anon_mkdir_write_enable=YES
# 匿名用户允许写文件
anon_other_write_enable=YES
3.2 重启(开启)服务
#开启
systemctl start vsftpd
#重启
systemctl restart vsftpd
3.3 找到pub文件修改权限
3.4 客户端访问ftp
访问
随便上传一个文件
在虚拟机里查看是否上传成功
四、搭建图片资源服务器
1.禁止匿名用户访问
cd /etc/vsftpd
保存之后重启服务
systemctl restart vsftpd
2.添加本地用户
useradd testftp
修改密码
passwd dys1234..
这里就是刚才创建的用户的家目录 上传就在家目录里面 在家目录里面创建一个文件夹名字必须和下面资源服务的 /名字/ 相同
mkdir images
给这个文件夹里上传一张图片
3.搭建资源服务
修改Linux配置文件
cd /opt/nginx/nginxserver/conf
4. 给创建的家目录权限
找到 /home 给刚才创建的用户的家目录赋值777权限
chmod 777 testftp
5. 浏览器访问
⚠️ 启动nginx
可以访问到就说明配置生效了
6.非匿名客户端访问
在关闭匿名用户访问之后 再通过客户端访问ftp就需要登录了
账号密码为上面设置的账号密码使用登录即可