什么是FTP?¶
FTP(File Transfer Protocol)即文件传输协议,是用于在网络中传输文件的标准协议。在Linux服务器上搭建FTP服务,可以方便地实现本地计算机与服务器之间的文件上传、下载和管理。
为什么选择vsftpd?¶
vsftpd(Very Secure FTP Daemon)是Linux系统中最流行的FTP服务器软件,以安全、稳定和高性能著称,非常适合初学者使用。本文将以vsftpd为例讲解搭建过程。
一、准备工作¶
- 环境要求:一台安装了Linux系统的服务器(如CentOS 7/8或Ubuntu 20.04/22.04),且已具备管理员权限(能执行
sudo或root命令)。 - 网络要求:确保服务器能访问互联网(或内部网络),并已配置好IP地址。
二、安装vsftpd服务器¶
CentOS系统(使用yum)¶
sudo yum install vsftpd -y # 安装vsftpd,-y表示自动确认安装
Ubuntu系统(使用apt)¶
sudo apt update # 更新软件源
sudo apt install vsftpd -y # 安装vsftpd
三、启动服务并设置开机自启¶
CentOS/Ubuntu通用步骤¶
# 启动vsftpd服务
sudo systemctl start vsftpd
# 设置开机自启
sudo systemctl enable vsftpd
验证服务状态:
sudo systemctl status vsftpd # 应显示“active (running)”
四、配置防火墙(开放FTP端口)¶
FTP服务需要开放两个关键端口:
- 21端口:控制连接(用于命令传输)
- 被动模式端口范围:默认50000-60000(数据传输,可根据需求调整)
CentOS(使用firewalld)¶
# 开放21端口(控制连接)
sudo firewall-cmd --permanent --add-port=21/tcp
# 开放被动端口范围(50000-60000)
sudo firewall-cmd --permanent --add-port=50000-60000/tcp
# 重新加载防火墙规则
sudo firewall-cmd --reload
# 检查开放端口
sudo firewall-cmd --list-ports # 应显示21/tcp和50000-60000/tcp
Ubuntu(使用ufw)¶
# 开放21端口
sudo ufw allow 21/tcp
# 开放被动端口范围(50000-60000)
sudo ufw allow 50000:60000/tcp
# 启用ufw(若未启用)
sudo ufw enable
# 检查状态
sudo ufw status # 应显示21/tcp和50000-60000/tcp
五、创建FTP用户(安全考虑:禁止root直接登录)¶
1. 创建FTP用户¶
# 创建用户,指定家目录为/home/ftpuser(可自定义),并禁止shell登录
sudo useradd -d /home/ftpuser -s /sbin/nologin ftpuser
# 设置用户密码
sudo passwd ftpuser
# 按提示输入密码(需记忆,后续FTP登录用)
2. 设置用户目录权限¶
# 确保目录所有者为ftpuser,且权限为755(用户可读写执行,组和其他用户可读执行)
sudo chown -R ftpuser:ftpuser /home/ftpuser
sudo chmod 755 /home/ftpuser
六、配置vsftpd服务¶
编辑配置文件¶
sudo vim /etc/vsftpd/vsftpd.conf
修改关键参数(初学者只需调整以下内容):¶
# 允许本地用户登录(即我们创建的ftpuser)
local_enable=YES
# 允许写操作(上传/下载)
write_enable=YES
# 限制用户只能在自己的家目录(防止越权访问)
chroot_local_user=YES
# 允许在chroot环境下写文件(否则无法上传)
allow_writeable_chroot=YES
# 被动模式端口范围(与防火墙开放的端口范围一致)
pasv_min_port=50000
pasv_max_port=60000
# 被动模式IP(服务器公网IP或0.0.0.0允许所有IP,内网可填服务器IP)
pasv_address=服务器IP # 例如192.168.1.100
保存并重启服务¶
# 保存配置文件后重启vsftpd
sudo systemctl restart vsftpd
七、测试FTP连接¶
本地测试(服务器终端)¶
ftp localhost # 连接本地FTP服务器
# 输入用户名:ftpuser,密码:你设置的密码
# 登录后尝试上传/下载文件,例如:
# put /tmp/test.txt # 上传本地临时文件
# get test.txt # 下载文件
远程测试(使用客户端工具)¶
- Windows/macOS:使用FileZilla、Xftp等工具,输入:
- 主机:服务器IP
- 端口:21
- 用户名:ftpuser
- 密码:你设置的密码 - 连接成功后:可在服务器目录(
/home/ftpuser)下上传、下载文件。
八、常见问题排查¶
1. 连接超时或拒绝连接¶
- 检查防火墙:确认21端口和被动端口范围已开放(
firewall-cmd --list-ports或ufw status)。 - 检查服务状态:
sudo systemctl status vsftpd确认服务运行正常。
2. 权限错误(550 Permission denied)¶
- 检查目录权限:
ls -ld /home/ftpuser,确保所有者为ftpuser且权限为755。 - SELinux问题(CentOS):临时关闭SELinux测试:
sudo setenforce 0,若解决则需设置:sudo setsebool -P ftpd_full_access=on。
3. 被动模式无法连接¶
- 检查端口范围:确认
vsftpd.conf中pasv_min_port和pasv_max_port与防火墙开放端口一致。 - 测试被动端口:
telnet 服务器IP 50000(替换50000为被动端口范围中的端口)。
总结¶
通过以上步骤,你已成功搭建FTP服务。vsftpd的核心是安全限制用户权限和目录,后续可扩展匿名用户、虚拟用户或SSL加密(FTPS)等高级功能。日常文件传输使用本地用户模式已足够简单可靠。