什么是FTP?

FTP(File Transfer Protocol)即文件传输协议,是用于在网络中传输文件的标准协议。在Linux服务器上搭建FTP服务,可以方便地实现本地计算机与服务器之间的文件上传、下载和管理。

为什么选择vsftpd?

vsftpd(Very Secure FTP Daemon)是Linux系统中最流行的FTP服务器软件,以安全、稳定和高性能著称,非常适合初学者使用。本文将以vsftpd为例讲解搭建过程。

一、准备工作

  1. 环境要求:一台安装了Linux系统的服务器(如CentOS 7/8或Ubuntu 20.04/22.04),且已具备管理员权限(能执行sudoroot命令)。
  2. 网络要求:确保服务器能访问互联网(或内部网络),并已配置好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       # 下载文件

远程测试(使用客户端工具)

  1. Windows/macOS:使用FileZilla、Xftp等工具,输入:
    - 主机:服务器IP
    - 端口:21
    - 用户名:ftpuser
    - 密码:你设置的密码
  2. 连接成功后:可在服务器目录(/home/ftpuser)下上传、下载文件。

八、常见问题排查

1. 连接超时或拒绝连接

  • 检查防火墙:确认21端口和被动端口范围已开放(firewall-cmd --list-portsufw 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.confpasv_min_portpasv_max_port与防火墙开放端口一致。
  • 测试被动端口telnet 服务器IP 50000(替换50000为被动端口范围中的端口)。

总结

通过以上步骤,你已成功搭建FTP服务。vsftpd的核心是安全限制用户权限和目录,后续可扩展匿名用户、虚拟用户或SSL加密(FTPS)等高级功能。日常文件传输使用本地用户模式已足够简单可靠。

小夜