LDAP (Light-weight Directory Access Protocol) 是企业广泛部署的用户信息管理服务器,微软的活动目录服务器(Active Directory)完全兼容 LDAP。这个文档假定您已经了解了 LDAP 相关的知识和术语。
SeaTable 用户介绍
SeaTable 中的用户分为两类:
- 保存在 SeaTable 内部数据库中的用户。可能是管理员创建的用户,也可能是用户自己注册的用户
- LDAP登录(或者其他OAuth登录)时创建到SeaTable中的用户
SeaTable 会自动从内部数据库和 LDAP 中查找用户,只要用户存在于任何一个来源,他们都能登录。
基本的 LDAP/AD 集成配置
SeaTable 要求 LDAP/AD 服务器中每个用户都有一个唯一的 ID。一般来说,AD 中用ObjectGUID,而其他LDAP服务器用EntryUUID
把下面的配置添加到 dtable_web_settings.py 中
ENABLE_LDAP=TrueLDAP_PROVIDER='ldap'LDAP_SERVER_URL='ldap://192.168.0.124'LDAP_BASE_DN='ou=test,ou=test,dc=seatable,dc=local'LDAP_ADMIN_DN='administrator@seatable.local'LDAP_ADMIN_PASSWORD='Hello@123'LDAP_LOGIN_ATTR='mail'
# 以下选项用于群组同步LDAP_SYNC_GROUP=TrueLDAP_GROUP_MEMBER_ATTR='member'LDAP_GROUP_MEMBER_UID_ATTR='uid'LDAP_USER_OBJECT_CLASS='person'LDAP_GROUP_OBJECT_CLASS='group'LDAP_GROUP_UUID_ATTR='objectGUID'SYNC_GROUP_AS_DEPARTMENT=FalseLDAP_DEPARTMENT_NAME_ATTR=''
# 以下是可选选项
# 导入AD用户时,是否激活用户ACTIVATE_USER_WHEN_IMPORT=True
# 是否兼容LDAP用户通过SAML单点登录方式登录LDAP_SAML_USE_SAME_UID=True
# 该属性是LDAP中用户的角色,SeaTable使用该属性作为用户的role,默认值为''LDAP_USER_ROLE_ATTR='title'
# 该属性是LDAP中用户的工号,SeaTable使用该属性作为用户的ID,默认值是''LDAP_EMPLOYEE_ID_ATTR='employee_id'
# 以下两个属性用于拼接处用户的昵称:first_name last_name, 这两个是可选选项,默认是''LDAP_USER_FIRST_NAME_ATTR='givenName'LDAP_USER_LAST_NAME_ATTR='sn'
# 针对中文名字,将 first_name 和 last_name 的顺序反过来,这个是可选选项,默认是FalseLDAP_USER_NAME_REVERSE=True
# 用作 SeaTable 中用户登录 LDAP 的属性。如果通过 email 来登录,可以使用 'mail' 或者 'userPrincipalName';如果希望通过 Windows 用户名登录,可以使用 'sAMAccountName' 属性LDAP_LOGIN_ATTR='userPrincipalName'
# 该属性为用户的联系邮箱LDAP_CONTACT_EMAIL_ATTR='mail'
# 用来过滤可登录的用户范围,比如限定在某个安全组内LDAP_FILTER='memberOf=CN=group,CN=developers,DC=example,DC=com'LDAP_GROUP_FILTER='memberOf=CN=group,CN=developers,DC=example,DC=com'
# 从 4.0 开始,支持 LDAP 登录 支持SASL认证ENABLE_SASL=TrueSASL_MECHANISM='DIGEST-MD5'# SASL 认证机制SASL_AUTHC_ID_ATTR='cn'# olcAuthzRegexp 映射正则匹配规则中的<match>部分的uid对应的用户属性各个配置选项的含义如下:
- ACTIVATE_USER_WHEN_IMPORT: 导入AD用户时,是否激活用户
- LDAP_SAML_USE_SAME_UID: 兼容LDAP用户通过SAML单点登录方式登录
- LDAP_PROVIDER: SeaTable中用这个配置把LDAP和其他的集成的登录方法区别开来
- LDAP_SERVER_URL: LDAP 服务器的地址 URL。如果您的 LDAP 服务器监听在非标准端口上,您也可以在 URL 里面包含端口号,如 ldap://ldap.example.com:389。
- LDAP_BASE_DN: 在 LDAP 服务器的组织架构中,用于查询用户的根节点的唯一名称(Distingushed Name,简称 DN)。这个节点下面的所有用户都可以访问 SeaTable。
- LDAP_ADMIN_DN: 用于查询 LDAP 服务器中信息的用户的 DN。这个用户应该有足够的权限访问 BASE 以下的所有信息。通常建议使用 LDAP/AD 的管理员用户。注:如果开启了 SASL 认证,这里的DN应该是 olcAuthzRegexp 映射规则中对应属性的值。
- LDAP_ADMIN_PASSWORD: LDAP_ADMIN_DN 对应的用户的密码。注:如果开启了 SASL 认证,这里的密码应该是 LDAP_ADMIN_DN 对应的用户进行 SASL 认证的密码。
- LDAP_USER_ROLE_ATTR: 该属性是LDAP中用户的角色,SeaTable使用该属性作为用户的role,默认值为''
- LDAP_EMPLOYEE_ID_ATTR:LDAP 中用户的工号/员工ID,SeaTable 使用这个属性作为用户的 ID
- LDAP_LOGIN_ATTR: 用作 SeaTable 中用户登录 LDAP 的属性。如果通过 email 来登录,可以使用 'mail' 属性或者 'userPrincipalName'。如果希望通过 Windows 用户名登录,可以使用 'sAMAccountName' 属性。
- LDAP_CONTACT_EMAIL_ATTR:用于同步用户在 SeaTable 中的 contact_email。
- LDAP_USER_FIRST_NAME_ATTR:用于拼接用户昵称
- LDAP_USER_LAST_NAME_ATTR:用于拼接用户昵称
- LDAP_USER_NAME_REVERSE:上面两个属性是否反转拼接
- LDAP_SYNC_GROUP: 是否启用同步组。
- LDAP_GROUP_MEMBER_ATTR: 加载组成员时要使用的属性字段。对于大多数AD服务器,该属性是“member”,这是默认值。对于“posixGroup”,它应该设置为“memberUid”。
- LDAP_GROUP_MEMBER_UID_ATTR: 'memberUid'选项中设置的用户属性,用于“posixGroup”。默认值为“uid”。
- LDAP_USER_OBJECT_CLASS: 这是用于搜索用户对象的类的名称。在 Active Directory 中,它通常是“person”。默认值为“person”。
- LDAP_GROUP_OBJECT_CLASS: 这是用于搜索组对象的类的名称。在 AD 中,它通常是“group”;在 OpenLDAP 或其他系统中,您可以使用“groupOfNames”、“groupOfUniqueNames”或“posixGroup”,具体取决于您的 LDAP 服务器。默认值为“grroup”。
- LDAP_GROUP_UUID_ATTR: 默认属性是“ObjectGUID”,在 AD 中可用。其他LDAP服务器请参考: https://ldapwiki.com/wiki/Universally%20Unique%20Identifier。
- SYNC_GROUP_AS_DEPARTMENT: 如果此选项设置为“True”,则组将同步为 SeaTable 中的顶级部门,而不是简单的组,SeaTable 中的部门是一个特殊的组。同步过程保持 OU 的层次结构。
- LDAP_DEPARTMENT_NAME_ATTR: 获取部门名称。您可以将此配置项设置为代表“department”名称的AD字段,例如“description”。 SeaTable创建的部门名称将是AD字段中设置的部门名称,而不是OU名称。
注意:如果配置项包含中文,需要确保配置文件使用 UTF8 编码保存。
关于如何选定 LDAP_BASE_DN和 LDAP_ADMIN_EMAIL 的一些技巧:
- 要确定您的 LDAP_BASE_DN属性,您首先需要打开域管理器的图形界面,并浏览您的组织架构。
- 如果您想要让系统中所有用户都能够访问 SeaTable,您可以用 'cn=users,dc=yourdomain,dc=com' 作为 BASE 选项(需要替换成你们的域名)。
- 如果您只想要某个部门的人能访问,您可以把范围限定在某个 OU (Organization Unit)中。您可以使用 dsquery 命令行工具来查找相应 OU 的 DN。比如,如果 OU 的名字是 'staffs',您可以运行 dsquery ou -name staff。更多的信息可以参考这里。
- AD 支持使用 'user@domain.com' 格式的用户名作为LDAP_ADMIN_EMAIL 。比如您可以使用 administrator@example.com 作为 LDAP_ADMIN_EMAIL。有些时候 AD 不能正确识别这种格式。此时您可以使用 dsquery 来查找用户的 DN。比如,假设用户名是 'seatableuser',运行 dsquery user -name seatableuser 来找到该用户的 。更多的信息可以参考这里。
LDAP 同步用户和群组
SeaTable 定期同步 LDAP 用户和组。在 dtable-events.conf 文件中增加以下配置选项,重启 SeaTable,以便生效。
[LDAP_SYNC]
enabled = true
sync_interval = 60 # 单位是秒
注:如果需要同步群组,需要在 dtable_web_settings.py 中添加相应的配置项,具体配置,请参考上文中 基本的 LDAP/AD 集成配置。