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