CentOS Stream 9上部署FTP应用服务的两种方法(传统安装和docker-compose)
以下是CentOS Stream 9上部署FTP应用服务的两种方法详解,包括操作步骤、注意事项及生产环境应用对比:
一、原生安装 vsftpd 服务
原理:直接通过系统包管理器安装vsftpd,配置系统级服务。
操作步骤:
- 安装与启动
bash
sudo dnf install vsftpd -y # 安装vsftpd:cite[4]:cite[9]
sudo systemctl start vsftpd # 启动服务
sudo systemctl enable vsftpd # 设置开机自启:cite[5]
- 核心配置(编辑 /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
- 防火墙与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]
- 创建FTP用户
bash
sudo useradd -m ftpuser # 创建用户
sudo passwd ftpuser # 设置密码
sudo chmod 750 /home/ftpuser # 限制目录权限:cite[4]:cite[9]
- 测试连接
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
原理:使用容器化技术隔离服务,简化依赖管理和部署。
操作步骤:
- 安装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]
- 安装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]
- 编写 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]
- 启动服务
bash
mkdir ftp_data # 创建数据目录
docker-compose up -d # 后台启动:cite[3]
- 添加多用户
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) |
通过配置文件批量添加,无需系统权限 |
|
升级/迁移 |
需备份配置,重新部署 |
更新镜像即可,数据卷迁移方便 |
|
适用场景 |
长期稳定服务、资源受限环境 |
快速部署、测试环境、需多实例隔离的场景 |
四、实际生产应用建议
- 原生部署适用场景:
- 对资源敏感(如小型云服务器)。
- 需深度定制vsftpd参数(如集成系统PAM认证)。
- 服务需长期运行且变动少。
- Docker部署适用场景:
- 快速搭建临时文件共享(如开发测试环境)。
- 需多版本FTP服务共存(例:不同项目隔离)。
- 自动化运维场景(结合CI/CD流水线)。
- 通用安全建议:
- 禁用匿名登录,使用强密码策略。
- 限制用户目录(chroot),避免越权访问。
- 敏感数据传输建议叠加TLS加密(需额外配置SSL证书)。
总结:
- 追求稳定与轻量 → 选择原生安装,适合传统服务器环境。
- 强调灵活与隔离 → 选择Docker部署,适合云原生和快速迭代场景。
生产环境中,若已有容器管理平台(Kubernetes),可进一步将FTP服务编排为Pod,实现高可用和弹性扩展。
CentOS Stream 9上部署FTP应用服务的两种方法(传统安装和docker-compose)的更多相关文章
- 利用CSS3实现鼠标悬停在图片上图片缓慢缩放的两种方法
1.改变background-size属性 将图片作为某个html元素的背景图片,用transition属性改变图片的大小. .container{ background-size: 100% 100 ...
- windows和linux之间上传下载文件的两种方法
一 用rz和sz http://blog.csdn.net/register_man/article/details/53860774 http://www.jb51.net/article/7 ...
- Azure上部署FTP服务
FTP是个比较复杂的协议,其协议分为控制层和数据层,工作模式分为主动和被动两种模式. 在默认的Active模式下其工作原理如下: 可以看到,客户端发起FTP的请求道服务器端,FTP的端口是21.用户在 ...
- 在同一个Apache服务器软件上部署多个站点的基础方法
这篇文章主要介绍了Apache中Virtual Host虚拟主机配置及rewrite模块中的重要参数说明,是在同一个Apache服务器软件上部署多个站点的基础方法,需要的朋友可以参考下(http:// ...
- Tomcat系列(11)——Tomcat 部署web应用的4种方法
核心内容 1.在Tomcat中有四种部署Web应用的方式,分别是: (1)利用Tomcat自动部署(项目直接拷贝OR WAR包拷贝 到webapps下) (2)利用控制台进行部署(tomcat的man ...
- Linux上安装Perl模块的两种方法
Linux/Unix下安装Perl模块有两种方法:手工安装和自动安装.第一种方法是从CPAN上下载 您需要的模块,手工编译.安装.第二种方法是联上internet,使用一个叫做CPAN的模块自动完 ...
- centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课
centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节 ...
- tomcat部署web应用的4种方法以及部署多个应用
原文: tomcat部署web应用的4种方法 在Tomcat中有四种部署Web应用的方式,简要的概括分别是: (1)利用Tomcat自动部署 (2)利用控制台进行部署 (3)增加自定义的Web部署文件 ...
- FTP协议的两种工作模式简单解析!
转载自百度百科:http://baike.baidu.com/link?url=KaBZmDM4IZ2v56MyoOnpjqKr0gADv_BRbgjlscYdyvh3-zDwINOHNPSi9Jlp ...
- CentOS 7配置静态IP地址的两种方法 来自:互联网
CentOS 7配置静态IP地址的两种方法 来自:互联网 时间:2021-01-12 阅读:4 如果你想要为CentOS 7中的某个网络接口设置静态IP地址,有几种不同的方法,这取决于你是否想要使用网 ...
随机推荐
- 【Java持久层技术演进全解析】从JDBC到MyBatis再到MyBatis-Plus
从JDBC到MyBatis再到MyBatis-Plus:Java持久层技术演进全解析 引言 在Java企业级应用开发中,数据持久化是核心需求之一.本文将系统性地介绍Java持久层技术的演进过程,从最基 ...
- JDK安装及IDE安装编辑
1.下载及安装JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 环境变量的系统变量填上如下: 变量 ...
- numpy.tile用法
先说下在numpy中,个人对array的维度的比较形象的理解: array的维度就是从最外边的[]出发(可理解为array的声明),一直找到具体数值而经过的[]的数量(含最后的数值,它是最后一维) 比 ...
- 古剑山misc01与02详解
古剑山misc01与02详解 蓝书包 下载附件有182个加密压缩包 ,开始没有思路挑一两个尝试爆破看看 这样密码就有点明了了,压缩包的命名为1.zip到182.zip,密码10001到10182正好对 ...
- codeup之C语言10.1+C语言10.2(指针
Description 输入a和b两个整数,按先大后小的顺序输出a和b.注意请使用指针变量的方式进行比较和输出. Input 两个用空格隔开的整数a和b. Output 按先大后小的顺序输出a和b,用 ...
- python3验证手机号码
import redef check_phone_right(self, phone_number): """检测号码是否正确""" pho ...
- IntelliJ IDEA 2023.1 破解教程mac,windows,linux均适用/JetBrains产品全版本激活
前言 该激活方式不限于IDEA,同样也适用于JetBrains 全家桶的所有工具, 包括 IntelliJ IDEA.Pycharm.WebStorm.PhpStorm.AppCode.Datagri ...
- 洛谷P4643 [国家集训队]阿狸和桃子的游戏 & 初赛心情
洛谷P4643 [国家集训队]阿狸和桃子的游戏 引入 其实是道小水题,没有那么多的数据结构和卡常.但是我就是喜欢这种题!giao! (希望这道题不要变色啊--这可是我a的第一道黑题啊啊啊-- 蒟蒻的心 ...
- frp实现内网穿透访问内网多台Linux服务器
本文主要记录笔者在使用frp实现内网穿透访问内网多台Linux服务器的全过程,包括公网服务器的配置.frp服务端.客户端的下载与配置,以及配置systmctl来实现系统级启停frp,并记录我遇到的一些 ...
- 几分钟了解下java虚拟机--04
方法内联 它的基本思想是在调用某个方法时,不通过跳转指令去执行该方法的代码,而是直接将该方法的代码复制到调用点处.这样可以减少方法调用的开销,包括减少函数调用和返回的指令执行时间,以及减少堆栈操作 方 ...