Docker搭建vsftpd服务
1、简介
这个 Docker 容器实现了一个 vsftpd 服务器,具有以下特点:
- Centos 7 基础镜像。
- vsftpd 3.0
- 虚拟用户
- 被动模式
- 记录到文件或 STDOUT。
2、环境变量
该镜像使用环境变量来允许在运行时配置一些参数:
- 变量名:
FTP_USER
- 默认值:管理员
- 接受的值:任何字符串。避免空格和特殊字符。
- 说明:默认 FTP 帐户的用户名。如果
FTP_USER
在运行时没有通过环境变量指定,admin
将默认使用。
- 变量名:
FTP_PASS
- 默认值:随机字符串。
- 接受的值:任何字符串。
- 说明:如果您没有通过 为默认的 FTP 帐户指定密码,
FTP_PASS
则会自动生成一个 16 个字符的随机字符串。您可以通过容器日志获取该值。
- 变量名:
PASV_ADDRESS
- 默认值:Docker 主机 IP/主机名。
- 接受的值:任何 IPv4 地址或主机名(请参阅 PASV_ADDRESS_RESOLVE)。
- 说明:如果不指定要在被动模式下使用的 IP 地址,将使用 Docker 主机的路由 IP 地址。请记住,这可能是本地地址。
- 变量名:
PASV_ADDR_RESOLVE
- 默认值:否
- 接受的值:<NO|YES>
- 描述:如果您想在 PASV_ADDRESS 选项中使用主机名(而不是 IP 地址),请设置为 YES。
- 变量名:
PASV_ENABLE
- 默认值:是
- 接受的值:<NO|YES>
- 说明:如果要禁止 PASV 方法获取数据连接,请设置为 NO。
- 变量名:
PASV_MIN_PORT
- 默认值:21100
- 接受的值:任何有效的端口号。
- 说明:这将用作被动模式端口范围的下限。请记住使用
docker -p
参数发布您的端口。
- 变量名:
PASV_MAX_PORT
- 默认值:21110
- 接受的值:任何有效的端口号。
- 说明:这将用作被动模式端口范围的上限。启动具有大量已发布端口的容器将需要更长的时间。
- 变量名:
XFERLOG_STD_FORMAT
- 默认值:否
- 接受的值:<NO|YES>
- 描述:如果您希望以标准 xferlog 格式写入传输日志文件,请设置为 YES。
- 变量名:
LOG_STDOUT
- 默认值:空字符串。
- 接受值:要启用的任何字符串,空字符串或未定义以禁用。
- 说明:通过STDOUT输出vsftpd日志,方便通过容器日志访问。
- 变量名:
FILE_OPEN_MODE
- 默认值:0666
- 接受的值:文件系统权限。
- 描述:创建上传文件的权限。Umasks 应用于此值之上。如果您希望上传的文件可执行,您可能希望更改为 0777。
- 变量名:
LOCAL_UMASK
- 默认值:077
- 接受的值:文件系统权限。
- 描述:为本地用户设置的文件创建 umask 值。笔记!如果要指定八进制值,请记住“0”前缀,否则该值将被视为基数为 10 的整数!
- 变量名:
REVERSE_LOOKUP_ENABLE
- 默认值:是
- 接受的值:<NO|YES>
- 描述:如果您想避免名称服务器不响应反向查找的性能问题,请设置为 NO。
- 变量名:
PASV_PROMISCUOUS
- 默认值:否
- 接受的值:<NO|YES>
- 说明:如果要禁用 PASV 安全检查以确保数据连接源自与控制连接相同的 IP 地址,请设置为 YES。仅当您知道自己在做什么时才启用!唯一合法的用途是在某种形式的安全隧道方案中,或者可能是为了促进 FXP 支持。
- 变量名:
PORT_PROMISCUOUS
- 默认值:否
- 接受的值:<NO|YES>
- 说明:如果要禁用确保传出数据连接只能连接到客户端的 PORT 安全检查,请设置为 YES。仅当您知道自己在做什么时才启用!这样做的合法用途是促进 FXP 支持。
该图像公开了端口20
和21
. 此外,导出两个卷:/home/vsftpd
,其中包含用户主目录,以及/var/log/vsftpd
,用于存储日志。
在主机和容器 ( /home/vsftpd
)之间共享主目录时,所有者用户 ID 和组 ID 应分别为 14 和 50。这对应于容器上的 ftp 用户和 ftp 组,但可能匹配主机上的其他内容。
3、用例
1)创建一个临时容器用于测试目的:
docker run --rm fauria/vsftpd
2)使用默认用户帐户创建处于活动模式的容器,并绑定数据目录:
docker run -d -p 21:21 -v /my/data/directory:/home/vsftpd --name vsftpd fauria/vsftpd
# see logs for credentials:
docker logs vsftpd
3)使用自定义用户帐户创建生产容器,绑定数据目录并启用主动和被动模式:
docker run -d -v /my/data/directory:/home/vsftpd \
-p 20:20 -p 21:21 -p 21100-21110:21100-21110 \
-e FTP_USER=myuser -e FTP_PASS=mypass \
-e PASV_ADDRESS=127.0.0.1 -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \
--name vsftpd --restart=always fauria/vsftpd
4)手动将新的 FTP 用户添加到现有容器:
docker exec -i -t vsftpd bash
mkdir /home/vsftpd/myuser
echo -e "myuser\nmypass" >> /etc/vsftpd/virtual_users.txt
/usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
exit
docker restart vsftpd
文章内容仅用于作者学习使用,如果内容侵犯您的权益,请立即联系作者删除,作者不承担任何法律责任。