Linux服务搭建系列:FTP服务
CentOS7基础配置篇:
理论部分
FTP介绍
FTP是什么?
FTP(File Transfer Protocol,文件传输协议)是一种应用层协议,用于在客户端和服务器之间通过 TCP/IP 网络进行文件的上传与下载。它是最古老、最常用的互联网文件传输协议之一。
简单来说:FTP 就是通过网络,把文件从一台机器传到另一台机器的工具和规则。
使用 FTP 的好处
跨平台传输:几乎所有操作系统都支持 FTP,可以方便地在不同系统间交换文件。
高效文件传输:支持大文件、批量文件传输,并提供断点续传功能。
权限控制:通过账号和密码进行身份验证,支持不同用户的访问权限划分。
广泛应用:常见于网站更新(上传网页文件)、企业内部文件分发与备份。
FTP的工作原理
FTP 使用 客户端-服务器架构,通过 TCP 传输数据,默认使用两个端口:
21端口:命令端口,用于传输控制信息(如登录、文件操作指令)。
20端口:数据端口,用于传输实际的文件数据。
FTP 有两种传输模式:
主动模式(PORT):由服务器主动连接客户端数据端口传输文件。
被动模式(PASV):由客户端主动连接服务器指定的端口传输文件(更适合防火墙环境)。
FTP 本身明文传输,存在安全隐患,因此出现了 FTPS(在 FTP 基础上加 SSL/TLS 加密)和 SFTP(基于 SSH 的安全文件传输协议)。
实践部分
一、基础环境
操作系统:CentOS7 + Windows10
支持平台:VMware17NFS服务端:192.168.20.10 CentOS7
NFS客户端:192.168.20.11 Windows10
二、具体操作
基础配置
#修改本地源并挂载和网卡
vi /etc/yum.repos.d/CentOS-Base.repo
#进入配置文件后修改为以下配置
----
...... #注释不用管
[base]
name=CentOS-$releasever - Base
baseurl=file:///mnt
gpgcheck=0
----
#在VM软件右下角有个CD/DVD右键连接
mount /dev/cdrom /mnt
#关闭防火墙和安全模式
systemctl stop firewalld
setenforce 0基础软件
vsftpd:Very Secure FTP Daemon,Linux 下常用的 FTP 服务端主程序,提供 FTP 文件传输服务,具备高安全性、稳定性和轻量化的特点。其核心守护进程负责处理客户端连接、身份验证、文件上传下载以及权限控制等功能。
vsftpd.conf配置文件解读:
# 允许匿名用户登录 (YES 表示允许, NO 表示禁止)
anonymous_enable=YES # 允许匿名访问,一般生产环境建议 NO
# 允许本地用户登录 (使用系统账户)
local_enable=YES # 系统用户可用 FTP 登录
# 允许写操作 (如上传、删除、改名)
write_enable=YES # 开启写权限
# 本地用户默认 umask (权限掩码),默认 077,这里改为 022 (典型)
local_umask=022 # 上传文件的默认权限
# 是否允许匿名用户上传文件 (需要 write_enable=YES 且目录可写)
#anon_upload_enable=YES # 一般不建议开启,风险大
# 是否允许匿名用户新建目录
#anon_mkdir_write_enable=YES
# 进入目录时显示消息 (如 .message 文件里的提示)
dirmessage_enable=YES # 开启目录提示信息
# 开启上传/下载日志记录
xferlog_enable=YES # 开启传输日志
# 强制 PORT 模式使用 20 端口传输数据
connect_from_port_20=YES
# 日志格式是否使用标准 xferlog 格式
xferlog_std_format=YES
# 空闲会话超时时间 (秒)
#idle_session_timeout=600 # 默认 600s
# 数据连接超时时间 (秒)
#data_connection_timeout=120
# 服务器监听模式 (listen=NO 表示不监听 IPv4 独立模式)
listen=NO # 用 IPv6 模式时要关闭它
# IPv6 监听 (YES 表示开启)
listen_ipv6=YES # 监听 IPv6 地址,同时兼容 IPv4
# PAM 验证服务名 (对应 /etc/pam.d/vsftpd)
pam_service_name=vsftpd
# 是否启用用户列表限制
userlist_enable=YES # 开启用户列表功能 (黑名单/白名单)
# 是否启用 tcp_wrappers (基于 hosts.allow / hosts.deny 的访问控制)
tcp_wrappers=YES操作:
# 启动vsftp服务
systemctl restart vsftpd
# 修改vsftp配置文件
vim /etc/vsftpd/vsftpd.conf
---------------
......
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO //禁止匿名用户登录
...
chroot_local_user=YES //所有本地用户都会被限制在自己的 home 目录下,不能切换到
chroot_list_enable=YES //所有用户默认被锁在家目录
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list //chroot_list中的用户例外,不锁死,可切换目录
......
userlist_enable=NO //禁用用户列表功能
......
allow_writeable_chroot=YES //强制允许用户在 可写的家目录 下使用 FTP
---------------
# 创建修改用户列表文件
vim /etc/vsftpd/chroot_list #添加用户ftproot
vim /etc/vsftpd/user_list #添加用户ftproot
# 创建用户并 指定目录和组,禁止此用户登录系统,设置用户密码
useradd -d /tmp/ftproot -g ftp -s /sbin/nologin ftproot
passwd ftproot
# 修改目录所有者和权限
cd /tmp/
chown ftproot:ftp ftproot
chmod 777 ftproot
ll
# 创建测试文件并重启服务
cd ftproot/
touch index.txt
systemctl restart vsftpd
---------------------------------------------
# Windows系统中挂载此目录
# 文件资源管理器 -> 添加网络位置
ftp://192.168.20.10