当前位置: 首页 > news >正文

CentOS Stream 9上部署FTP应用服务的两种方法(传统安装和docker-compose)

以下是CentOS Stream 9上部署FTP应用服务的两种方法详解,包括操作步骤、注意事项及生产环境应用对比:


一、原生安装 vsftpd 服务

原理:直接通过系统包管理器安装vsftpd,配置系统级服务。

操作步骤:

  1. 安装与启动

bash

sudo dnf install vsftpd -y  # 安装vsftpd:cite[4]:cite[9]

sudo systemctl start vsftpd  # 启动服务

sudo systemctl enable vsftpd  # 设置开机自启:cite[5]

  1. 核心配置(编辑 /etc/vsftpd/vsftpd.conf

ini

anonymous_enable=NO          # 禁用匿名登录:cite[4]:cite[9]

local_enable=YES             # 允许本地用户

write_enable=YES             # 开放写权限

chroot_local_user=YES        # 限制用户在家目录

allow_writeable_chroot=YES   # 允许写受限目录:cite[4]

# 被动模式配置(解决防火墙/NAT问题)

pasv_enable=YES

pasv_min_port=50000

pasv_max_port=50010

pasv_address=服务器公网IP    # 若在NAT后需填写:cite[4]:cite[9]

保存后重启:sudo systemctl restart vsftpd

  1. 防火墙与SELinux

bash

# 防火墙放行端口

sudo firewall-cmd --permanent --add-port=21/tcp

sudo firewall-cmd --permanent --add-port=50000-50010/tcp:cite[4]:cite[9]

sudo firewall-cmd --reload

 

# SELinux策略(若启用)

sudo setsebool -P ftp_home_dir 1  # 允许FTP访问家目录

sudo semanage port -a -t ftp_port_t -p tcp 50000-50010  # 开放被动端口:cite[4]

  1. 创建FTP用户

bash

sudo useradd -m ftpuser  # 创建用户

sudo passwd ftpuser      # 设置密码

sudo chmod 750 /home/ftpuser  # 限制目录权限:cite[4]:cite[9]

  1. 测试连接

bash

ftp localhost  # 本地测试

> put test.txt  # 上传文件

> ls           # 查看文件

注意事项:

  • 目录权限:确保用户目录权限为 750(命令 ls -ld /home/ftpuser 验证)。
  • 被动模式超时:检查 pasv_address 是否为公网IP,防火墙需开放被动端口范围。
  • SELinux干扰:若遇权限问题,可临时 setenforce 0 测试,但生产环境建议配置策略而非禁用。
  • 日志排查:实时监控日志 tail -f /var/log/vsftpd.log 定位错误。

二、Docker-Compose 部署 vsftpd

原理:使用容器化技术隔离服务,简化依赖管理和部署。

操作步骤:

  1. 安装Docker环境

bash

sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

sudo dnf install docker-ce docker-ce-cli containerd.io -y

sudo systemctl start docker && sudo systemctl enable docker:cite[3]

  1. 安装Docker-Compose

bash

sudo curl -L "https://github.com/docker/compose/releases/download/v2.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose:cite[3]:cite[10]

  1. 编写 docker-compose.yml

yaml

version: '3'

services:

  vsftpd:

    image: fauria/vsftpd  # 推荐镜像:cite[2]:cite[3]

    container_name: vsftpd

    ports:

      - "20:20"

      - "21:21"

      - "21100-21110:21100-21110"  # 被动端口范围

    volumes:

      - ./ftp_data:/home/vsftpd  # 宿主机目录映射

    environment:

      - FTP_USER=admin

      - FTP_PASS=admin123

      - PASV_ADDRESS=宿主机公网IP  # 必须指定:cite[2]:cite[6]

      - PASV_MIN_PORT=21100

      - PASV_MAX_PORT=21110

    restart: always:cite[3]:cite[10]

  1. 启动服务

bash

mkdir ftp_data  # 创建数据目录

docker-compose up -d  # 后台启动:cite[3]

  1. 添加多用户

bash

docker exec -it vsftpd bash  # 进入容器

echo -e "user1\npass1\nuser2\npass2" >> /etc/vsftpd/virtual_users.txt  # 追加用户

db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db  # 生成数据库

exit

docker restart vsftpd  # 重启生效:cite[2]:cite[3]

注意事项:

  • 目录映射权限:宿主机目录需开放写权限(例:chmod 777 ftp_data)避免容器写入失败。
  • 被动模式配置PASV_ADDRESS 必须为宿主机公网IP,否则客户端无法连接数据端口。
  • 端口冲突:确保宿主机20、21及被动端口未被占用。
  • 用户隔离:每个用户需在容器内创建独立目录(例:mkdir /home/vsftpd/user1)。

三、两种方法优劣势对比

维度

原生安装 vsftpd

Docker-Compose 部署

安装复杂度

需手动配置依赖、防火墙、SELinux

一键启动,依赖容器化隔离

隔离性

直接暴露系统环境,安全性较低

容器隔离,减少宿主机攻击面

资源占用

轻量级,无额外开销

需占用约100MB内存(容器引擎开销)

多用户管理

需系统级用户操作(useradd

通过配置文件批量添加,无需系统权限

升级/迁移

需备份配置,重新部署

更新镜像即可,数据卷迁移方便

适用场景

长期稳定服务、资源受限环境

快速部署、测试环境、需多实例隔离的场景


四、实际生产应用建议

  1. 原生部署适用场景
    • 对资源敏感(如小型云服务器)。
    • 需深度定制vsftpd参数(如集成系统PAM认证)。
    • 服务需长期运行且变动少。
  2. Docker部署适用场景
    • 快速搭建临时文件共享(如开发测试环境)。
    • 需多版本FTP服务共存(例:不同项目隔离)。
    • 自动化运维场景(结合CI/CD流水线)。
  3. 通用安全建议
    • 禁用匿名登录,使用强密码策略。
    • 限制用户目录(chroot),避免越权访问。
    • 敏感数据传输建议叠加TLS加密(需额外配置SSL证书)。

总结

  • 追求稳定与轻量 → 选择原生安装,适合传统服务器环境。
  • 强调灵活与隔离 → 选择Docker部署,适合云原生和快速迭代场景。
    生产环境中,若已有容器管理平台(Kubernetes),可进一步将FTP服务编排为Pod,实现高可用和弹性扩展。
http://www.sczhlp.com/news/734.html

相关文章:

  • SeuratExtend 可视化教程(1):单细胞分析的高颜值绘图指南
  • SpringBoot 默认配置
  • 暑假7.28
  • 计算机硬件:RAID 0、1、5、6、10简单介绍
  • nest基础学习流程图
  • grabcad
  • 2025.7.28总结 - A
  • Python 实现基于图像处理的验证码识别
  • 2025最新程序员面试题集合 包括各大厂面试规范,面试问题
  • 浅谈基环树
  • Day 28
  • 2025.7.28
  • 《叔向贺贫》
  • 2025总结
  • AI绘画提示词
  • 记一个由tinyint类型引发的低级错误
  • Dify快速搭建问答系统
  • AGC050A AtCoder Jumper
  • 用 Python 构建可扩展的图像验证码识别模块
  • 带外安全更新深度解析:ATL漏洞与IE防御措施
  • 更多脚本详见csdn
  • 第三天
  • Golang基础笔记十五之sync
  • hot100 回溯算法
  • 7.28随笔
  • 外培总结
  • 7月28日
  • CodeBuddy IDE小试-单元测试篇
  • 《大道至简》
  • linux中常用的数值计算