FTP-文件传输协议
FTP-文件传输协议
一文彻底搞清楚FTP。
一、介绍
FTP(File Transfer Protocol),文件传输协议,诞生于1971年,用于在网络间交换文件。主要又两种工作模式。
1.1 主动模式
最开始只有主动模式,工作模式如下,
- 客户端随机端口 —>>> 服务器
21控制端口 - 客户端开启高位随机端口,告诉服务器,并等待服务器连接
- 服务器
20数据端口 —>>> 客户端高位随机端口,使用此连接进行数据传输
主动模式的 主动 就是指 服务器主动去连接客户端,进行数据传输。
问题
刚开始计算机都有公网IP,这种模式运行良好;但是,随着时代的发展,公网IP越来越少,人们开始使用内网IP、NAT技术、防火墙等,导致服务器无法成功连接客户端,此时添加了一种模式,被动模式。
1.2 被动模式
被动模式的工作模式如下,
- 客户端随机端口 —>>> 服务器
21控制端口 - 服务器开启高位随机端口,告诉客户端,并等待客户端连接
- 客户端随机端口 —>>> 服务器的高位随机端口,使用此链接进行数据传输
被动模式的 被动 就是指 服务器 被动等待客户端来连接,进行数据传输。
二、服务器端
这里不想搞得太复杂,把SELinux关了,不然权限很繁琐。
1 | setenforce 0 |
1 | SELINUX=disabled |
2.1 vsftpd
vsftpd (Very Secure),在Linux系统上,一款非常安全的 ftp 服务端软件,用于部署 FTP服务器。
2.1.1 安装
- 安装
1 | yum install -y vsftpd |
- 启动
1 | systemctl enable --now vsftpd |
- 验证
1 | ss -tnlp |
1 | [root@centos9 ~]# ss -tnlp |
- 防火墙放行FTP
1 | firewall-cmd --permanent --add-service=ftp |
2.1.2 配置
不同版本间默认配置不一样,需要自行查看修改。配置文件在 /etc/vsftpd/vsftpd.conf 中,修改配置后需要重载配置。
2.1.2.1 匿名用户配置
匿名用户 anonymous 会映射成 ftp。默认用户在
1 | # 全局可写配置 |
1 | [root@centos9 ~]# mkdir /var/ftp/upload |
这样就可以匿名用户上传或者下载文件,在upload 目录下。
默认文件权限为600,默认文件夹权限为 700
2.1.2.2 本地用户配置
1 | # Uncomment this to allow local users to log in. |
限制用户只能访问自己的家目录,从2.3.5版本开始,出于安全考虑,默认禁止用户在其 chroot 目录(即 FTP 根目录)拥有写权限。
1 | lftp qiankong@192.168.10.30:~> ls |
两种解决方案
方案一,对限制的家目录,u-w,家目录下创建文件夹,作为ftp的上传目录。
注意,ubuntu 新建用户需要 -m 参数才能创建用户家目录
1 | useradd ftptest |
客户端就可以在 /home/ftptest/dir1 目录下上传文件。
上传的文件夹权限为755,文件权限为644
方案二,直接允许根目录可写,跳过检查,但是这种方式不安全。
1 | allow_writeable_chroot=YES |
注:这两种解决方案感觉都不好,方案一、用户失去对家目录的写权限;方案二,不安全。
方案三:
- 在用户目录下创建
ftp目录作为ftp根目录 ftp目录所有者改为nobody:nogroup,去掉ftp所有者的写权限。- 在
ftp目录下创建files目录作为登录ftp后,可写的目录 - 修改配置。
1 | # 启用本地用户 |
2.1.2.3 额外易混淆配置
1 | # vsftpd 用户列表 |
1 | # 启用用户列表 |
2.1.3 被动模式
1 | 被动模式FTP的数据端口不是20,默认是随机。 |
1 | # 服务器防火墙配置(被动模式) |
2.1.4 禁用shell登录
这个好玩,简单几行。
1 | vim /bin/ftponly |
1 |
|
1 | chmod a+x /bin/ftponly |
2.2 File-Mozilla
这款软件用server版,也有客户端版。之后补充。
三 、客户端
File-Mozilla,跨平台的连接工具,常用于Windows。
lftp,Linux连接工具,
1 | # 连接 |
四、封面图
