在 Docker 中部署 FTP 服务器

在 Docker 中部署 FTP 服务器可以通过以下步骤完成,这里以广泛使用的 pure-ftpd 镜像为例,提供完整部署方案:

📦 基础部署(单用户模式)

# 创建数据目录
mkdir -p ~/ftp/data ~/ftp/config


# 运行容器(单用户模式)
docker run -d \
  --name ftp_server \
  -p 21:21 \
  -p 30000-30009:30000-30009 \
  -e FTP_USER_NAME=myuser \
  -e FTP_USER_PASS=MySecurePassword! \
  -e FTP_USER_HOME=/home/myuser \
  -v ~/ftp/data:/home/myuser \
  -v ~/ftp/config:/etc/pure-ftpd/passwd \
  stilliard/pure-ftpd:hardened

⚙️ 多用户高级配置(docker-compose.yml)

version: '3.8'
services:
  ftp:
    image: stilliard/pure-ftpd:hardened
    container_name: pure-ftpd
    ports:
      - "21:21"
      - "30000-30009:30000-30009"  # PASV端口范围
    volumes:
      - ./ftp_data:/ftp
      - ./config:/etc/pure-ftpd/passwd
    environment:
      PUBLICHOST: your.domain.com  # 被动模式公网IP/域名
      FTP_PASSIVE_PORTS: "30000:30009"
    command: /run.sh -c 30 -C 10 -l puredb:/etc/pure-ftpd/pureftpd.pdb -E -j -R -P $PUBLICHOST

🔐 创建多用户账户

# 进入容器
docker exec -it pure-ftpd bash


# 创建用户组
groupadd ftpgroup


# 添加用户 (格式: useradd -g ftpgroup -d /ftp/{用户名} {用户名})
useradd -g ftpgroup -d /ftp/user1 user1
useradd -g ftpgroup -d /ftp/user2 user2


# 设置密码
pure-pw useradd user1 -u ftpuser -g ftpgroup -d /ftp/user1
pure-pw useradd user2 -u ftpuser -g ftpgroup -d /ftp/user2


# 更新数据库
pure-pw mkdb
exit

🌐 防火墙配置

# 开放端口
sudo ufw allow 21/tcp
sudo ufw allow 30000:30009/tcp

🛠️ 连接测试

使用 FileZilla 客户端连接:

地址: 服务器IP
端口: 21
协议: FTP
加密: 普通FTP(不加密)
用户: 创建的用户名
密码: 对应用户密码

🔒 TLS 加密配置(可选)

# 在docker-compose.yml中添加
environment:
  ADDED_FLAGS: "--tls=1"
volumes:
  - ./ssl:/etc/ssl/private

生成证书:

openssl req -x509 -nodes -newkey rsa:2048 \
  -keyout ~/ftp/ssl/pure-ftpd.pem \
  -out ~/ftp/ssl/pure-ftpd.pem \
  -subj "/CN=your.domain.com"

⚠️ 安全注意事项

  1. 避免使用弱密码:密码复杂度应大于12位
  2. 限制用户权限
  3.  
  4. 启用日志审计
  5.  

🔄 管理命令

# 添加新用户
docker exec pure-ftpd pure-pw useradd newuser -u ftpuser -d /ftp/newuser


# 重置密码
docker exec pure-ftpd pure-pw passwd user1


# 查看在线用户
docker exec pure-ftpd pure-ftpwho

💡 替代方案

镜像名称

特点

适用场景

fauria/vsftpd

轻量级(仅7MB)

资源受限环境

delfer/alpine-ftp-server

基于Alpine(5MB)

超轻量部署

mcreations/ftp

支持Web管理界面

需要可视化操作

 

重要提示:FTP协议本身不加密传输数据,敏感环境应:

1. 启用FTPS(FTP over SSL)

2. 或改用SFTP(SSH File Transfer Protocol)

3. 限制IP访问:docker run --add-host=allowed.ip:192.168.1.100
posted @ 2025-11-05 16:26  麦麦提敏  阅读(20)  评论(0)    收藏  举报