SFTPGO 整合minio AD群组 测试 |sftpgo with minio and ldap group test

SFTP-GO 研究

最近在测试sftpgo,发现中文的资料比较少,在企业中很多存储开始支持S3,比如netapp

于是想尝试把文件服务器换成sftpgo+S3的存储,sftp go和AD 群组的搭配测试比较少

自己测试了一把,觉得还是没有server-u的AD群组方便,但是比filezilla server强太多,记录下面供各位参考

文章目录

1.安装-docker方式

实际配置

需要对文件目录授权,生产环境权限不要这么粗暴

mkdir -p /docker/sftpgo/sftpgodata
mkdir -p /docker/sftpgo/sftpgohome
chmod -R 777 /docker/sftpgo

version: '3.8'
services:

  mariadb:
    image: "mariadb:10.7"
    container_name: "mariadb"
    hostname: "mariadb"
    restart: unless-stopped
    ports:
      - '3306:3306'
    volumes:
      - "./mariadb_data:/var/lib/mysql"
      - "/etc/localtime:/etc/localtime:ro"
    environment:
      - "MARIADB_ROOT_PASSWORD=密码"
      - "MARIADB_USER=npi"
      - "MARIADB_PASSWORD=密码"
      - "MARIADB_DATABASE=sftpgo"
    networks:
      - npi

  sftpgo:
    image: "drakkan/sftpgo:2.5.x-plugins"
    container_name: "sftpgo"
    hostname: "sftpgo"
    restart: unless-stopped
    ports:
      - '8080:8080'
      - '2022:2022'
    volumes:
      - "./sftpgohome:/var/lib/sftpgo"
      - "./sftpgodata:/srv/sftpgo"
    environment:
      # These are the settings to access your db
      SFTPGO_WEBDAVD__BINDINGS__0__PORT: 5007
      SFTPGO_DATA_PROVIDER__DRIVER: "mysql"
      SFTPGO_DATA_PROVIDER__NAME: "sftpgo"
      SFTPGO_DATA_PROVIDER__HOST: "mariadb"
      SFTPGO_DATA_PROVIDER__PORT: 3306
      SFTPGO_DATA_PROVIDER__USERNAME: "用户"
      SFTPGO_DATA_PROVIDER__PASSWORD: "密码"
      SFTPGO_COMMON_DEFENDER__ENABLED: "true"
      SFTPGO_COMMON_DEFENDER__BAN_TIME: 15
      SFTPGO_COMMON_DEFENDER__BAN_TIME_INCREMENT: 100
      SFTPGO_COMMON_DEFENDER__THRESHOLD: 5
      SFTPGO_COMMON_DEFENDER__OBSERVATION_TIME: 15
    networks:
      - npi
      
  minio:
    image: "minio"
    container_name: "minio"
    hostname: "minio"
    restart: unless-stopped
    ports:
      - '9000:9000'
      - '9002:9001'
    volumes:
      - "./minio_data:/data"
      - "/etc/localtime:/etc/localtime:ro"
    environment:
      - "MINIO_ROOT_USER=admin"
      - "MINIO_ROOT_PASSWORD=密码"
    networks:
      - npi
    command: server /data --console-address ":9001"


networks:
  npi:
    internal: false

2.增加存储

2.1 本地存储

实际配置

用户配置

2.2 Miniio 存储

建议在组里面挂载miniio

3.IP过滤测试

ACL中

4.AD整合测试

在docker的环境变量里面设置后直接用AD登陆,会自动创建账户

也可以先新建账户,拖组,再直接登陆

发现bug,先建账户,再登陆后会删除账户并重建用户

示例配置:

SFTPGO_PLUGIN_AUTH_LDAP_URL="ldap://192.168.1.5:389"
SFTPGO_PLUGIN_AUTH_LDAP_BASE_DN="dc=mylab,dc=local"
SFTPGO_PLUGIN_AUTH_LDAP_BIND_DN="cn=Administrator,cn=users,dc=mylab,dc=local"
SFTPGO_PLUGIN_AUTH_LDAP_PASSWORD="Password.123456"
SFTPGO_PLUGIN_AUTH_LDAP_SEARCH_QUERY="(&(objectClass=user)(sAMAccountType=805306368)(sAMAccountName=%username%))"
SFTPGO_PLUGIN_AUTH_CACHE_TIME=60
SFTPGO_PLUGINS__0__TYPE=auth
SFTPGO_PLUGINS__0__AUTH_OPTIONS__SCOPE=5
SFTPGO_PLUGINS__0__CMD="/usr/local/bin/sftpgo-plugin-auth"
SFTPGO_PLUGINS__0__ARGS="serve"
SFTPGO_PLUGINS__0__AUTO_MTLS=1

AD组配置

实际配置,设置AD组限制后,发现AD账户要登陆2次才能成功,原因不明

environment:
      # 以下是数据库配置
      SFTPGO_WEBDAVD__BINDINGS__0__PORT: 5007
      SFTPGO_DATA_PROVIDER__DRIVER: "mysql"
      SFTPGO_DATA_PROVIDER__NAME: "sftpgo"
      SFTPGO_DATA_PROVIDER__HOST: "mariadb"
      SFTPGO_DATA_PROVIDER__PORT: 3306
      SFTPGO_DATA_PROVIDER__USERNAME: "用户"
      SFTPGO_DATA_PROVIDER__PASSWORD: "密码"
      SFTPGO_COMMON_DEFENDER__ENABLED: "true"
      SFTPGO_COMMON_DEFENDER__BAN_TIME: 15
      SFTPGO_COMMON_DEFENDER__BAN_TIME_INCREMENT: 100
      SFTPGO_COMMON_DEFENDER__THRESHOLD: 5
      SFTPGO_COMMON_DEFENDER__OBSERVATION_TIME: 15
      # 以下是LDAP配置
      SFTPGO_PLUGIN_AUTH_LDAP_URL: "ldap://IP"
      SFTPGO_PLUGIN_AUTH_LDAP_BASE_DN: "DN"
      SFTPGO_PLUGIN_AUTH_LDAP_BIND_DN: "OU"
      SFTPGO_PLUGIN_AUTH_LDAP_PASSWORD: "密码"
      SFTPGO_PLUGIN_AUTH_LDAP_SEARCH_QUERY: "(&(objectClass=user)(sAMAccountType=805306368)(sAMAccountName=%username%))"
      SFTPGO_PLUGIN_AUTH_CACHE_TIME: 60
      SFTPGO_PLUGINS__0__TYPE: auth
      SFTPGO_PLUGINS__0__AUTH_OPTIONS__SCOPE: 5
      SFTPGO_PLUGINS__0__CMD: "/usr/local/bin/sftpgo-plugin-auth"
      SFTPGO_PLUGINS__0__ARGS: "serve"
      SFTPGO_PLUGINS__0__AUTO_MTLS: 1
      SFTPGO_PLUGIN_AUTH_PRIMARY_GROUP_PREFIX: "mini2"  #映射sftpgo 到主要群组
      SFTPGO_PLUGIN_AUTH_REQUIRE_GROUPS: "TRUE" #不设置群组不让登陆,防止用户自动创建



姓名:
    sftpgo-plugin-authserve - 启动 SFTPGo 插件,必须从 SFTPGo 实例调用它

用法:
    sftpgo-plugin-auth 服务 [命令选项] [参数...]

选项:
    --ldap-url 值 LDAP url,例如 ldap://192.168.1.5:389 或 ldaps://192.168.1.5:636 [$SFTPGO_PLUGIN_AUTH_LDAP_URL]
    --ldap-base-dn value 基本 DN 定义 LDAP 目录中根对象的地址,例如 dc=mylab,dc=local [$SFTPGO_PLUGIN_AUTH_LDAP_BASE_DN]
    --ldap-bind-dn value 用于登录 LDAP 服务器以执行搜索的绑定 DN,例如 cn=Administrator,cn=users,dc=mylab,dc=local。 这应该是只读用户 [$SFTPGO_PLUGIN_AUTH_LDAP_USERNAME, $SFTPGO_PLUGIN_AUTH_LDAP_BIND_DN]
    --ldap-password value 定义的 ldap-bind-dn 的密码。 如果为空,将尝试匿名绑定 [$SFTPGO_PLUGIN_AUTH_LDAP_PASSWORD]
    --ldap-search-query value 用于查找尝试登录的用户的 ldap 查询。 %username% 占位符将替换为尝试登录的用户名(默认值:(&(objectClass=user)(sAMAccountType=805306368)(sAMAccountName=%username%))) [$SFTPGO_PLUGIN_AUTH_LDAP_SEARCH_QUERY]
    --ldap-group-attributes value [ --ldap-group-attributes value ] 包含用户所属组的 ldap 属性(默认值:memberOf) [$SFTPGO_PLUGIN_AUTH_LDAP_GROUP_ATTRIBUTES]
    --primary-group-prefix value LDAP 组的前缀,映射到 SFTPGo 用户的主要组。 SFTPGo 用户只能拥有一个主要组 [$SFTPGO_PLUGIN_AUTH_PRIMARY_GROUP_PREFIX]
    --secondary-group-prefix value LDAP 组映射到 SFTPGo 用户辅助组的前缀 [$SFTPGO_PLUGIN_AUTH_SECONDARY_GROUP_PREFIX]
    --membership-group-prefix value 用于映射到 SFTPGo 用户的成员资格组的 LDAP 组的前缀 [$SFTPGO_PLUGIN_AUTH_MEMBERSHIP_GROUP_PREFIX]
    --require-groups 要求经过身份验证的用户至少是一个 SFTPGo 组的成员(默认值: false) [$SFTPGO_PLUGIN_AUTH_REQUIRE_GROUPS]
    --starttls value STARTTLS 是加密 LDAP 连接的首选方法。 使用它而不是使用 ldaps:// URL 架构(默认值:0)[$SFTPGO_PLUGIN_AUTH_STARTTLS]
    --users-base-dir 值 用户默认基目录。 如果已在 SFTPGo 中设置,则保留为空。 如果设置,它必须是绝对路径 [$SFTPGO_PLUGIN_AUTH_USERS_BASE_DIR]
    --cache-time value 定义经过身份验证的用户的缓存时间(以秒为单位)。 0 表示没有缓存(默认值:0) [$SFTPGO_PLUGIN_AUTH_CACHE_TIME]
    --skip-tls-verify value 如果设置为 1,则插件接受服务器提供的任何 TLS 证书以及该证书中的任何主机名。 在这种模式下,TLS 容易受到中间人攻击。 这应该仅用于测试(默认值:0)[$SFTPGO_PLUGIN_AUTH_SKIP_TLS_VERIFY]
    --ca-certificates value [ --ca-certificates value ] 要信任的额外 CA 证书的绝对路径列表 [$SFTPGO_PLUGIN_AUTH_CA_CERTIFICATES]
    --help, -h 显示帮助

5.群组测试

5.1 在组里面挂载存储

5.2 在组里面挂载虚拟目录


6.使用顺序

6.1 先新建文件夹

6.2 再新建组

把6.1文件夹关联到组

6.3 新建用户

6.4 将用户加入组

不用设置用户目录和权限,全部集成组的

7.文件权限设置

在用户或者组ACL中设置,类似下图

相关推荐
xing25166 分钟前
pytest下allure
开发语言·python·pytest
眸笑丶10 分钟前
使用 Python 调用 Ollama API 并调用 deepseek-r1:8b 模型
开发语言·python
enyp8031 分钟前
Qt QStackedWidget 总结
开发语言·qt
gu2043 分钟前
c#编程:学习Linq,重几个简单示例开始
开发语言·学习·c#·linq
lly20240644 分钟前
SQLite 删除表
开发语言
wjs20241 小时前
HTML 字符实体
开发语言
二十雨辰1 小时前
[Java基础]网络编程
java·开发语言
CYRUS_STUDIO1 小时前
使用 AndroidNativeEmu 调用 JNI 函数
android·逆向·汇编语言
梦否1 小时前
【Android】类加载器&热修复-随记
android
AC使者1 小时前
介绍 TensorFlow 的基本概念和使用场景。
开发语言·自然语言处理·sqlite·github