LDAP集成(Pro)

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 的用户属性,可以为emailuserPrincipalName
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_idcontact_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 # 是否同步OUSeafile部门
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 组:
  1. 首先,你需要找到这个组的 DN。我们再次使用 dsquery 命令。比如,如果组的名字是 'seafilegroup',那么您可以运行 dsquery group -name seafilegroup
  2. 然后可以把以下配置加入 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)
Seafile专业版支持在LDAP搜索中自动跟随引用。这对于分区的LDAP或者AD服务器很有用, 在这些服务器中,用户可能分布在多个目录服务器上。更多信息,请参考 LDAP 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_idcontact_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 # 是否同步OUSeafile部门

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 中的第一个角色。