凌峰创科服务平台

Linux FTP服务器如何上传文件?

  1. 在服务器端安装和配置 FTP 服务
  2. 在客户端(另一台电脑)连接服务器并上传文件

下面我将为你提供一个详细、完整的步骤指南,使用目前最推荐的 VSFTPD (Very Secure FTP Daemon) 作为 FTP 服务器软件。

Linux FTP服务器如何上传文件?-图1
(图片来源网络,侵删)

第一步:在服务器端安装和配置 FTP 服务

我们以一个常见的 Linux 发行版 Ubuntu/Debian 为例,其他发行版如 CentOS/RHEL 的命令和配置文件路径略有不同,但核心逻辑类似。

安装 VSFTPD

登录到你的 Linux 服务器,更新软件包列表,然后安装 vsftpd

# 更新包列表
sudo apt update
# 安装 vsftpd
sudo apt install vsftpd

安装完成后,vsftpd 服务通常会自动启动。

配置 VSFTPD

VSFTPD 的主配置文件是 /etc/vsftpd.conf,我们需要修改这个文件来满足基本需求。

Linux FTP服务器如何上传文件?-图2
(图片来源网络,侵删)
# 使用你喜欢的文本编辑器打开配置文件,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_portpasv_max_port 定义了被动模式使用的端口范围,这个范围需要在防火墙中开放。

创建 FTP 用户并设置权限

我们需要一个专门的用户来管理 FTP 文件,而不是使用 root 或其他系统用户。

# 创建一个名为 ftp_user 的用户
# -m 选项会自动创建用户的主目录 /home/ftp_user
sudo useradd -m ftp_user
# 为 ftp_user 设置密码
sudo passwd ftp_user
# (系统会提示你输入并确认密码)

根据配置文件中的 local_root,我们需要创建上传目录并设置权限。

Linux FTP服务器如何上传文件?-图3
(图片来源网络,侵删)
# 创建上传目录
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。

  1. 下载并安装 FileZillahttps://filezilla-project.org/
  2. 连接服务器
    • 主机:输入你的服务器 IP 地址,如 168.1.100
    • 端口21 (FTP 的默认端口)。
    • 用户名ftp_user
    • 密码:你设置的密码。
    • 点击“快速连接”。
  3. 上传文件
    • 连接成功后,FileZilla 会分为左右两个窗口。
    • 左侧是你的本地文件
    • 右侧是你的服务器文件
    • 在左侧找到你想要上传的文件或文件夹,直接拖拽到右侧的服务器窗口即可开始上传。

常见问题排查

如果遇到问题,可以按照以下步骤检查:

  1. 连接被拒绝

    • 检查服务器 IP 地址是否正确。
    • 检查防火墙是否放行了 21 端口 (sudo ufw status)。
    • 检查 vsftpd 服务是否正在运行 (sudo systemctl status vsftpd)。
  2. 用户名或密码错误

    • 确认用户名和密码是否正确。
    • 检查 /etc/passwd 文件中用户是否存在。
  3. 550 Permission denied (权限被拒绝)

    • 这是最常见的问题,检查上传目录的所有者和权限。
    • 确保目录所有者是 ftp_user (ls -ld /home/ftp_user/uploads)。
    • 确保目录权限是 755 (chmod 755 /home/ftp_user/uploads)。
    • 确保文件本身对 ftp_user 有写权限。
  4. 无法建立数据连接,卡在 "LIST" 命令

    • 这通常是被动模式的问题,确保你在客户端和服务器端都配置了被动模式。
    • 在 FileZilla 中,可以转到“编辑” -> “设置” -> “连接” -> “FTP”,将“被动模式”勾选上。
    • 确保防火墙放行了你设置的被动端口范围 (10020:10040)。

安全建议

  • 使用 SFTP:FTP 协议在传输数据时是明文的,非常不安全,强烈建议使用 SFTP (SSH File Transfer Protocol),它通过 SSH 加密所有传输内容,现代大多数客户端都支持 SFTP,连接端口是 22。
  • 限制用户:如果可能,只为 FTP 创建一个专用用户,并给予其最小必要的权限。
  • 定期更新:保持你的系统和 vsftpd 软件为最新版本。
分享:
扫描分享到社交APP
上一篇
下一篇