在 Docker 中安装 pure-ftpd 并配置虚拟用户

本文介绍如何在 Docker 中安装 pure-ftpd,然后配置多个虚拟用户,实现对同一目录的读写权限控制。

容器启动

使用下面的 docker-compose 文件来启动容器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
services:
ftpd_server:
image: stilliard/pure-ftpd
container_name: pure-ftpd
ports:
- "21:21"
- "30000-30009:30000-30009"
volumes:
# remember to replace /folder_on_disk/ with the path to where you want to store the files on the host machine
- "./data/data:/home"
- "./data/pure-ftpd:/etc/pure-ftpd"
# ssl 证书
- "./data/cert/cert.pem:/etc/ssl/private/pure-ftpd-cert.pem"
- "./data/data/cert/key.pem:/etc/ssl/private/pure-ftpd-key.pem"
environment:
PUBLICHOST: "xx.xx.xx.xx"
FTP_USER_NAME: admin
FTP_USER_PASS: adminPassword
FTP_USER_HOME: /home/user_admin
# also for ssl/tls:
ADDED_FLAGS: "--tls=2"
FTP_PASSIVE_PORTS: 30000:30009 # 默认是 30000:30009, 可通过这个环境变量修改
restart: always

启动命令为:sudo docker compose up -d

添加不同权限的用户

与 Window 不同的是,Linux 中 ftp 用户的权限是通过文件的权限控制的。若我们要配置多个用户,且 A 用户具有上传下载权限,B 用户只有下载权限,具体的步骤如下:

  1. 进入容器

    1
    sudo docker exec -it pure-ftpd bash
  2. 创建两个用户

    1
    2
    3
    4
    # 管理(可读、可写)
    useradd ftpadmin -g ftpgroup -d /dev/null -s /sbin/nologin
    # 普通(只读)
    useradd ftpuser -g ftpgroup -d /dev/null -s /sbin/nologin
  3. 创建两个虚拟用户

    创建两个虚拟用户,分别关联到实际的用户上

    1
    2
    3
    4
    5
    6
    7
    8
    # admin 关联到 ftpadmin 用户上,数据目录为 /data/share
    pure-pw useradd admin -u ftpadmin -g ftpadmingroup -d /data/share

    # user 关联到 ftpuser 用户上,数据目录为 /data/share
    pure-pw useradd user -u ftpuser -g ftpadmingroup -d /data/share

    # 保存到数据库
    pure-pw mkdb
  4. 创建数据目录并设置权限

    1
    2
    3
    4
    5
    mkdir -p /data/share
    # 将目录所有者改为 ftpadmin
    chown ftpadmin:ftpgroup /data/share -R
    # 将目录设置仅所有者可读, 这样,ftpuser 对于目录 /data/share 只有读和执行权限,从而保证虚拟用户 user 只读
    chmod 755 /data/share

参考

本文参考以下文章,在此致以诚挚谢意!

  1. stilliard/docker-pure-ftpd: Docker Pure-ftpd Server

  2. Pure-FTPd :: Pure-FTPd

  3. Pure-ftpd 如何配置多用户,且A用户具有上传下载权限,B用户只有下载权限? - 啊里个东 - 博客园