凌峰创科服务平台

如何安全高效上传文件到Linux服务器?

核心要点:FTP vs. SFTP

在开始之前,最重要的一点是:强烈建议您使用 SFTP 而不是 FTP

如何安全高效上传文件到Linux服务器?-图1
(图片来源网络,侵删)
  • FTP (File Transfer Protocol):

    • 不安全:所有用户名、密码和传输的文件内容都是明文传输的,容易被网络中间人窃听。
    • 端口:通常使用 21 端口。
  • SFTP (SSH File Transfer Protocol):

    • 安全:通过 SSH (Secure Shell) 加密通道进行传输,用户名、密码和文件内容都是加密的。
    • 端口:通常使用 22 端口。
    • 功能:不仅仅是文件传输,还支持文件和目录的权限、所有者等高级操作。

除非您有特殊且安全的内网环境需求,否则请优先选择 SFTP,本指南将同时介绍 FTP 和 SFTP 的方法。


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

在您尝试连接之前,请确保服务器上已经运行着 FTP 服务,这里以最常用的 vsftpd (Very Secure FTP Daemon) 为例。

如何安全高效上传文件到Linux服务器?-图2
(图片来源网络,侵删)

安装 vsftpd

登录到您的 Linux 服务器(通过 SSH),然后执行以下命令:

# 对于 Debian/Ubuntu 系统
sudo apt update
sudo apt install vsftpd
# 对于 CentOS/RHEL/Fedora 系统
sudo yum install vsftpd

配置 vsftpd

编辑 vsftpd 的配置文件:

sudo nano /etc/vsftpd.conf

以下是几个关键的配置项,请根据您的需求修改:

  • anonymous_enable=NO禁止匿名用户登录,这是基本的安全设置。
  • local_enable=YES:允许本地系统用户登录。
  • write_enable=YES:允许对文件系统进行写操作(上传、修改、删除)。
  • chroot_local_user=YES:将用户限制在其主目录中,防止他们访问服务器上的其他文件。这是非常重要的安全措施!
  • allow_writeable_chroot=YES:当 chroot_local_user 启用时,允许用户在其主目录内写入,注意:较新的 vsftpd 版本可能需要这个选项才能在 chroot 环境下上传文件。
  • pasv_min_port=10000pasv_max_port=10100:如果您的客户端和服务器之间有防火墙,设置一个被动模式的端口范围可以大大简化防火墙配置。

修改完成后,保存并关闭文件 (Ctrl+X, 然后按 Y, 最后按 Enter)。

创建 FTP 用户(可选但推荐)

出于安全考虑,最好为 FTP 创建一个专门的用户,而不是使用 root 或其他系统管理员账户。

# 创建一个名为 ftpuser 的新用户
sudo adduser ftpuser
# 系统会提示您设置该用户的密码
# New password: [输入密码]
# Retype new password: [再次输入密码]
# [其他信息可以留空直接按回车]

这个用户的主目录(/home/ftpuser)就是他登录 FTP 后能看到的根目录。

启动并设置开机自启

# 启动 vsftpd 服务
sudo systemctl start vsftpd
# 设置开机自启
sudo systemctl enable vsftpd

配置防火墙

确保防火墙允许 FTP 流量,FTP 比较特殊,它需要两个端口:控制端口(21)和数据端口(通常是 20 或被动模式的端口范围)。

# 对于使用 UFW (Ubuntu/Debian) 的防火墙
# 允许 FTP 流量
sudo ufw allow 21/tcp
# 如果您使用了被动模式,还需要开放您设置的端口范围
sudo ufw allow 10000:10100/tcp
# 对于使用 firewalld (CentOS/RHEL) 的防火墙
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --reload

测试服务器端配置

可以使用 netstatss 命令检查 21 端口是否在监听:

sudo ss -tulnp | grep 21

如果看到类似 LISTEN 0 5 *:21 *:* 的输出,说明 FTP 服务已经正常运行。


第二步:从客户端上传文件

现在服务器已经准备就绪,您可以从您的电脑(Windows, macOS, Linux)连接并上传文件了。

使用图形化 FTP 客户端(推荐)

这是最简单直观的方法,以 FileZilla 为例(支持 Windows, macOS, Linux)。

  1. 下载并安装 FileZilla: https://filezilla-project.org/
  2. 打开 FileZilla,在顶部快速连接栏填写信息:
    • 主机: 您的服务器 IP 地址或域名 (168.1.100your-server.com)
    • 用户名: 您在服务器上创建的 FTP 用户名 (ftpuser)
    • 密码: 该用户的密码
    • 端口: 21 (对于 FTP)
  3. 点击 “快速连接”

连接成功后,您会看到左右两个窗口:

  • 左侧: 您本地电脑的文件和目录。
  • 右侧: 服务器上的文件和目录(您被限制在 /home/ftpuser 目录下)。

上传文件

  • 从左侧窗口找到您要上传的文件,直接拖拽到右侧窗口的相应目录。
  • 或者,右键点击左侧的文件,选择 “上传”

使用命令行 FTP 客户端

如果您习惯使用终端,可以使用 lftpftp 命令。

使用 lftp (功能更强大,推荐)

# 安装 lftp (如果未安装)
# Ubuntu/Debian: sudo apt install lftp
# CentOS/RHEL: sudo yum install lftp
# 连接服务器
lftp ftpuser@your-server-ip
# 连接后,会进入 lftp 命令行界面
# 查看本地文件
lcd /path/to/your/local/files
# 查看服务器文件
ls
# 进入服务器目标目录
cd /path/to/remote/directory
# 上传单个文件
put your-local-file.txt
# 上传整个目录(递归)
mirror -R /path/to/local/dir /path/to/remote/dir
# 退出
exit

使用原生 ftp 命令

# 连接服务器
ftp your-server-ip
# 连接后,会提示输入用户名和密码
Name (ftp): ftpuser
Password: [输入密码]
# 登录后,进入 ftp 命令行界面
# 查看服务器文件
ls
# 进入服务器目标目录
cd /path/to/remote/directory
# 上传单个文件
put your-local-file.txt
# 退出
bye

第三步:使用 SFTP(更安全的方式)

如前所述,SFTP 是更现代、更安全的选择,它通常和 SSH 服务一起打包(openssh-server)。

确保服务器 SSH 服务运行

大多数 Linux 服务器默认都安装并启用了 SSH 服务。

sudo systemctl status sshd # 或 ssh

如果未运行,请启动并启用它。

使用 SFTP 客户端上传

使用 FileZilla (只需更改协议)

  1. 在 FileZilla 顶部,将协议从 “FTP - 文件传输协议” 更改为 “SFTP - SSH 文件传输协议”
  2. 填写信息:
    • 主机: 您的服务器 IP 地址或域名
    • 用户名: 您的 SSH 用户名 (可以是 ftpuser 或其他有权限的用户)
    • 密码: 该用户的密码
    • 端口: 22
  3. 点击 “快速连接”

使用命令行 sftp

# 连接服务器
sftp ftpuser@your-server-ip
# 连接后,会进入 sftp 命令行界面
# 查看本地文件
lcd /path/to/your/local/files
# 查看服务器文件
ls
# 进入服务器目标目录
cd /path/to/remote/directory
# 上传单个文件
put your-local-file.txt
# 上传整个目录
put -r /path/to/local/dir
# 下载文件 (get)
get remote-file.txt
# 退出
exit

常见问题排查

分享:
扫描分享到社交APP
上一篇
下一篇