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的用户属性,可以为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 用户信息同步
在配置完成后,你可以手工执行同步命令来测试配置是否有效。
cdseafile-server-latest
./pro/pro.pyldapsync
docker部署,可以执行
dockerexec-itseafile/opt/seafile/seafile-server-latest/pro/pro.pyldapsync
同步 AD 群组 (可选)
工作原理
组的导入或同步过程会将 LDAP 目录服务器中的组 映射到 Seafile 内部数据库的组。此过程是单向的:
  • 数据库中的组修改不会同步回 LDAP;
  • 除了“设置成员为组管理员”之外,数据库中的其他组修改会在下一次 LDAP 同步时被覆盖。若要添加或删除组成员,只能在 LDAP 服务器 上操作;
  • 导入组的创建者会被设为系统管理员。
有两种同步模式:
  • 周期:在固定时间间隔执行同步
  • 手动:通过脚本触发一次同步
配置
在启用 LDAP 组同步前,你需要先完成 LDAP 认证配置。详情请参阅 基本 LDAP 集成 部分。
以下是 LDAP 组同步相关的配置项:
ENABLE_LDAP_GROUP_SYNC=True#是否允许同步群组
LDAP_GROUP_OBJECT_CLASS='group'#这是用于搜索组对象的类的名称,在ActiveDirectory中,通常是“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-3018:15:05,109][DEBUG]creategroup1,andadddnpairCN=DnsUpdateProxy,CN=Users,DC=Seafile,DC=local<->1success.
[2023-03-3018:15:05,145][DEBUG]creategroup2,andadddnpairCN=DomainComputers,CN=Users,DC=Seafile,DC=local<->2success.
[2023-03-3018:15:05,154][DEBUG]creategroup3,andadddnpairCN=DomainUsers,CN=Users,DC=Seafile,DC=local<->3success.
[2023-03-3018:15:05,164][DEBUG]creategroup4,andadddnpairCN=DomainAdmins,CN=Users,DC=Seafile,DC=local<->4success.
[2023-03-3018:15:05,176][DEBUG]creategroup5,andadddnpairCN=RASandIASServers,CN=Users,DC=Seafile,DC=local<->5success.
[2023-03-3018:15:05,186][DEBUG]creategroup6,andadddnpairCN=EnterpriseAdmins,CN=Users,DC=Seafile,DC=local<->6success.
[2023-03-3018:15:05,197][DEBUG]creategroup7,andadddnpairCN=dev,CN=Users,DC=Seafile,DC=local<->7success.
手动触发 LDAP 同步:
cdseafile-server-lastest
 ./pro/pro.pyldapsync
docker部署,可以执行
dockerexec-itseafile/opt/seafile/seafile-server-latest/pro/pro.pyldapsync
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 配置中:
#Basicconfigoptions
ENABLE_LDAP=True
......
#Multildapconfigoptions
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'#这是用于搜索组对象的类的名称,在ActiveDirectory中,通常是“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服务器仍然使用一些共享配置选项,如下所示:
#Commonusersyncoptions
LDAP_SYNC_INTERVAL=60
IMPORT_NEW_USER=True#Whethertoimportnewuserswhensyncuser
ACTIVATE_USER_WHEN_IMPORT=True#Whethertoactivatetheuserwhenimportingnewuser
DEACTIVE_USER_IF_NOTFOUND=False#Setto"true"ifyouwanttodeactivateauser
                                         #whenhe/shewasdeletedinADserver.
#Commongroupsyncoptions
DEL_GROUP_IF_NOT_FOUND=False#Setto"true",syncprocesswilldeletethegroupifnotfounditinLDAPserver.
DEL_DEPARTMENT_IF_NOT_FOUND=False#Setto"true",syncprocesswilldeletedthedepartmentifnotfounditinLDAPserver.
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 中的第一个角色。