openldap on docker

介绍

LDAP的存储规则 区分名(DN,Distinguished Name) 在LDAP中,一个条目的区分名称叫做“dn”或者叫做区分名。在一个目录中这个名称总是唯一的。

CN=Common Name 为用户名或服务器名,最长可以到80个字符,可以为中文; OU=Organization Unit为组织单元,最多可以有四级,每级最长32个字符,可以为中文; O=Organization 为组织名,可以3—64个字符长 C=Country为国家名,可选,为2个字符长

CN, OU, DC 都是 LDAP 连接服务器的端字符串中的区别名称(DN, distinguished   name)  LDAP连接服务器的连接字串格式为:ldap://servername/DN    其中DN有三个属性,分别是CN,OU,DC    LDAP是一种通讯协议,如同HTTP是一种协议一样的!  在 LDAP 目录中DC (Domain Component) CN (Common Name) OU (Organizational Unit)

LDAP 目录类似于文件系统目录。 

安装

docker pull osixia/openldap
docker pull osixia/openldap-backup
docker pull  osixia/phpldapadmin
docker pull ldapaccountmanager/lam
mkdir -p /data/slapd/backup
mkdir -p /data/slapd/certificates
mkdir -p /data/slapd/database
mkdir -p /data/slapd/config
docker run \
--name gaojinbo-ldap \
--hostname ldap.gaojinbo.com \
--network host \
--volume /data/slapd/certificates:/container/service/slapd/assets/certs \
--volume /data/slapd/database:/var/lib/ldap \
--volume /data/slapd/config:/etc/ldap/slapd.d \
--volume /data/slapd/backup:/opt/backup \
--env LDAP_ORGANISATION="gaojinbo Group" \
--env LDAP_DOMAIN="gaojinbo.com" \
--env LDAP_ADMIN_PASSWORD="Ez3hVL4ne6" \
--detach osixia/openldap

#加下面的报错
--env LDAP_TLS_CRT_FILENAME=gaojinbo.com.crt \
--env LDAP_TLS_KEY_FILENAME=gaojinbo.com.key \

查看证书过期时间
openssl x509  -noout -dates -in ldap.crt

用户管理

docker run \
--network host \
--env PHPLDAPADMIN_HTTPS=false \
--env PHPLDAPADMIN_LDAP_HOSTS=ldap.gaojinbo.com \
--name phpldapadmin \
--detach osixia/phpldapadmin 

登录管理ldap
http://ldap.gaojinbo.com/
cn=admin,dc=gaojinbo
Ez3hVL4ne6

添加组Posix Group
根下添加,Generic: Posix Group:
所有新建的用户,都使用这个GID
group:LdapUsers
gid:500 #默认是500,建立好后再修改为1500

建立OU
在根目录下添加,建立一个公司组织结构、各个业务系统使用的OU
Generic: Organisational Unit (ou)
如:
hnkj(公司):按部门建立组
gitlab(源代码平台):按项目建立组,如OA/BOSS
chandao(禅道):按岗位建立组,如dev/test/qa
wiki-jira(conflunce-jira):
common:开发/运维/测试/产品
people(这个放所有用户)

建立3个OU
根下添加:
common/gitlab/people

添加OU下的组
点ou=common
使用import功能,模板:
version: 1

# Entry 1: cn=ops,ou=group,dc=gaojinbo,dc=com
dn: cn=test,ou=common,dc=gaojinbo,dc=com
cn: test
objectclass: groupOfUniqueNames
ou: group
uniquemember: cn=gaojinbo3,ou=people,dc=gaojinbo,dc=com
用相同的模板,修改test为ops/dev/prod建立不同的组;成员那个部分可以导入后再修改;
必须使用上面模板建立的组,在jira/conflunce上才能成功连接ldap。

建立用户
点ou=people,点右边的Create a child entry
Generic: User Account
First name:gao
Last name:jinbo
Common Name:gaojinbo  #需要去掉中间空格
User ID:gaojinbo    #需修改
Password:        #使用ssha加密,jira只支持plaintext/des/sha/md5/ssha
GID Number:LdapUsers
Login shell:False
点建立
Server: ldap.gaojinbo.com   Distinguished Name: cn=gaojinbo,ou=people,dc=gaojinbo,dc=com

将用户添加到对应组
点ou=common,cn=ops
uniqueMember下添加add vaojinbo,ou=people,dc=gaojinbo,dc=com
点update,dc=com

备份和恢复

备份

备份
docker exec -it gaojinbo-ldap  ldapsearch -x -D "cn=admin,dc=gaojinbo,dc=com" -w  "Ez3hVL4ne6" -b  "dc=gaojinbo,dc=com" -LLL -H ldap://127.0.0.1 > /data/slapd/backup/ldapbackup_`date '+%Y%m%d_%H%M'`.ldif

恢复

docker exec -it gaojinbo-ldap ldapadd -H ldap://127.0.0.1 -x -D "用户" -f slapdata.ldif -w 密码
docker exec -it gaojinbo-ldap ldapadd -H ldap://127.0.0.1 -x -D "cn=admin,dc=gaojinbo,dc=com"  -w "Ez3hVL4ne6" -f /opt/backup/ldapbackup_20211220_1357.ldif

恢复报错,ldap_add: Already exists (68):
解决方法:
vi /opt/backup/ldapbackup_20211220_1357.ldif
#删除掉重在的内容,然后再重新执行ldapadd