{"msg":"操作成功","code":200,"data":{"createBy":"admin","createTime":"2025-09-08 12:36:16","updateBy":"admin","updateTime":"2025-09-12 10:35:04","remark":null,"id":122,"articleTitle":"Linux基础：FTP文件传输服务","articleUrl":"service_ftp","articleThumbnail":"https://www.asumimoe.com/imgfiles/20220908/ee03af4419724d50a127c34d6a588554.png","articleFlag":"0","draftStatus":"1","reprintStatement":"0","articleSummary":"在FTP（文件传输协议）中，文件传输服务通常涉及两个主要的组成部分：FTP服务器和FTP客户端。FTP协议允许用户在网络上传输文件，但它本身并不提供加密的传输通道。这意味着，在使用FTP进行文件传输时，数据（包括用户名、密码和传输的文件内容）都是以明文形式发送的，这可能会引发安全问题，如数据泄露或中间人攻击。\n为了解决这个问题，FTP的变种版本——SFTP（SSH文件传输协议）和FTPS（FTP over SSL/TLS）被开发出来，它们提供了加密的数据传输，从而提高了安全性。","articleContent":"在FTP（文件传输协议）中，文件传输服务通常涉及两个主要的组成部分：FTP服务器和FTP客户端。FTP协议允许用户在网络上传输文件，但它本身并不提供加密的传输通道。这意味着，在使用FTP进行文件传输时，数据（包括用户名、密码和传输的文件内容）都是以明文形式发送的，这可能会引发安全问题，如数据泄露或中间人攻击。\n\n为了解决这个问题，FTP的变种版本——SFTP（SSH文件传输协议）和FTPS（FTP over SSL/TLS）被开发出来，它们提供了加密的数据传输，从而提高了安全性。\n\n### 安装与启停\n\n1. **安装 vsftpd**\n   通过 `yum` 包管理器安装：\n\n   ```bash\n   sudo yum install vsftpd -y\n   ```\n\n2. **启动与启用**\n   安装后，启动并设置开机自启：\n\n   ```bash\n   sudo systemctl start vsftpd      # 启动服务\n   sudo systemctl enable vsftpd     # 开机自启\n   sudo systemctl status vsftpd     # 查看状态\n   ```\n\n### 主要配置\n\nvsftpd 的主配置文件是 `/etc/vsftpd/vsftpd.conf`。修改后需重启服务 (`sudo systemctl restart vsftpd`) 生效。\n\n**常见配置项**：\n\n*   `anonymous_enable=NO`：**禁止匿名登录**（增强安全性）。\n*   `local_enable=YES`：允许本地系统用户登录。\n*   `write_enable=YES`：允许上传文件。\n*   `local_umask=022`：设置本地用户上传文件的默认权限（目录：755，文件：644）。\n*   `chroot_local_user=YES`：**将用户限制在其家目录**，防止访问系统其他部分。\n*   `allow_writeable_chroot=YES`：允许被限制的用户在家目录有写权限（需与 `chroot_local_user=YES` 配合使用）。\n*   `pasv_enable=YES`：启用**被动模式**（常用于客户端在防火墙后）。\n*   `pasv_min_port=40000` & `pasv_max_port=50000`：指定被动模式使用的端口范围（需在防火墙开放）。\n\n### 防火墙配置\n\n若系统防火墙 (`firewalld`) 开启，需放行 FTP 流量：\n\n```bash\nsudo firewall-cmd --permanent --add-service=ftp  # 或添加端口 --add-port=21/tcp\nsudo firewall-cmd --permanent --add-port=40000-50000/tcp  # 若配置了被动模式端口范围\nsudo firewall-cmd --reload\n```\n\n### SELinux 设置\n\n若启用 SELinux，需调整策略以允许 FTP 访问：\n\n```bash\nsudo setsebool -P ftp_home_dir on\n# 或允许更高权限（根据需求选择）\nsudo setsebool -P allow_ftpd_full_access on\n```\n\n### 用户管理\n\n1. **创建 FTP 用户**\n   为 FTP 创建专用用户（如 `ftpuser`），并设置密码：\n\n   ```bash\n   sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser  # -d 可指定家目录\n   sudo passwd ftpuser  # 设置密码\n   ```\n\n   **注意**：为了安全，通常禁止这些用户登录 Shell（使用 `/sbin/nologin`）。\n\n2. **调整目录权限**\n   确保用户对其家目录（或指定的 FTP 根目录）有适当的读写权限：\n\n   ```bash\n   sudo chown -R ftpuser:ftpuser /home/ftpuser\n   sudo chmod -R 755 /home/ftpuser  # 或根据实际情况调整\n   ```\n\n### SFTP介绍\n\nSFTP 和 FTP 是两种完全不同的文件传输协议，它们在**安全性、工作原理和易用性**上有着根本的区别。\n\n简单来说：\n\n*   **FTP** 是古老、不安全的传统协议。\n*   **SFTP** 是现代、安全的协议，是 FTP 在大多数场景下的**首选替代方案**。\n\n下面是一个详细的对比表格，帮助你快速理解它们的核心差异：\n\n---\n\n### SFTP vs FTP 核心区别对比表\n\n| 特性             | FTP (文件传输协议)                                           | SFTP (SSH文件传输协议)                                       |\n| :--------------- | :----------------------------------------------------------- | :----------------------------------------------------------- |\n| **安全性**       | **❌ 不安全**                                                 | **✅ 安全**                                                   |\n|                  | 传输数据、密码都是**明文**，容易被窃听。                     | 通过 **SSH** 加密通道传输所有数据，包括密码和命令，无法被窃听。 |\n| **协议基础**     | 独立协议，基于 TCP。                                         | **SSH** 协议的一部分，依赖于 SSH 服务。                      |\n| **端口号**       | **控制端口：21** <br> **数据端口：20** (主动模式) 或随机高端口 (被动模式) | 只有一个端口：**SSH 的 22 号端口**。                         |\n| **防火墙友好度** | **不友好**。被动模式下需要开放一大段随机高端口，增加安全风险和管理难度。 | **非常友好**。只需要开放一个 **22 号端口** 即可。            |\n| **连接模式**     | 有**主动模式**和**被动模式**之分，配置复杂，容易因网络环境导致连接失败。 | **没有模式之分**。所有通信都通过一个建立的 SSH 连接进行。    |\n| **文件操作**     | 基本功能：上传、下载、列出文件。                             | 功能丰富：除了传输，还支持**断点续传**、**远程文件操作**（如权限修改、重命名、创建符号链接等）。 |\n| **平台兼容性**   | 所有平台都支持，但需要单独的 FTP 服务器和客户端软件。        | 任何支持 **SSH** 的服务器都默认支持 SFTP，无需额外安装和配置。Linux/Unix 系统天生具备。 |\n| **身份验证**     | 主要使用用户名和密码。                                       | 支持 SSH 的所有验证方式：**密码** 和更安全的 **SSH 密钥对**。 |\n\n---\n\n### 安全性详解：为什么 SFTP 更安全？\n\n这是两者最核心的区别，决定了它们的适用场景。\n\n*   **FTP (不安全)**\n    *   **明文传输**：当你连接到一个 FTP 服务器时，你的用户名、密码以及你上传或下载的所有文件内容，都是以未加密的形式在网络上传输。任何一个能截获你网络流量的人（例如在同一个公共Wi-Fi上）都可以轻易地看到这一切。\n    *   **犹如邮寄明信片**：所有人都能看到上面的内容。\n\n*   **SFTP (安全)**\n    *   **加密通道**：SFTP 本身不是一个独立的协议，而是作为 SSH（Secure Shell）协议的一个子系统运行的。这意味着**所有通信**，包括认证过程、传输的命令以及文件数据本身，都通过 SSH 建立的加密隧道进行传输。\n    *   **犹如寄送保险箱**：即使被人截获，没有密钥（密码）也无法打开看到里面的内容。\n\n---\n\n### 工作原理与防火墙\n\n*   **FTP 的复杂性**：\n    FTP 使用两个连接：一个**控制连接**（端口21）用于发送命令，一个**数据连接**（端口20或随机端口）用于传输文件内容。\n    *   **主动模式**：服务器主动连接到客户端的一个端口。客户端防火墙通常会阻止这种外来连接。\n    *   **被动模式**：客户端连接到服务器的一个随机高端口。服务器端的防火墙需要开放一大段端口范围（如 50000-55000），这非常不便且增加了被攻击的面。\n\n*   **SFTP 的简洁性**：\n    SFTP 只有一个连接。所有操作（命令、数据）都通过单一的、加密的 SSH 连接（端口22） multiplex（多路复用）地进行。这使得它极易穿透防火墙，网络管理员只需要确保 22 端口开放即可。\n\n---\n\n### 功能特性\n\n*   **FTP**：功能相对基础，主要就是传输文件和列出目录。\n*   **SFTP**：提供了更丰富的文件操作功能，类似于远程文件系统管理。最重要的是，它**支持断点续传**，如果一个大文件传输中断，可以从断开的地方继续传输，而不必重新开始。FTP 要实现这一点需要额外的支持。","categoryId":1,"viewCount":113,"categoryName":"Linux","author":"球接子","authorAvatar":null,"tagIds":[10],"tagNames":["Linux基础"]}}