Seafile 是如何管理 LDAP 用户的
当 Seafile 与 LDAP 集成时,系统中的用户可分为两个层级:
-
Seafile 内部用户数据库中的用户。 这些用户附带一些属性,例如是否是系统管理员、是否已激活。
-
LDAP 服务器中的用户。 这些用户存在于 LDAP 服务器中,是 Seafile 的目标用户群。Seafile 并不会直接操作这些用户,而是需要先将他们导入到 Seafile 内部数据库,再为其设置属性。
当 Seafile 统计系统用户数量时,只会计算
内部数据库中已激活的用户
。
基本的 LDAP 集成配置
Seafile 使用 LDAP 进行身份认证的唯一要求是:
LDAP 服务器中的每个用户必须有唯一标识符
。
此标识符同时也会作为用户登录 Seafile 的用户名。常见的选择包括:
-
email 地址: 最常见的方式,大多数组织会为每个成员分配唯一邮箱。
-
UserPrincipalName (UPN): 这是 Active Directory 提供的一个用户属性,格式为 user-login-name@domain-name (如 john@example.com )。它并不是一个真实的邮箱地址,但可作为唯一标识符使用。
该标识符会存储在
social_auth_usersocialauth
表中,用于映射 LDAP 用户与 Seafile 内部用户 ID。
如果某个用户在 LDAP 中更改了此 ID,只需更新
social_auth_usersocialauth
表即可。
集成配置
在
seahub_settings.py
中添加以下配置项,例如:
# 基础配置
ENABLE_LDAP = True
LDAP_SERVER_URL = 'ldap://192.168.0.125' # LDAP 服务器的地址 URL
LDAP_BASE_DN = 'ou=test,dc=seafile,dc=ren' # LDAP 服务器中可以登陆Seafile的用户的根节点
LDAP_ADMIN_DN = 'administrator@seafile.ren' # 用于查询 LDAP 服务器中信息的管理员的 DN
LDAP_ADMIN_PASSWORD = 'Hello@123' # LDAP_ADMIN_DN 对应的用户的密码
LDAP_PROVIDER = 'ldap' # 标识用户的来源,默认为 'ldap'
LDAP_LOGIN_ATTR = 'userPrincipalName' # 用于登录 Seafile 的用户属性,可以为email或userPrincipalName
LDAP_CONTACT_EMAIL_ATTR = '' # 用户的联系邮箱属性 (contact_email)
LDAP_USER_ROLE_ATTR = '' # 用户的角色属性
LDAP_USER_FIRST_NAME_ATTR = 'givenName' # 用于同步用户的 name
LDAP_USER_LAST_NAME_ATTR = 'sn' # 用于同步用户的 name
LDAP_USER_NAME_REVERSE = False # 在中文名称里,这个选项可能是需要的
LDAP_FILTER = 'memberOf=CN=testgroup,OU=test,DC=seafile,DC=ren' # 额外的过滤条件,符合过滤条件的用户可以登陆,否则无法登陆
变量
描述
LDAP_SERVER_URL
LDAP 服务器的 URL
LDAP_BASE_DN
可登录 Seafile 的用户在 LDAP 服务器中的根节点
LDAP_ADMIN_DN
用于查询 LDAP 信息的管理员 DN。在 OpenLDAP 中可能是
cn=admin,dc=example,dc=com
LDAP_ADMIN_PASSWORD
LDAP 管理员账户的密码
LDAP_PROVIDER
用户来源标识,存储在
social_auth_usersocialauth
表中,默认值为
'ldap'
LDAP_LOGIN_ATTR
用户用于登录 Seafile 的 LDAP 属性,必须是 LDAP 中唯一的标识符(参考前文说明)
LDAP_CONTACT_EMAIL_ATTR
LDAP 用户的
contact_email
属性
LDAP_USER_ROLE_ATTR
LDAP 用户的角色属性
LDAP_USER_FIRST_NAME_ATTR
用户名字(first name)的属性,默认值为
"givenName"
LDAP_USER_LAST_NAME_ATTR
用户姓氏(last name)的属性,默认值为
"sn"
LDAP_USER_NAME_REVERSE
在中文等语言环境下,姓名显示顺序可能需要反转。若需要则设为 True
LDAP_FILTER
附加过滤条件。只有满足过滤条件的用户才能登录 Seafile,否则无法登录。
关于如何选定
LDAP_BASE_DN
和
LDAP_ADMIN_DN
:
的一些技巧:
-
要确定您的 LDAP_BASE_DN 属性,您首先需要打开域管理器的图形界面,并浏览您的组织架构。
-
如果您想要让系统中所有用户都能够访问 Seafile,您可以用 cn=users,dc=yourdomain,dc=com 作为 LDAP_BASE_DN(需要替换成你们的域名)。
-
如果您只想要某个部门的人能访问,您可以把范围限定在某个 OU (Organization Unit)中。您可以使用 dsquery 命令行工具来查找相应 OU 的 BASE_DN。比如,如果 OU 的名字是 'staffs',您可以运行 dsquery ou -name staff 。更多的信息可以参考 这里 。
-
-
AD 支持使用 ' user@domain.com ' 格式的用户名作为 LDAP_ADMIN_DN ,比如您可以使用 administrator@example.com 作为 LDAP_ADMIN_DN ,有些时候 AD 不能正确识别这种格式。此时您可以使用 dsquery 来查找用户的 DN。比如,假设用户名是 'seafileuser',运行 dsquery user -name seafileuser 来找到该用户的 DN。更多的信息可以参考 这里 。
设置LDAP/AD用户同步(可选)
在 Seafile 专业版中,除了用户首次登录时会被导入到内部数据库外,你还可以配置 Seafile
定期从 LDAP 服务器同步用户信息
到内部数据库。
可同步的内容包括:
-
用户的 全名 、 部门 、 联系邮箱 (这些信息有助于用户更方便地搜索特定人员);
-
用户的 Windows 或 Unix 登录 ID (这样用户可以使用熟悉的登录 ID 登录 Seafile)。
当用户从 LDAP 删除时,Seafile 中对应的用户会被
停用
。否则,即便 LDAP 已移除该用户,他仍能继续使用 Seafile 客户端同步文件或访问网页端。
同步完成后,你可以在用户的
个人资料页
看到其全名、部门和联系邮箱。
Active Directory 用户同步配置
在
seahub_settings.py
中添加以下选项
# 基础配置项目
ENABLE_LDAP = True
.......
# LDAP 用户信息同步配置项目
LDAP_SYNC_INTERVAL = 60 # LDAP定时同步任务的周期,单位为分钟,默认是60分钟
ENABLE_LDAP_USER_SYNC = True # 是否允许同步用户,如果要启用 LDAP 用户同步,请将其设置为 “true”
LDAP_USER_OBJECT_CLASS = 'person' # 用户对象的 class 名字,在AD中,通常是'person',默认是'person'
LDAP_DEPT_ATTR = '' # LDAP 用户的部门属性
LDAP_UID_ATTR = '' # LDAP 用户的 login_id 属性。如果进行同步,用户也可以使用其 Windows 登录名登录。在 AD 中,属性 “sAMAccountName” 可以用作 “UID_ATTR”。该属性将作为登录 ID 存储在 Seafile 中(在 seahub_db.profile_profile 表中)。
LDAP_AUTO_REACTIVATE_USERS = False # 是否自动激活已禁用的用户,默认是False
LDAP_USE_PAGED_RESULT = False # 是否使用结果分页扩展,当 LDAP 服务器中有超过 1000 个用户时,可以开启
IMPORT_NEW_USER = True # 同步用户信息时,是否导入新用户
ACTIVATE_USER_WHEN_IMPORT = False # 导入新用户时,是否激活用户
DEACTIVE_USER_IF_NOTFOUND = True # 同步时,是否将LDAP中不存在的用户设置为未激活
ENABLE_EXTRA_USER_INFO_SYNC = True # 是否同步 login_id、contact_email 等用户信息
变量
描述
LDAP_SYNC_INTERVAL
同步的间隔时间,单位:分钟。默认 60 分钟
ENABLE_LDAP_USER_SYNC
设为 True 启用 LDAP 用户同步
LDAP_USER_OBJECT_CLASS
用于搜索用户对象的类名。在 Active Directory 中通常为
"person"
,默认值也是
"person"
LDAP_DEPT_ATTR
用户部门信息的属性
LDAP_UID_ATTR
Windows 登录名属性。如果配置了该项,用户可使用 Windows 登录名登录。在 AD 中,可使用
sAMAccountName
作为
UID_ATTR
。该属性会存储为 Seafile 的
login_id
(表
seahub_db.profile_profile
中)。
LDAP_AUTO_REACTIVATE_USERS
是否自动重新激活被停用的用户,默认值 False
LDAP_USE_PAGED_RESULT
是否使用分页扩展。当 LDAP 用户超过 1000 时很有用
IMPORT_NEW_USER
是否在同步时导入新用户
ACTIVATE_USER_WHEN_IMPORT
导入用户时是否自动激活
DEACTIVE_USER_IF_NOTFOUND
如果用户在 AD 中被删除,是否在 Seafile 中停用该用户(设置为未激活)。设为 True 时启用
ENABLE_EXTRA_USER_INFO_SYNC
是否同步额外的用户信息,包括全名、部门、Windows 登录名等
在不激活用户的情况下导入用户
默认情况下,使用上述配置导入的用户将被自动激活。对于一些拥有大量用户的组织,它们可能希望导入用户信息(例如:用户全名),而不自动激活导入的用户,因为激活所有导入的用户将需要AD/LDAP中所有用户的许可证。
Seafile为这种情况提供了一组选项:
-
在 seahub_settings.py 添加以下选项:
ACTIVATE_USER_WHEN_IMPORT = False # Seafile 导入用户为未激活用户
ACTIVATE_AFTER_FIRST_LOGIN = True # 第一次登录到 Seafile 时,该选项将自动激活用户
使用这些配置,导入的用户可以被正常搜索到,但是在用户首次登录之前不会占用license中的授权数。
重新激活已禁用的用户
当您设置“DEACTIVE_USER_IF_NOTFOUND”选项时,当在LDAP服务器中找不到用户时,该用户将被停用。默认情况下,即使此用户重新出现在LDAP服务器中,也不会自动重新激活它,这是为了防止自动重新激活被系统管理员手动停用的用户,这个选项适用于企业版本7.1.8+版本。
但是,有时需要自动重新激活此类用户,您可以在
seahub_settings.py
添加以下选项:
LDAP_AUTO_REACTIVATE_USERS = True # 默认是False
手动触发 LDAP 用户信息同步
在配置完成后,你可以手工执行同步命令来测试配置是否有效。
cd seafile-server-latest
./pro/pro.py ldapsync
docker部署,可以执行
docker exec -it seafile /opt/seafile/seafile-server-latest/pro/pro.py ldapsync
同步 AD 群组 (可选)
工作原理
组的导入或同步过程会将
LDAP 目录服务器中的组
映射到
Seafile 内部数据库的组
。此过程是
单向的
:
-
数 据库中的组修改不会同步回 LDAP;
-
除了“设置成员为组管理员”之外,数据库中的其他组修改会在下一次 LDAP 同步时被覆盖。若要添加或删除组成员,只能在 LDAP 服务器 上操作;
-
导入组的创建者会被设为系统管理员。
有两种同步模式:
-
周期: 在固定时间间隔执行同步
-
手动: 通过脚本触发一次同步
配置
在启用 LDAP 组同步前,你需要先完成 LDAP 认证配置。详情请参阅
基本 LDAP 集成
部分。
以下是 LDAP 组同步相关的配置项:
ENABLE_LDAP_GROUP_SYNC = True # 是否允许同步群组
LDAP_GROUP_OBJECT_CLASS = 'group' # 这是用于搜索组对象的类的名称,在 Active Directory 中,通常是“group”
# 在 OpenLDAP 或其他服务器中,您可以使用“groupOfNames”、“groupOfUniqueNames”或“posixGroup”、这取决于您的LDAP服务器。
# 默认值是“group”。
LDAP_GROUP_MEMBER_ATTR = 'member' # 在加载组的成员时使用的属性字段
# 对于大多数directory服务器,属性是“member”,这也是默认值
# 对于"posixGroup",它应该被设置为"memberUid"。
LDAP_USER_ATTR_IN_MEMBERUID = 'uid' # LDAP_GROUP_MEMBER_ATTR 选项中的用户属性集
LDAP_GROUP_UUID_ATTR = 'objectGUID' # 用于唯一识别 LDAP 中的群组
LDAP_GROUP_FILTER = '' # 群组同步过滤条件
LDAP_USE_GROUP_MEMBER_RANGE_QUERY = False # 当一个组包含太多成员时,AD将只返回其中的一部分。
# 将此选项设置为 TRUE 可使 LDAP 同步适用于大型组。
DEL_GROUP_IF_NOT_FOUND = False # 同步时,是否删除LDAP中不存在的群组
LDAP_SYNC_GROUP_AS_DEPARTMENT = False # 是否将群组同步为Seafile中的顶级部门
LDAP_DEPT_NAME_ATTR = '' # 用以同步部门名称的属性
变量
描述
ENABLE_LDAP_GROUP_SYNC
是否启用组同步
LDAP_GROUP_OBJECT_CLASS
用于搜索组对象的类名
LDAP_GROUP_MEMBER_ATTR
用于加载组成员的属性字段。大多数目录服务器中为
"member"
;若是
"posixGroup"
,需设置为
"memberUid"
LDAP_USER_ATTR_IN_MEMBERUID
在
"posixGroup"
中,
memberUid
对应的用户属性,默认值
"uid"
LDAP_GROUP_UUID_ATTR
用于唯一标识 LDAP 中的组
LDAP_GROUP_FILTER
搜索组对象时的附加过滤条件。若设置则为
(&(objectClass=GROUP_OBJECT_CLASS)(GROUP_FILTER))
,否则为
(objectClass=GROUP_OBJECT_CLASS)
LDAP_USER_GROUP_MEMBER_RANGE_QUERY
当组成员过多时,AD 只会返回部分成员。设为 True 以支持大规模组同步
DEL_GROUP_IF_NOT_FOUND
设为 True 时,如果 LDAP 中未找到该组,将在 Seafile 中删除该组
LDAP_SYNC_GROUP_AS_DEPARTMENT
是否将组同步为 Seafile 中的顶级部门
LDAP_DEPT_NAME_ATTR
用于获取部门名称
Tips:
1.查找群组的根节点是 seahub_settings.py 设置的 LDAP_BASE_DN。
2.一些LDAP服务器,例如 Active Directory,允许一个组作为另一个组的成员。这称为“组嵌套”。如果我们在A组中找到一个嵌套的B组,我们应该递归地将B组中的所有成员添加到A组中,并且B组仍然应该导入为一个独立的群组。也就是说,B组的所有成员也是A组的成员。
3.在某些LDAP服务器(如OpenLDAP)中,通常使用 "Posix" 组来存储组成员关系。如果要导入 "Posix" 组作为 Seafile 的群组,请将 LDAP_GROUP_OBJECT_CLASS选项设置为 "posixGroup"。LDAP中的 "posixGroup" 对象通常包含了成员 UID 的多值属性列表。可以使用 LDAP_GROUP_MEMBER_ATTR 选项设置此属性的名称。默认情况下是 "MemberUid"。"MemberUid" 属性的值是一个可以用来标识用户的ID,它对应于用户对象中的属性。这个ID属性的名称通常是 "uid",但是可以通过 LDAP_USER_ATTR_IN_MEMBERUID 选项设置。注意,"posixGroup" 不支持嵌套组。
同步OU为Seafile组织架构
在 Seafile 中,
部门
是一种特殊的组,具有以下特点:
-
支持 层级结构 ,部门可包含任意层级的子部门;
-
部门可设置 存储配额 。
Seafile 支持将
AD/LDAP 中的 OU(组织单元)
同步为部门,并保持 OU 的层级结构。
从OU中导入“部门”的同步选项:
LDAP_SYNC_DEPARTMENT_FROM_OU = True # 是否同步OU为Seafile部门
LDAP_DEPT_NAME_ATTR = 'description' # 用以同步部门名称的属性
LDAP_CREATE_DEPARTMENT_LIBRARY = False # 将群组同步为顶级部门时,是否自动创建带有群组名称的部门资料库
LDAP_DEPT_REPO_PERM = 'rw' # 设置部门资料库的权限,默认权限为'rw'
LDAP_DEFAULT_DEPARTMENT_QUOTA = -2 # 为部门设置空间配额(单位为MB),默认为无限制
DEL_DEPARTMENT_IF_NOT_FOUND = False # 同步时,是否删除LDAP中不存在的部门
周期性同步和手动同步
周期性同步不会在您重新启动seafile server后立即发生。它在第一个同步间隔之后被调度。例如,如果您将同步间隔设置为30分钟,那么第一次自动同步将在服务重新启动30分钟后发生。要立即同步,您需要手动触发它。
运行同步后,您应该在日志
logs/seafevents.log
中看到如下所示的日志信息。并且在系统管理页面中应该能看到那些组。
[2023-03-30 18:15:05,109] [DEBUG] create group 1, and add dn pair CN=DnsUpdateProxy,CN=Users,DC=Seafile,DC=local<->1 success.
[2023-03-30 18:15:05,145] [DEBUG] create group 2, and add dn pair CN=Domain Computers,CN=Users,DC=Seafile,DC=local<->2 success.
[2023-03-30 18:15:05,154] [DEBUG] create group 3, and add dn pair CN=Domain Users,CN=Users,DC=Seafile,DC=local<->3 success.
[2023-03-30 18:15:05,164] [DEBUG] create group 4, and add dn pair CN=Domain Admins,CN=Users,DC=Seafile,DC=local<->4 success.
[2023-03-30 18:15:05,176] [DEBUG] create group 5, and add dn pair CN=RAS and IAS Servers,CN=Users,DC=Seafile,DC=local<->5 success.
[2023-03-30 18:15:05,186] [DEBUG] create group 6, and add dn pair CN=Enterprise Admins,CN=Users,DC=Seafile,DC=local<->6 success.
[2023-03-30 18:15:05,197] [DEBUG] create group 7, and add dn pair CN=dev,CN=Users,DC=Seafile,DC=local<->7 success.
手动触发 LDAP 同步:
cd seafile-server-lastest
./pro/pro.py ldapsync
docker部署,可以执行
docker exec -it seafile /opt/seafile/seafile-server-latest/pro/pro.py ldapsync
LDAP 集成高级配置选项
使用多个 BASE DN
当公司有多个 OU 需要使用 Seafile 时,可以在
LDAP_BASE_DN
选项中指定多个基准 DN(base DN)。
多个 DN 用分号
;
分隔,例如:
LDAP_BASE_DN = 'ou=developers,dc=example,dc=com;ou=marketing,dc=example,dc=com'
过滤选项
当你的公司组织庞大,但是只有一小部分人使用 Seafile 的时候,搜索过滤器(Search filter)会很有用处. 过滤器可以通过修改
LDAP_FILTER
配置来实现,
此选项的值遵循标准的 LDAP 搜索过滤器语法(
https://msdn.microsoft.com/en-us/library/aa746475(v=vs.85).aspx
)。
用于搜索用户的最终过滤器是
(&($LOGIN_ATTR=*)($LDAP_FILTER))
。
$LOGIN_ATTR
和
$LDAP_FILTER
将被你的选项值替换。
例如,在
seahub_settings.py
配置中增加以下语句:
FILTER = memberOf=CN=group,CN=developers,DC=example,DC=com
最终的搜索过滤器将会是
(&(mail=*)(memberOf=CN=group,CN=developers,DC=example,DC=com))
注意:
上例中的
属性名大小写敏感
,且
memberOf
仅在
Active Directory
中可用。
把 Seafile 用户限定在 AD 的一个组中
你可以使用
LDAP_FILTER
将用户范围限制为某个 AD 组:
-
首先,你需要找到这个组的 DN。我们再次使用 dsquery 命令。比如,如果组的名字是 'seafilegroup',那么您可以运行 dsquery group -name seafilegroup 。
-
然后可以把以下配置加入 seahub_settings.py 中:
LDAP_FILTER = 'memberOf={output of dsquery command}'
使用 TLS 连接到 LDAP 服务器
若 LDAP 服务支持 TLS,可在
LDAP_SERVER_URL
中配置
ldaps 协议地址
,例如:
LDAP_SERVER_URL = 'ldaps://192.168.0.1:636/'
使用结果分页扩展
LDAP 协议 v3 支持一个称为 "paged results" 的扩展功能,当您在 LDAP 中有大量用户的时候,这个选项能够大大提高列出用户的速度,
如今大多数目录服务器都支持此扩展。
在 Seafile 企业版中,在
seahub_settings.py
配置中加入以下设置:
LDAP_USE_PAGED_RESULT = True
自动跟随引用 (referrals)
若要进行配置,请将以下选项添加到
seahub_settings.py
中:
若遇到类似
Invalid credentials
错误,可尝试关闭此功能。
LDAP_FOLLOW_REFERRALS = True
配置集成多个ldap服务器
Seafile Pro版本支持同时对接多个ldap服务器,多ldap服务器意味着,当获取或搜索ldap用户时,它将迭代所有配置的ldap服务器,直到找到匹配的ldap服务器;在列出所有ldap用户时,它将迭代所有ldap服务器以获得所有用户;对于LDAP同步,它将所有配置 ldap 服务器中的所有用户/组信息同步到seafile。
目前,仅支持两个 LDAP 服务器。
把下列选项添加到
seahub_settings.py
配置中:
# Basic config options
ENABLE_LDAP = True
......
# Multi ldap config options
ENABLE_MULTI_LDAP = True
MULTI_LDAP_1_SERVER_URL = 'ldap://192.168.0.2'
MULTI_LDAP_1_BASE_DN = 'ou=test,dc=seafile,dc=top'
MULTI_LDAP_1_ADMIN_DN = 'administrator@example.top'
MULTI_LDAP_1_ADMIN_PASSWORD = 'Hello@123'
MULTI_LDAP_1_PROVIDER = 'ldap1'
MULTI_LDAP_1_LOGIN_ATTR = 'userPrincipalName'
# 以下配置项根据需要添加
MULTI_LDAP_1_USER_FIRST_NAME_ATTR = 'givenName' # 用于同步用户的 name
MULTI_LDAP_1_USER_LAST_NAME_ATTR = 'sn' # 用于同步用户的 name
MULTI_LDAP_1_USER_NAME_REVERSE = False # 用于同步用户的 name
ENABLE_MULTI_LDAP_1_EXTRA_USER_INFO_SYNC = True # 是否同步 login_id、contact_email 等用户信息
MULTI_LDAP_1_FILTER = 'memberOf=CN=testgroup,OU=test,DC=seafile,DC=ren' # 额外的过滤条件,符合过滤条件的用户可以登陆,否则无法登陆
MULTI_LDAP_1_USE_PAGED_RESULT = False # 是否使用结果分页扩展,LDAP 协议 v3 支
MULTI_LDAP_1_FOLLOW_REFERRALS = True
ENABLE_MULTI_LDAP_1_USER_SYNC = True # 是否允许同步用户
ENABLE_MULTI_LDAP_1_GROUP_SYNC = True # 是否允许同步群组
MULTI_LDAP_1_SYNC_DEPARTMENT_FROM_OU = True # 是否同步OU为Seafile部门
MULTI_LDAP_1_USER_OBJECT_CLASS = 'person' # 用户对象的 class 名字
MULTI_LDAP_1_DEPT_ATTR = '' # LDAP 用户的部门属性
MULTI_LDAP_1_UID_ATTR = '' # LDAP 用户的 login_id 属性
MULTI_LDAP_1_CONTACT_EMAIL_ATTR = '' # 用户的联系邮箱属性 (contact_email)
MULTI_LDAP_1_USER_ROLE_ATTR = '' # 用户的角色属性
MULTI_LDAP_1_AUTO_REACTIVATE_USERS = True # 是否自动激活已禁用的用户
MULTI_LDAP_1_GROUP_OBJECT_CLASS = 'group' # 这是用于搜索组对象的类的名称,在 Active Directory 中,通常是“group”
MULTI_LDAP_1_GROUP_FILTER = '' # 群组同步过滤条件
MULTI_LDAP_1_GROUP_MEMBER_ATTR = 'member' # 在加载组的成员时使用的属性字段
# 对于大多数directory服务器,属性是“member”,这也是默认值
# 对于"posixGroup",它应该被设置为"memberUid"。
MULTI_LDAP_1_GROUP_UUID_ATTR = 'objectGUID' # 用于唯一识别 LDAP 中的群组
MULTI_LDAP_1_CREATE_DEPARTMENT_LIBRARY = False # 将群组同步为顶级部门时,是否自动创建带有群组名称的部门资料库
MULTI_LDAP_1_DEPT_REPO_PERM = 'rw' # 设置部门资料库的权限,默认权限为'rw'
MULTI_LDAP_1_DEFAULT_DEPARTMENT_QUOTA = -2 # 为部门设置空间配额(单位为MB),默认为无限制
MULTI_LDAP_1_SYNC_GROUP_AS_DEPARTMENT = False # 是否将群组同步为Seafile中的顶级部门
MULTI_LDAP_1_USE_GROUP_MEMBER_RANGE_QUERY = False # 当一个组包含太多成员时,AD将只返回其中的一部分。
MULTI_LDAP_1_USER_ATTR_IN_MEMBERUID = 'uid' # LDAP_GROUP_MEMBER_ATTR 选项中的用户属性集
MULTI_LDAP_1_DEPT_NAME_ATTR = '' # 用以同步部门名称的属性
......
注意
:所有LDAP服务器仍然使用一些共享配置选项,如下所示:
# Common user sync options
LDAP_SYNC_INTERVAL = 60
IMPORT_NEW_USER = True # Whether to import new users when sync user
ACTIVATE_USER_WHEN_IMPORT = True # Whether to activate the user when importing new user
DEACTIVE_USER_IF_NOTFOUND = False # Set to "true" if you want to deactivate a user
# when he/she was deleted in AD server.
# Common group sync options
DEL_GROUP_IF_NOT_FOUND = False # Set to "true", sync process will delete the group if not found it in LDAP server.
DEL_DEPARTMENT_IF_NOT_FOUND = False # Set to "true", sync process will deleted the department if not found it in LDAP server.
SSO和LDAP用户使用相同的UID
若用户已通过 LDAP 同步到 Seafile,当其通过
SSO(ADFS/OAuth/Shibboleth)
登录时,你希望 Seafile 能识别为同一账号而非新建账号,可以设置:
SSO_LDAP_USE_SAME_UID = True
其中 UID 指 LDAP 中
LDAP_LOGIN_ATTR
的属性(不是
LDAP_UID_ATTR
),在 ADFS 中则是
uid
属性。
必须确保
SSO 与 LDAP 使用相同的唯一标识属性
。
如果你只希望用户通过 SSO 登录,而不允许直接 LDAP 登录,可以设置:
USE_LDAP_SYNC_ONLY = True
LDAP 角色导入
Seafile Pro 版本支持从 LDAP 或 Active Directory 同步角色
要启用此功能,请将以下选项添加到
seahub_settings.py
配置文件中:
LDAP_USER_ROLE_ATTR = 'title'
LDAP_USER_ROLE_ATTR
是在 LDAP 中配置角色的属性字段,我们提供了一个用户定义的函数来映射角色:在
conf/seahub_custom_functions.py
下创建并对其进行编辑,如下所示:
# -*- coding: utf-8 -*-
# AD roles 返回角色列表(role_list),以下函数使用列表中的第一个条目
def ldap_role_mapping(role):
if 'staff' in role:
return 'Staff'
if 'guest' in role:
return 'Guest'
if 'manager' in role:
return 'Manager'
# 从11.0.11-pro版本开始,您可以定义以下函数,处理 role_list 角色
def ldap_role_list_mapping(role_list):
if not role_list:
return ''
for role in role_list:
if 'staff' in role:
return 'Staff'
if 'guest' in role:
return 'Guest'
if 'manager' in role:
return 'Manager'
注意:
您只定义这两个函数中的一个。
您可以重写此函数(在 python 中)以制定自己的映射规则,如果文件或函数不存在,则将同步 role_list 中的第一个角色。