ldap 简单说明

定位:一种轻量级目录访问协议,用于集中存储和查询“身份信息”(用户、组、设备等)。
类比:像一个只读优化的树形数据库(实际可读写),专为“高频查、低频改”设计(如登录认证)。
典型用途:单点登录(SSO)、统一账号管理(如企业 AD、GitLab LDAP 登录)。

安装工具

工具包 openldap, 其中的 ldapsearch 为查询工具, 用来辅助查询


# 安装
brew install openldap

ldapsearch --version

# 查询
ldapsearch `
    -x `                                #  简单认证(不用 SASL)
    -H "ldap://ldap.xapi.fun:1234" `     # ldap 地址
    -D "UID=authelia_bind_user,OU=people,DC=xapi,DC=fun" ` # 账号
    -w "xxxxxx" ` # 密码
    -b "DC=xapi,DC=fun" ` # base DN
    "(uid=*)" uid cn memberOf # 过滤器,及要返回的属性列表,不列出返回属性,则返回所有

(uid=*) 列出所有用户
(&(objectClass=posixAccount)(|(uid=*)(mail=*))c) 列出分组为 git_users 下的用户
  - objectClass=posixAccount 指出要找用户,也可以使用 inetOrgPerson (在 lldp 中为用户)
  - (|(uid=*)(mail=*)) 这里使用了 *  可以使用具体值
  - (memberOf=cn=git_users,ou=groups,dc=xapi,dc=fun) 因为在找用户这里,使用 memberOf= 表示为属于 xxx 分组下的用户
    - ou=groups,dc=xapi,dc=fun 表示为一个组,(groups 内置分组的名称)

搜索结果中看 DN 为完整的路径 

基础概念

  • uid=alice 用户

  • cn=git_users 组

  • ou=people 组织单位

  • dc=xapi,dc=fun 域组件, 多个合成一个域名

  • dn DN(Distinguished Name):唯一标识一个条目,类似文件全路径。

    • dn: uid=x_mi_git,ou=people,dc=xapi,dc=fun 表示用户 x_mi_git, ou=people,dc=xapi,dc=fun 完整的表示了用户所在的位置, people 内置 ou
    • dn: cn=git_users,ou=groups,dc=xapi,dc=fun 表示组 git_users , ou=groups,dc=xapi,dc=fun 完整的表示了组所在的位置, groups 内置 ou
  • RDN(Relative DN):DN 中的一级名称,

    • 比如 uid=alice、ou=people。
  • Base DN:搜索的根起点,类似项目根目录。

    • 比如 dc=xapi,dc=fun
  • 搜索条件

    • (&(uid=alice)(memberOf=...)) & 为下面()中的条件为并且, 还可以使用 | 表示或者, !表示非
      • (&(objectClass=inetOrgPerson)(memberOf=cn=git_users,ou=groups,dc=xapi,dc=fun)(uid=123)) 表示同时满足是用户,属于git_users组,uid为123的用户 (memberOf=cn=git_users,ou=groups,dc=xapi,dc=fun)

gitea 过滤规则

使用该规则实现 lldap 中只有 git_users 组中的用户才能登录

(&(objectClass=posixAccount)(|(uid=%[1]s)(mail=%[1]s))(memberOf=cn=git_users,ou=groups,dc=xapi,dc=fun))
上一篇
下一篇