LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。LDAP以树状结构存储数据,非常适合存储大量数据,而且数据不经常修改,但是需要快速查询的场景,比如业务系统的鉴权操作。
LDAP支持TCP/IP协议,分为server 端和client端,server端用来存储数据,client用来增删查改数据,监听端口为389,加密端口为636。其数据存储结构完全体现了树状的特点:
ldap树形结构
dn:表示ldap内条目具体位置,比如 dn: cn=admin,ou=users,dc=baifendian,dc=com;
dc:表示条目所属的区域;
ou:表示组织单元;
cn/uid:表示一条记录具体的名字。
caas生产环境中ldap是以容器的形式运行,所以安装ldap前必须具备docker环境,安装命令如下:
docker run --name ldap1 --add-host ldap2.general.com:{{ groups.storages[1] }} \
--restart=always \
--hostname ldap1.general.com \
--env LDAP_BASE_DN="dc=general,dc=com" \
--env LDAP_REPLICATION_HOSTS="#PYTHON2BASH:['ldap://ldap1.general.com:389','ldap://ldap2.general.com:3389']" \
--env LDAP_REPLICATION=true \
--env LDAP_TLS_VERIFY_CLIENT="never" \
--env LDAP_DOMAIN="general.com" \
--env LDAP_ADMIN_PASSWORD="generalcom" \
-v /caas_data/ldap_data/ldap_config:/etc/ldap/slapd.d \
-v /caas_data/ldap_data/ldap_data:/var/lib/ldap \
-v /etc/localtime:/etc/localtime:ro \
-p 3389:389 \
--detach osixia/openldap:1.2.1 \
--loglevel debug \
--copy-service
脚本解释:
ldap分为server端和client端,如果要进行增删查改需要安装openldap,这个包提供几个比较常见的命令,ldapaddd(增加用户),ldapdelete(删除用户),ldapsearch(查找用户),ldapmodify(修改用户)。
示例1: 使用ldif文件添加用户
ldapadd -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=general,dc=com" \
-w generalcom -f /tmp/adduser.ldif
# 命令结果输出:
adding new entry "cn=baifendian001,ou=users,dc=general,dc=com"
ldif文件格式如下:
# cat adduser.ldif
dn: cn=baifendian001,ou=users,dc=general,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: baifendian001
sn: os
displayName: os user
mail: [email protected]
userPassword: baifendian001
示例2:
直接在命令模式下添加用户
ldapadd -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=general,dc=com" \
-w generalcom
# 在交互模式下输入
dn: cn=baifendian002,ou=users,dc=general,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: baifendian002
sn: os
displayName: os user
mail: [email protected]
userPassword: baifendian002
# 命令结果输出:
adding new entry "cn=baifendian006,ou=users,dc=general,dc=com"
ldapdelete -x -H ldap://127.0.0.1:389 \
-D "cn=admin,dc=general,dc=com" \
-w generalcom "cn=baifendian006,ou=users,dc=general,dc=com"
注意:使用ldapdelete时被删除的必须是dn。
ldapdelete -x -h 127.0.0.1 -p 389 -D "cn=admin,dc=hahaha,dc=com" -w hahaha20180613 -f fabric.ldif
fabric.ldif里面就是创建这个用户时候的格式。
示例1: 查询整个ldap数据
# 以管理员admin权限查询ldap用户信息
ldapsearch -x -H ldap://127.0.0.1:389 -b "dc=general,dc=com" \
-D "cn=admin,dc=general,dc=com" -w generalcom
示例2: 查询指定条目
# 查询cn=pp13staging用户信息
ldapsearch -x -H ldap://127.0.0.1:389 -b "dc=general,dc=com" \
-D "cn=admin,dc=general,dc=com" -w generalcom "cn=pp13staging"
ldapmodify -x -H ldap://127.0.0.1:389 -D cn=admin,dc=general,dc=com \
-w generalcom -f /tmp/adduser.ldif
# 命令结果输出:
modifying entry "cn=baifendian002,ou=users,dc=general,dc=com"
使用ldif文件改变用户属性,ldif文件如下:
# cat /tmp/adduser.ldif
dn: cn=baifendian002,ou=users,dc=general,dc=com
changetype: modify
replace: mail
mail: [email protected]
-
delete: displayName
-
参考链接:
https://github.com/Lazast/caas-operation-doc/blob/master/ldap.md#ldap%E7%AE%80%E4%BB%8B
https://docs.oracle.com/cd/E19957-01/820-0293/6nc1tbovg/index.html#bcadf