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

相关推荐
羸弱的穷酸书生9 分钟前
国网 i1协议 python实现
开发语言·python
电子硬件笔记11 分钟前
Python语言编程导论第三章 编写程序
开发语言·python·编辑器
布谷歌11 分钟前
在java中实现c#的int.TryParse方法
java·开发语言·python·c#
cooldream200916 分钟前
当代 C++ 的三大技术支柱:资源管理、泛型编程与模块化体系的成熟演进
开发语言·c++
洲星河ZXH32 分钟前
Java,集合框架体系
开发语言·windows
宠..38 分钟前
写一个感染型病毒
开发语言·安全·安全性测试
wheelmouse778838 分钟前
一个优雅、通用、零侵入的 CSV 导出工具类(Java 实战)
java·开发语言
cike_y1 小时前
JavaWeb-Request应用与Cookie&[特殊字符]️Session
java·开发语言·安全·java安全
胡萝卜3.02 小时前
深入C++可调用对象:从function包装到bind参数适配的技术实现
开发语言·c++·人工智能·机器学习·bind·function·包装器