SFTP-GO 研究
最近在測試sftpgo,發現中文的資料比較少,在企業中很多存儲開始支持S3,比如netapp
于是想嘗試把文件服務器換成sftpgo+S3的存儲,sftp go和AD 群組的搭配測試比較少
自己測試了一把,覺得還是沒有server-u的AD群組方便,但是比filezilla server強太多,記錄下面供各位參考
文章目錄
- 1.安裝-docker方式
- 2.增加存儲
- 2.1 本地存儲
- 2.2 Miniio 存儲
- 3.IP過濾測試
- 4.AD整合測試
- 5.群組測試
- 5.1 在組里面掛載存儲
- 5.2 在組里面掛載虛擬目錄
- 6.使用順序
- 6.1 先新建文件夾
- 6.2 再新建組
- 6.3 新建用戶
- 6.4 將用戶加入組
- 7.文件權限設置
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-stoppedports:- '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:- npisftpgo:image: "drakkan/sftpgo:2.5.x-plugins"container_name: "sftpgo"hostname: "sftpgo"restart: unless-stoppedports:- '8080:8080'- '2022:2022'volumes:- "./sftpgohome:/var/lib/sftpgo"- "./sftpgodata:/srv/sftpgo"environment:# These are the settings to access your dbSFTPGO_WEBDAVD__BINDINGS__0__PORT: 5007SFTPGO_DATA_PROVIDER__DRIVER: "mysql"SFTPGO_DATA_PROVIDER__NAME: "sftpgo"SFTPGO_DATA_PROVIDER__HOST: "mariadb"SFTPGO_DATA_PROVIDER__PORT: 3306SFTPGO_DATA_PROVIDER__USERNAME: "用戶"SFTPGO_DATA_PROVIDER__PASSWORD: "密碼"SFTPGO_COMMON_DEFENDER__ENABLED: "true"SFTPGO_COMMON_DEFENDER__BAN_TIME: 15SFTPGO_COMMON_DEFENDER__BAN_TIME_INCREMENT: 100SFTPGO_COMMON_DEFENDER__THRESHOLD: 5SFTPGO_COMMON_DEFENDER__OBSERVATION_TIME: 15networks:- npiminio:image: "minio"container_name: "minio"hostname: "minio"restart: unless-stoppedports:- '9000:9000'- '9002:9001'volumes:- "./minio_data:/data"- "/etc/localtime:/etc/localtime:ro"environment:- "MINIO_ROOT_USER=admin"- "MINIO_ROOT_PASSWORD=密碼"networks:- npicommand: 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: 5007SFTPGO_DATA_PROVIDER__DRIVER: "mysql"SFTPGO_DATA_PROVIDER__NAME: "sftpgo"SFTPGO_DATA_PROVIDER__HOST: "mariadb"SFTPGO_DATA_PROVIDER__PORT: 3306SFTPGO_DATA_PROVIDER__USERNAME: "用戶"SFTPGO_DATA_PROVIDER__PASSWORD: "密碼"SFTPGO_COMMON_DEFENDER__ENABLED: "true"SFTPGO_COMMON_DEFENDER__BAN_TIME: 15SFTPGO_COMMON_DEFENDER__BAN_TIME_INCREMENT: 100SFTPGO_COMMON_DEFENDER__THRESHOLD: 5SFTPGO_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: 60SFTPGO_PLUGINS__0__TYPE: authSFTPGO_PLUGINS__0__AUTH_OPTIONS__SCOPE: 5SFTPGO_PLUGINS__0__CMD: "/usr/local/bin/sftpgo-plugin-auth"SFTPGO_PLUGINS__0__ARGS: "serve"SFTPGO_PLUGINS__0__AUTO_MTLS: 1SFTPGO_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中設置,類似下圖