以下是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,实现高可用和弹性扩展。

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

  1. 利用CSS3实现鼠标悬停在图片上图片缓慢缩放的两种方法

    1.改变background-size属性 将图片作为某个html元素的背景图片,用transition属性改变图片的大小. .container{ background-size: 100% 100 ...

  2. windows和linux之间上传下载文件的两种方法

    一    用rz和sz http://blog.csdn.net/register_man/article/details/53860774 http://www.jb51.net/article/7 ...

  3. Azure上部署FTP服务

    FTP是个比较复杂的协议,其协议分为控制层和数据层,工作模式分为主动和被动两种模式. 在默认的Active模式下其工作原理如下: 可以看到,客户端发起FTP的请求道服务器端,FTP的端口是21.用户在 ...

  4. 在同一个Apache服务器软件上部署多个站点的基础方法

    这篇文章主要介绍了Apache中Virtual Host虚拟主机配置及rewrite模块中的重要参数说明,是在同一个Apache服务器软件上部署多个站点的基础方法,需要的朋友可以参考下(http:// ...

  5. Tomcat系列(11)——Tomcat 部署web应用的4种方法

    核心内容 1.在Tomcat中有四种部署Web应用的方式,分别是: (1)利用Tomcat自动部署(项目直接拷贝OR WAR包拷贝 到webapps下) (2)利用控制台进行部署(tomcat的man ...

  6. Linux上安装Perl模块的两种方法

    Linux/Unix下安装Perl模块有两种方法:手工安装和自动安装.第一种方法是从CPAN上下载  您需要的模块,手工编译.安装.第二种方法是联上internet,使用一个叫做CPAN的模块自动完 ...

  7. centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课

    centos  lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress  安装phpmyadmin  定时备份mysql两种方法  第二十五节 ...

  8. tomcat部署web应用的4种方法以及部署多个应用

    原文: tomcat部署web应用的4种方法 在Tomcat中有四种部署Web应用的方式,简要的概括分别是: (1)利用Tomcat自动部署 (2)利用控制台进行部署 (3)增加自定义的Web部署文件 ...

  9. FTP协议的两种工作模式简单解析!

    转载自百度百科:http://baike.baidu.com/link?url=KaBZmDM4IZ2v56MyoOnpjqKr0gADv_BRbgjlscYdyvh3-zDwINOHNPSi9Jlp ...

  10. CentOS 7配置静态IP地址的两种方法 来自:互联网

    CentOS 7配置静态IP地址的两种方法 来自:互联网 时间:2021-01-12 阅读:4 如果你想要为CentOS 7中的某个网络接口设置静态IP地址,有几种不同的方法,这取决于你是否想要使用网 ...

随机推荐

  1. 图解Spring源码4-Spring Bean的作用域

    >>>点击去看B站配套视频<<< 系列文章目录和关于我 1. 从一个例子开始 小陈经过开店标准化审计流程后,终于拥有了一家自己的咖啡店,在营业前它向总部的咖啡杯生产 ...

  2. TVMC python:一种TVM的高级API

    Step 0: Imports from tvm.driver import tvmc Step 1: Load a model 下载模型: wget https://github.com/onnx/ ...

  3. codeup之矩阵转置

    Description 将一个2行3列的矩阵(二维数组)行列互换,存储到另一个3行2列的矩阵中. 要求以整型数据为例来解答. Input 输入2行数据,每行3个整数,以空格分隔. Output 行列互 ...

  4. CentOS7 vsftpd服务搭建与详解

    FTP介绍 文件传输协议(File Transfer Protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件.上传文件.下载文件. FTP 基于TCP协议生成一个虚拟的连接,主要用 ...

  5. Go中的map和指针

    本文参考:https://www.liwenzhou.com/posts/Go/08_map/ MAP(映射) Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现.(类似于Pyth ...

  6. go 进阶训练营 微服务可用性(上) 笔记

    隔离 本质上是对系统和资源进行分割,从而实现当系统故障时能限定传播范围和影响范围,即发生故障后只有出问题的服务不可用,保证其他服务仍然可用. 服务隔离 动静隔离 mysql 表中的bufferpool ...

  7. 华为发布伙伴SDK优选库,并推动SDK安全隐私新标准制定

    6月21日,在华为开发者大会2025<鸿蒙生态伙伴SDK论坛>上,华为与中国信通院标准所.鸿蒙生态伙伴代表上海CA.一砂.三未信安,共同宣布"鸿蒙生态伙伴SDK优选库" ...

  8. idea2021.2.2设置自动换行

    [凑数]将需要换行的文件添加进去即可

  9. 利于puppeteer获取网络资源的直链

    背景 比如我想使用curl 或者 页面按钮点击直接下载个网盘资源,那就会出现问题. 因为目前各大网盘给的分享链接都是一个页面,而且大部分还都做了防盗机制,你无法简单的获取真实下载连接! 但是我们可以利 ...

  10. mac的Open V屁N Connect