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中设置,类似下图

相关推荐
沐知全栈开发6 分钟前
Foundation 网格实例
开发语言
专注前端30年26 分钟前
【JavaScript】every 方法的详解与实战
开发语言·前端·javascript
速易达网络28 分钟前
Java Web登录系统实现(不使用开发工具)
java·开发语言·前端
sakoba32 分钟前
MySQL的json处理相关方法
android·学习·mysql·json
神仙别闹34 分钟前
Android 端 2D 横屏动作冒险类闯关游戏
android·游戏
坏小虎39 分钟前
Android App Startup 库使用说明文档,初始化不再用Application了...
android
凡间客1 小时前
Python编程之常用模块
开发语言·python
景彡先生1 小时前
Python基础语法规范详解:缩进、注释与代码可读性
开发语言·前端·python
悟能不能悟1 小时前
java重构旧代码有哪些注意的点
java·开发语言·重构
歪歪1001 小时前
如何在Qt中使用VS的调试功能
运维·开发语言·网络·qt·网络协议·visual studio