linuxea:docker-compose vsftpd 3.0.3快速配置

marksugar
2022-02-23 / 0 评论 / 1,211 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年02月23日,已超过349天没有更新,若内容或图片失效,请留言反馈。

VSFTPD 代表“非常安全的 FTP 守护程序”,是一个 GPL 许可的 UNIX 系统 FTP 服务器。它是根据 GNU 通用公共许可证获得许可的。它支持 IPv6 和 SSL。vsftpd 支持显式(自 2.0.0 起)和隐式(自 2.1.0 起)FTPS。vsftpd 是 Ubuntu、CentOS、Fedora、NimbleX、Slackware 和 RHEL Linux 发行版中的默认 FTP 服务器。它安全且速度极快。它是稳定的。VSFTPD 是一个成熟且值得信赖的解决方案,它通过 PAM(可插入身份验证模块)支持虚拟用户。虚拟用户是在 /etc/passwd 和 /etc/shadow 文件中不作为系统上的真实登录存在的用户登录。因此,虚拟用户可以比真实用户更安全,因为被入侵的帐户只能使用 FTP 服务器,但不能登录系统使用其他服务,例如 SSH 或 SMTP。

2011 年 7 月,发现可从主站点下载的 VSFTPD 版本 2.3.4 已被入侵。登录受感染的 vsftpd-2.3.4 服务器的用户可能会发出“:)”笑脸作为用户名,并在端口 6200 上获得命令 shell。这不是 VSFTPD 中的安全漏洞问题,而是有人上传了包含后门的不同版本的 VSFTPD。从那时起,该网站被移至 Google App Engine。

特征

尽管出于速度和安全性的目的很小,但使用 vsftpd 可以实现许多更复杂的 FTP 设置!vsftpd 可以处理:

  • 虚拟 IP 配置
  • 虚拟用户
  • 独立或 inetd 操作
  • 强大的每用户可配置性
  • 带宽限制
  • 每源 IP 可配置性
  • 每源 IP 限制

docker

我们使用的是 markhobson/vsftpd:3.0.3的docker镜像

这个 Docker 容器实现了一个 vsftpd 服务器,具有以下特性:

  • Centos 8 基础镜像。
  • vsftpd 3.0
  • 虚拟用户
  • 被动模式
  • 记录到文件或 STDOUT。

支持的环境变量如下:

环境变量

此图像使用环境变量来允许在运行时配置一些参数:

  • 变量名: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 支持。

  • 变量名:SSL_ENABLE
  • 默认值:否
  • 接受值:YES 或 NO。
  • 说明:如果要启用 SSL 加密,请设置为 YES - 制作 FTPS 服务器。

  • 变量名:TLS_CERT
  • 默认值:cert.pem
  • 接受的值:任何字符串表示文件名的扩展名
  • 说明:应位于/etc/vsftpd/cert/容器中的证书文件名。

  • 变量名:TLS_KEY
  • 默认值:key.pem
  • 接受的值:任何字符串表示文件名的扩展名
  • 描述:应该位于/etc/vsftpd/cert/容器中的密钥文件名。

暴露的端口和卷

该图像暴露了端口2021. 此外,导出三个卷:/home/vsftpd,包含用户主目录,/var/log/vsftpd,用于存储日志和/etc/vsftpd/cert,为容器提供 SSL 证书。

在主机和容器 ( /home/vsftpd) 之间共享主目录时,所有者用户 ID 和组 ID 应分别为 14 和 50。这对应于容器上的 ftp 用户和 ftp 组,但可能与主机上的其他内容匹配。

docker-compose ftp

version: '2.4'
services:
  rabbitmq:
    image: markhobson/vsftpd:3.0.3
    container_name: vsftpd
    restart: always
    hostname: "vsftp"
    network_mode: "host"
    environment:
    - FTP_USER=marksugar
    - FTP_PASS=linuxea
    - PASV_ADDRESS=IPADRESS
    #- PASV_ADDR_RESOLVE=YES
    - PASV_MIN_PORT=21100
    - PASV_MAX_PORT=21110
    - FASV_MAX_PER_IP=20000
    - FASV_MAX_CLIENTS=200000
    #- FILE_OPEN_MODE=0666
    #- LOCAL_UMASK=077
    #- REVERSE_LOOKUP_ENABLE=NO
    volumes:
    - /data/vsftp:/home/vsftpd
    mem_limit: 2048m

而后runing起来

docker-compose -f vsftpd.yaml up -d

ftp客户端工具

对于客户端工具可以考虑sftp和FileZilla,更推荐FileZilla

我们需要注意下字符集传输,一般默认即可,特殊情况需要修改字符集的情况,特别是中文的时候

filezilla

image-20220223103700221.png

sftp

image-20220216120240813.png

断点续传
image-20220216120313180.png

0

评论

博主关闭了当前页面的评论