当前位置: 首页 > 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.vanclimg.com/news/726.html

相关文章:

  • SeuratExtend 可视化教程(1):单细胞分析的高颜值绘图指南
  • 机械运动
  • 【2025.7.28】模拟赛T4
  • 深度学习(onnx量化)
  • Redisson
  • uni-app项目跑APP报useStore报错
  • P13493 【MX-X14-T3】心电感应 题解
  • DE_aemmprty 草稿纸合集
  • 题解:P13308 故障
  • mmap提高LCD显示效率
  • 用 Python 构建可扩展的验证码识别系统
  • Java学习Day28
  • 在运维工作中,Dockerfile中常见指令有哪些?
  • 英语_阅读_Rivers are important in culture_单词_待读
  • 题解:P12151 【MX-X11-T5】「蓬莱人形 Round 1」俄罗斯方块
  • 在运维工作中,docker封闭了哪些资源?
  • SciTech-EECS-Library: img2pdf 与 pdf2image : Python 的 pdf 与 image 双向转换库
  • 深度学习(pytorch量化)
  • 在运维工作中,Docker怎么清理容器磁盘空间?
  • 生成函数
  • CVE-2021-45232 Apache APISIX Dashboard身份验证绕过漏洞 (复现)
  • 在运维工作中,如果运行的一个容器突然挂了,如何排查?
  • IIS中配置HTTPS证书的详细步骤
  • 李超线段树
  • 非常值得学习渲染入门的一个教程
  • Linux开机自动登录的一种方法
  • 7月28日
  • 2025 ZR暑假集训 CD联考 Day2 E 环球旅行
  • zk后集训
  • 乘法逆元(部分施工)、exgcd