一,FTP概述
概述
FTP(File Transfer Protocol,文件传输协议)是用于在计算机之间传输文件的协议。它工作在网络的应用层,通过 TCP 协议进行数据传输,默认端口号为 21(命令端口,另外将20当做数据端口{主动模式下})。FTP 协议分为客户端和服务端,通过客户端连接服务端以实现文件的上传和下载。FTP 常用于发布和下载软件、网站更新等。
服务端软件
- vsftpd:安全稳定、性能良好的 Linux FTP 服务端,配置灵活。
- ProFTPD:易于配置,支持虚拟用户,适合大规模应用。
- Pure-FTPd:主打简单和高效,具有较高的安全性和兼容性。
客户端工具
- 命令行 FTP 客户端:在 Linux 和 Windows 系统中都支持,用于执行 FTP 操作的简单命令行工具。(ftp,lftp)
- lftp:默认匿名用户登录,可以批量下载,也可以下载目录
- ftp:默认用户+密码方式访问,只能下载文件
- FileZilla:支持多平台、图形界面的 FTP 客户端,操作便捷,功能全面。
- WinSCP:适用于 Windows,支持 FTP 及 SFTP 等多种协议,界面友好,适合初学者。
工作模式
FTP 的工作模式有两种:主动模式和被动模式。这两种模式通过不同的端口开启数据传输连接。
-
主动模式(Active Mode):
- 客户端从临时端口向服务端的 21 端口发起连接。
- 服务端向客户端发送数据传输端口(20 端口),再从该端口向客户端的临时端口建立数据连接。
- 因为防火墙可能会阻止服务端访问客户端的临时端口,主动模式在受限的网络中可能遇到阻碍。
-
被动模式(Passive Mode):
- 客户端请求服务端开启被动模式,服务端在任意高端口打开数据端口。
- 客户端连接此数据端口进行数据传输。
- 被动模式适合在客户端位于防火墙后或受 NAT 保护时使用。
二,FTP服务端搭建
环境准备
防火墙关闭,selinux关闭
安装软件
yum -y install vsftpd
启动
systemctl start vsftpd
测试
先找到自己的ip
配置文件概述
位置:/etc/vsftpd/vsftpd.conf
三,ftp客户端使用
客户端安装
在大部分 Linux 系统中,可以通过包管理器安装命令行 FTP 客户端:ftp/lftp(建议lftp)
FileZilla:跨平台的免费 FTP 客户端,可通过官网下载或使用包管理器安装:sudo yum install filezilla
WinSCP(适用于 Windows):支持多种协议,直接下载安装即可。
连接服务器
命令行方式
lftp/ftp <server-ip-or-domain>【如果lftp要账号登录:-u 账户,密码】
ls
:列出当前目录内容。cd <
目录>
:切换到服务器指定目录,并在该目录工作。lcd <
目录>
:切换到本地指定目录,并在该目录工作。get <
文件>【《目标地址》】
:下载单个文件到本地。put <
文件>【《目标地址》】
:上传单个文件到服务器。mget <pattern>【《目标地址》】
:批量下载匹配的文件。mput <pattern>【《目标地址》】
:批量上传匹配的文件。delete <filename>
:删除服务器上的文件。- mirror <远程目录> <本地目录>
- 镜像下载:下载整个目录结构(lftp专有)不支持通配符
- mirror -R <本地目录> <远程目录>
- 镜像上传:将本地目录上传到服务器(lftp专有)不支持通配符
图形界面客户端
- 打开客户端,输入服务器地址、端口(默认 21)、用户名和密码。
- 连接成功后,文件目录会显示在窗口中,可以直接进行文件的拖拽传输。
四,配置文件详解
-
基本访问控制
- 设置用户登录权限,结合
/etc/ftpusers
和userlist
文件确保用户的安全访问: -
# 允许本地系统用户登录 local_enable=YES # 启用本地用户登录# 禁止匿名用户访问,确保安全性 anonymous_enable=NO # 禁止匿名用户登录# 启用用户列表文件以控制访问权限 userlist_enable=YES # 启用用户列表控制访问 userlist_deny=NO # 设置为 NO 表示仅允许列表中的用户登录 userlist_file=/etc/vsftpd/user_list # 指定允许访问的用户列表文件路径# 启用 TCP Wrappers 访问控制,通过 /etc/hosts.allow 和 /etc/hosts.deny 管理访问 tcp_wrappers=YES
-
用户访问控制的优先级说明
/etc/ftpusers
文件:首先检查此文件中列出的用户,任何在此文件中的用户将被禁止访问 FTP,即使在其他文件中允许也会被拒绝。userlist
配置:在/etc/ftpusers
中未被禁止的用户,如果配置了userlist_enable=YES
且userlist_deny=NO
,则只有在/etc/vsftpd/user_list
文件中的用户可以访问。- TCP Wrappers (
/etc/hosts.allow
和/etc/hosts.deny
):/etc/hosts.allow
中的允许规则优先于/etc/hosts.deny
,未匹配到的 IP 会被默认拒绝。
- 设置用户登录权限,结合
-
目录与文件访问控制
- 设置用户的根目录和权限,确保用户只能访问授权的目录:
-
# 本地用户的根目录 local_root=/home/$USER/ftp # 将本地用户限制在其专属目录# 限制用户只能访问其根目录 chroot_local_user=YES # 将用户限制在主目录内# 允许在 chroot 环境中进行写操作 allow_writeable_chroot=YES # 允许在 chroot 环境中上传文件# 启用 chroot 列表以允许部分用户访问其他目录 chroot_list_enable=YES # 启用 chroot 列表 chroot_list_file=/etc/vsftpd/chroot_list # 列表中的用户不受 chroot 限制
-
文件传输控制
- 配置文件传输和日志记录,以便于文件权限控制和记录活动:
-
# 允许上传和删除等写操作 write_enable=YES # 启用写操作权限# 设置文件权限掩码 local_umask=022 # 设置文件权限为 644,目录权限为 755# 启用传输日志记录 xferlog_enable=YES xferlog_file=/var/log/vsftpd.log # 日志文件位置 xferlog_std_format=YES # 使用标准日志格式# 会话和数据连接的超时设置 idle_session_timeout=300 # 空闲会话超时(秒) data_connection_timeout=120 # 数据连接超时(秒)
-
网络访问控制
- 设置 FTP 的工作模式、端口范围及 TCP Wrappers 的网络控制,以确保网络访问安全:
-
# 启用被动模式支持防火墙环境 pasv_enable=YES # 启用被动模式 pasv_min_port=30000 # 被动模式的最小端口 pasv_max_port=31000 # 被动模式的最大端口# 设置连接限制 max_clients=200 # 最大客户端连接数 max_per_ip=5 # 每个 IP 的最大连接数# 启用 TCP Wrappers tcp_wrappers=YES # 使用 TCP Wrappers 控制访问,查看 /etc/hosts.allow 和 /etc/hosts.deny 文件
-
TCP Wrappers 访问控制优先级说明
- 系统首先检查
/etc/hosts.allow
文件,若有匹配项则允许访问,不再检查/etc/hosts.deny
。 - 如果
/etc/hosts.allow
无匹配项,则检查/etc/hosts.deny
。如匹配到拒绝规则,则拒绝访问。 - 若两者均无匹配项,系统默认允许访问。
- 系统首先检查
-
限速设置
- 限制传输速率以节省带宽:
-
# 限制本地用户的上传/下载速度 # local_max_rate=50000 # 最大传输速度设置为 50 KB/s
-
服务与日志设置
- 配置服务的运行模式及欢迎信息,便于管理与监控:
-
# 启用独立模式并监听 IPv4 listen=YES # 独立模式下监听 IPv4 listen_ipv6=NO # 禁用 IPv6# 设置欢迎消息 ftpd_banner=Welcome to My FTP Server # 登录后显示的欢迎信息# 记录所有 FTP 协议信息以便于调试 log_ftp_protocol=YES # 启用详细协议日志
-
数据目录设置
- 灵活配置全局和用户的数据目录:
-
# 全局公共数据目录 # local_root=/var/ftp/pub # 公共目录(可选)# 用户特定的数据目录 user_sub_token=$USER # 使用用户名动态生成目录 local_root=/home/$USER/ftp # 为每个用户设置专属目录