准备文件
- 在配置之前需要准备好dockerfile 来拉取基本的image
- 需要准备好LDAP的配置文件ldif 。 ldif 文件包含dc.ldif, organization.ldif, rootpw.ldif, memberof.ldif 等,这些配置文件需要根据自己的需求填写。
- 需要准备好创建user的脚本文件和启动脚本文件
- 把上述文件和docker file 放在一个文件夹下
**docker file**
From {repo}/centos7:latest
MAINTAINER {auther's email}
#add startup scripts
COPY run-*.sh /usr/local/bin/
COPY ldifs/*.ldif /root/openldap/
COPY ldifs/add* /root/openldap/
#expose default ports for ldap and ldaps
EXPOSE 389 636
ENTERPOINT["/bin/bash", "/usr/local/bin/run-openldap.sh"]
**run.sh**
slapd -h "ldap:/// ldaps:///"
/bin/bash
**adduser.py**
import os
import time
import sys
userPrefixList = {vmxx, vmyy, vmzz}
num = 3000
idStartIndex = 5001
bn = sys.argv[1]
user_ldif = """
dn:cn={username}, ou=people,{bn}
cn: {username}
gidnumber: {gid}
homeDirectory: /home/{username}
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: {username}
uid: {username}
uidnumber: {uid}
userpassword: **********
"""
def pipe(cmd):
proc = os.popen(cmd, 'r')
text = proc.read()
sts = proc.close()
print(cmd)
if sts is None:
sts = 0
print(text)
return (text, sts)
for user_prefix in userPrefixList:
for i in range(1, num+1):
with open("user.ldif", "w+") as fd:
fd.truncate()
username = user_prefix + str(i)
uid = idStartIndex
gid = idStartIndex
para = {'username': username, 'gid': gid, 'uid': uid, 'bn': bn}
user = user_ldif.format(**para)
print(user)
fd.write(user)
print("Add user" + username)
pipe("ldapadd -x -w ******* -D 'cn=Manager, {}' -f user.ldif -H ldapi:///".format(bn))
idStartIndex += 1
if idStartIndex % 10 ==0:
time.sleep(1)
build image并配置
- 进入到dockerfile所在的目录下
- 执行命令
docker build -t ldap:v1 .
- 进入到docker中
docker run -p 389:389 -p 636:636 -it ldap:v1
- 进入docker 以后开始配置ldap。首先需要安装一些包
- 执行安装命令
yum install -y openldap openldap-servers openldap-clients
- 配置DB
cp /usr/share/openldap-servers/DB_DONFIG.example /var/lib/ldap/DB_CONFIG
- 导入schema:
ls /etc/openldap/schema/*.ldif | while read f; do ldapadd -Y EXTERNAL -H ldapi:/// -f $f; done
- slappasswd 修改密码,修改rootpw.ldif, 执行
ldapadd -Y EXTERNAL -H ldapi:/// -f rootpw.ldif
- 启用memberof, 加载memberof模块, 执行
ldapadd -Q -T EXTERNAL -H ldapi:/// -f memberof.ldif
(注:把olcMemberOfRefint 设置魏TRUE可以开启refint功能。若设置了属性manager,删除时可以一键删除所有含有manager属性的记录)
- 修改organization.ldif,执行
ldapadd -x -D cn=root, dc=xxxx,dc=com -W -f /root/openldap/organization.ldif -H ldapi:///
- 执行python adduser.py domain, 添加user 到ldap 库
检查是否配置成功并保存docker image
- 重启ldap服务后在ldap client上查询是否有新建的用户。查询命令
ldapsearch -x -D "cn=admin,dc=xxxx,dc=com" -w Passwordxxx -b 'ou=people, dc=newname,dc=com' | grep /home/ | wc -l
- 如果能找到新建的用户说明配置成功。
- 保存当前配置好的docker,先查询到当前运行的container id
docker ps
, 然后保存docker docker commit containerID ldapserver:v2
- 后续直接启动ldapserver:v2就可以开启ldap服务了。
- 如果想修改user,可以通过挂在volume,复写adduser.py 并执行。