- 在服务器端安装和配置 FTP 服务。
- 在客户端(另一台电脑)连接服务器并上传文件。
下面我将为你提供一个详细、完整的步骤指南,使用目前最推荐的 VSFTPD (Very Secure FTP Daemon) 作为 FTP 服务器软件。

第一步:在服务器端安装和配置 FTP 服务
我们以一个常见的 Linux 发行版 Ubuntu/Debian 为例,其他发行版如 CentOS/RHEL 的命令和配置文件路径略有不同,但核心逻辑类似。
安装 VSFTPD
登录到你的 Linux 服务器,更新软件包列表,然后安装 vsftpd。
# 更新包列表 sudo apt update # 安装 vsftpd sudo apt install vsftpd
安装完成后,vsftpd 服务通常会自动启动。
配置 VSFTPD
VSFTPD 的主配置文件是 /etc/vsftpd.conf,我们需要修改这个文件来满足基本需求。

# 使用你喜欢的文本编辑器打开配置文件,nano sudo nano /etc/vsftpd.conf
为了安全和方便,我们建议进行如下修改:
# 禁止匿名用户登录 anonymous_enable=NO # 允许本地用户登录 local_enable=YES # 允许写入操作(上传、修改、删除文件和目录) write_enable=YES # 启用 chroot 功能,将用户限制在其主目录下,防止他们访问系统其他文件 # 这是非常重要的安全设置! chroot_local_user=YES # chroot_local_user=YES,下面这行可以防止用户因没有写权限而无法登录 allow_writeable_chroot=YES # 设置本地用户的上传目录 # 当用户登录后,他们会被自动放置在这个目录下 # 建议创建一个专门的目录,而不是直接用用户的主目录 local_root=/home/ftp_user/uploads # 设置被动模式 (Passive Mode) 的端口范围 # 被动模式可以解决大多数客户端在防火墙后无法连接的问题 pasv_min_port=10020 pasv_max_port=10040
重要提示:
local_root指定了用户的 FTP 根目录,你需要确保这个目录存在,FTP 用户对其有正确的权限。pasv_min_port和pasv_max_port定义了被动模式使用的端口范围,这个范围需要在防火墙中开放。
创建 FTP 用户并设置权限
我们需要一个专门的用户来管理 FTP 文件,而不是使用 root 或其他系统用户。
# 创建一个名为 ftp_user 的用户 # -m 选项会自动创建用户的主目录 /home/ftp_user sudo useradd -m ftp_user # 为 ftp_user 设置密码 sudo passwd ftp_user # (系统会提示你输入并确认密码)
根据配置文件中的 local_root,我们需要创建上传目录并设置权限。

# 创建上传目录 sudo mkdir -p /home/ftp_user/uploads # 设置目录所有者为 ftp_user sudo chown -R ftp_user:ftp_user /home/ftp_user/uploads # 设置目录权限为 755 (所有者可读写执行,组和其他用户可读执行) # 这是最安全的权限设置 sudo chmod -R 755 /home/ftp_user/uploads
配置防火墙
如果你的服务器启用了防火墙(如 ufw),需要开放 FTP 服务和被动模式的端口。
FTP 服务使用两个端口:
- 21端口:用于控制连接(登录、发送命令)。
- 20端口:用于数据连接(上传/下载文件),但在被动模式下,数据连接的端口是动态的,所以我们之前设置了
10020-10040的范围。
# 开放 21 端口 sudo ufw allow 21/tcp # 开放被动模式端口范围 sudo ufw allow 10020:10040/tcp # 重新加载防火墙规则使生效 sudo ufw reload
重启 VSFTPD 服务
保存并关闭配置文件后,重启 vsftpd 服务以使所有更改生效。
sudo systemctl restart vsftpd
你的 FTP 服务器已经配置完成了!
第二步:在客户端上传文件
你可以从任何一台电脑(Windows, macOS, 或另一台 Linux)连接到你的 FTP 服务器。
使用命令行 (Linux/macOS 或 Windows 的 WSL/Powershell)
假设你的服务器 IP 地址是 168.1.100,用户名是 ftp_user。
# 连接到 FTP 服务器 ftp 192.168.1.100 # 系统会提示你输入用户名和密码 Name (192.168.1.100:your_local_user): ftp_user Password: (输入你设置的密码) # 连接成功后,你会看到 ftp> 提示符 # 使用 put 命令上传本地文件 # 上传当前目录下的 local_file.txt 到服务器 put local_file.txt # 如果要上传整个目录,需要先打包 # 在客户端打包目录 tar -czf my_project.tar.gz /path/to/my_project # 然后上传这个压缩包 put my_project.tar.gz # 查看服务器上的文件 ls # 下载文件 (get 命令) get remote_file.txt # 完成后,断开连接 bye
使用图形化 FTP 客户端 (如 FileZilla)
FileZilla 是一款非常流行且免费的 FTP 客户端,支持 Windows, macOS 和 Linux。
- 下载并安装 FileZilla:https://filezilla-project.org/
- 连接服务器:
- 主机:输入你的服务器 IP 地址,如
168.1.100。 - 端口:
21(FTP 的默认端口)。 - 用户名:
ftp_user。 - 密码:你设置的密码。
- 点击“快速连接”。
- 主机:输入你的服务器 IP 地址,如
- 上传文件:
- 连接成功后,FileZilla 会分为左右两个窗口。
- 左侧是你的本地文件。
- 右侧是你的服务器文件。
- 在左侧找到你想要上传的文件或文件夹,直接拖拽到右侧的服务器窗口即可开始上传。
常见问题排查
如果遇到问题,可以按照以下步骤检查:
-
连接被拒绝:
- 检查服务器 IP 地址是否正确。
- 检查防火墙是否放行了 21 端口 (
sudo ufw status)。 - 检查
vsftpd服务是否正在运行 (sudo systemctl status vsftpd)。
-
用户名或密码错误:
- 确认用户名和密码是否正确。
- 检查
/etc/passwd文件中用户是否存在。
-
550 Permission denied (权限被拒绝):
- 这是最常见的问题,检查上传目录的所有者和权限。
- 确保目录所有者是
ftp_user(ls -ld /home/ftp_user/uploads)。 - 确保目录权限是
755(chmod 755 /home/ftp_user/uploads)。 - 确保文件本身对
ftp_user有写权限。
-
无法建立数据连接,卡在 "LIST" 命令:
- 这通常是被动模式的问题,确保你在客户端和服务器端都配置了被动模式。
- 在 FileZilla 中,可以转到“编辑” -> “设置” -> “连接” -> “FTP”,将“被动模式”勾选上。
- 确保防火墙放行了你设置的被动端口范围 (
10020:10040)。
安全建议
- 使用 SFTP:FTP 协议在传输数据时是明文的,非常不安全,强烈建议使用 SFTP (SSH File Transfer Protocol),它通过 SSH 加密所有传输内容,现代大多数客户端都支持 SFTP,连接端口是 22。
- 限制用户:如果可能,只为 FTP 创建一个专用用户,并给予其最小必要的权限。
- 定期更新:保持你的系统和
vsftpd软件为最新版本。
