命令行部署#
如果您希望使用命令行的方式部署OpenLDAP,请按照本章节步骤部署。
前提#
在开始前,请配置yum源,使用root用户登陆openldap1,进行基础配置:
ssh root@openldap1
从yum源所在机器获取repo文件:
scp oushu@192.168.1.10:/etc/yum.repos.d/oushu.repo /etc/yum.repos.d/oushu.repo
安装lava命令行管理工具:
yum clean all
yum makecache
yum install -y lava
创建一个openldapfile文件:
touch ~/openldapfile
编辑openldapfile文件内容如下:
cat > ~/openldapfile <<EOF
openldap1
openldap2
EOF
和openldap2交换公钥:
lava ssh-exkeys -f ~/openldapfile -p ********
将repo文件分发给openldap2:
lava scp -f ~/openldapfile /etc/yum.repos.d/oushu.repo =:/etc/yum.repos.d
安装#
执行下列命令安装OpenLDAP
lava ssh -f ~/openldapfile -e "yum -y install openldap openldap-clients openldap-servers compat-openldap openldap-devel migrationtools"
配置#
ldap自签名证书及相关目录权限配置
cat > ~/ldapcert.sh<<EOF
# ldap certs
if [ ! -d /etc/openldap/certs ]; then
mkdir -p /etc/openldap/certs
bash /usr/libexec/openldap/create-certdb.sh
bash /usr/libexec/openldap/generate-server-cert.sh
fi
EOF
lava scp -f ~/openldapfile ~/ldapcert.sh =:~/ldapcert.sh
lava ssh -f ~/openldapfile -e "chmod 755 ~/ldapcert.sh"
lava ssh -f ~/openldapfile -e "~/ldapcert.sh"
lava ssh -f ~/openldapfile -e "chown -R ldap:ldap /etc/openldap/"
lava ssh -f ~/openldapfile -e "cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG"
lava ssh -f ~/openldapfile -e "chown -R ldap:ldap /var/lib/ldap"
配置OpenLDAP服务slapd启动的端口(默认389,不修改可忽略此项)
lava ssh -f ~/openldapfile -e "sed -i '/SLAPD_URLS/s#ldap:///#ldap://:389/#g' /etc/sysconfig/slapd"
启动#
slapd服务启动
lava ssh -f ~/openldapfile -e "systemctl start slapd"
ldap Base CN、Root DN、访问权限等基础配置
cat > ~/rootdn.ldif <<EOF
# 监控访问配置
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=oushu,dc=com" read by * none
# suffix、rootDN、root password、ldap数据库访问配置
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: $(slappasswd -s Oushu6@China)
-
replace: olcRootDN
olcRootDN: cn=admin,dc=oushu,dc=com
-
replace: olcSuffix
olcSuffix: dc=oushu,dc=com
-
add: olcAccess
olcAccess: {0}to attrs=userPassword by self write by dn.base="cn=admin,dc=oushu,dc=com" write by anonymous auth by * none
olcAccess: {1}to * by dn.base="cn=admin,dc=oushu,dc=com" write by self write by * read
# 为了安全起见,禁用匿名访问
dn: cn=config
changetype: modify
add: olcDisallows
olcDisallows: bind_anon
EOF
lava scp -f ~/openldapfile ~/rootdn.ldif =:~/rootdn.ldif
lava ssh -f ~/openldapfile -e "ldapadd -Y EXTERNAL -H ldapi:/// -f ~/rootdn.ldif"
导入常用schema
lava ssh -f ~/openldapfile -e "ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif"
lava ssh -f ~/openldapfile -e "ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif"
lava ssh -f ~/openldapfile -e "ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif"
根节点、管理员节点、用户节点及用户组节点创建
cat > ~/users.ldif <<EOF
# 创建域名
dn: dc=oushu,dc=com
objectClass: dcObject
objectClass: organization
dc: oushu
o: oushu com
# 创建管理员用户
dn: cn=admin,dc=oushu,dc=com
objectClass: organizationalRole
cn: admin
# 创建用户组织
dn: ou=users,dc=oushu,dc=com
ou: users
objectClass: organizationalUnit
# 创建用户组组织
dn: ou=group,dc=oushu,dc=com
ou: group
objectClass: organizationalUnit
EOF
lava scp -f ~/openldapfile ~/users.ldif =:~/users.ldif
lava ssh -f ~/openldapfile -e "ldapadd -x -D "cn=admin,dc=oushu,dc=com" -w Oushu6@China -f ~/users.ldif"
开启ldap log服务
cat > ~/ldaplog.ldif << EOF
# 设定日志级别
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
EOF
lava scp -f ~/openldapfile ~/ldaplog.ldif =:~/ldaplog.ldif
lava ssh -f ~/openldapfile -e "ldapmodify -Y EXTERNAL -H ldapi:/// -f ~/ldaplog.ldif"
lava ssh -f ~/openldapfile -e "echo \"local4.* /var/log/slapd.log\"\>\>/etc/rsyslog.conf"
lava ssh -f ~/openldapfile -e "systemctl restart rsyslog"
lava ssh -f ~/openldapfile -e "systemctl restart slapd"
高可用配置
cat > ~/hacommon.ldif <<EOF
# 引用同步模块
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la
# 修改OpenLDAP配置
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpSessionLog: 100
EOF
lava scp -f ~/openldapfile ~/hacommon.ldif =:~/hacommon.ldif
lava ssh -f ~/openldapfile -e "ldapadd -Y EXTERNAL -H ldapi:/// -f ~/hacommon.ldif"
开启openldap1镜像同步(如果服务端口没有修改过可以不写端口,默认389)
cat << EOF | ldapmodify -Y EXTERNAL -H ldapi:///
# 在openldap1上开启镜像同步
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 0
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
provider=ldap://openldap2:389
bindmethod=simple
binddn="cn=admin,dc=oushu,dc=com"
credentials=Oushu6@China
searchbase="dc=oushu,dc=com"
tls_reqcert=allow
scope=sub
schemachecking=on
type=refreshAndPersist
retry="30 5 300 3"
interval=00:00:05:00
-
add: olcMirrorMode
olcMirrorMode: TRUE
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
EOF
开启openldap2镜像同步
cat > ~/ldap2ha.ldif <<EOF
# 在openldap2上开启镜像同步
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
provider=ldap://openldap1:389
bindmethod=simple
binddn="cn=admin,dc=oushu,dc=com"
credentials=Oushu6@China
searchbase="dc=oushu,dc=com"
tls_reqcert=allow
scope=sub
schemachecking=on
type=refreshAndPersist
retry="30 5 300 3"
interval=00:00:05:00
-
add: olcMirrorMode
olcMirrorMode: TRUE
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
EOF
lava scp -f ~/openldapfile ~/ldap2ha.ldif =:~/ldap2ha.ldif
lava ssh -h openldap2 -e "ldapadd -Y EXTERNAL -H ldapi:/// -f ~/ldap2ha.ldif"
检查状态#
ldapsearch -x -D "cn=admin,dc=oushu,dc=com" -w Oushu6@China -b "dc=oushu,dc=com"
如果有查询结果返回,证明openldap1服务可用
ldapsearch -x -D "cn=admin,dc=oushu,dc=com" -w Oushu6@China -b "dc=oushu,dc=com" -H ldap://openldap2
如果有查询结果返回,证明openldap2服务可用
验证用户同步#
在openldap1上创建用户user1
cat << EOF | ldapadd -D "cn=admin,dc=oushu,dc=com" -w Oushu6@China
dn: uid=user1,ou=users,dc=oushu,dc=com
objectClass: posixAccount
objectClass: top
objectClass: inetOrgPerson
uid: user1
displayName: user1
sn: user1
homeDirectory: /home/user1
cn: user1
uidNumber: $((1000+$RANDOM%9000))
gidNumber: 100
userPassword: user1666
EOF
在openldap2上可以查询到这个用户
ldapsearch -x -D "cn=admin,dc=oushu,dc=com" -w Oushu6@China -b "uid=user1,ou=users,dc=oushu,dc=com" -H ldap://openldap2
在openldap2上创建用户user2
cat > ~/user2.ldif <<EOF
dn: uid=user2,ou=users,dc=oushu,dc=com
objectClass: posixAccount
objectClass: top
objectClass: inetOrgPerson
uid: user2
displayName: user2
sn: user2
homeDirectory: /home/user2
cn: user2
uidNumber: $((1000+$RANDOM%9000))
gidNumber: 100
userPassword: user2666
EOF
lava scp -f ~/openldapfile ~/user2.ldif =:~/user2.ldif
lava ssh -h openldap2 -e "ldapadd -D \"cn=admin,dc=oushu,dc=com\" -w Oushu6@China -H ldapi:/// -f ~/user2.ldif"
在openldap1上可以查询到这个用户
ldapsearch -x -D "cn=admin,dc=oushu,dc=com" -w Oushu6@China -b "uid=user2,ou=users,dc=oushu,dc=com"
openldap1的用户openldap2能查到,反之亦然,则证明openldap1、openldap2用户同步完成
常用命令#
(openldap1和openldap2都适用)
查看slapd服务状态
sudo systemctl status slapd
停止slapd服务
sudo systemctl stop slapd
启动slapd服务
sudo systemctl start slapd
重启slapd服务
sudo systemctl restart slapd
查询ldap节点
# -D用来绑定服务器的DN,-w绑定DN的密码,-b要查询的根节点,-H ldap服务器地址
ldapsearch -x -D "cn=admin,dc=oushu,dc=com" -w Oushu6@China -b "dc=oushu,dc=com" -H ldap:///
添加节点
# -f:从文件内读取节点的添加信息,不使用-f的话需要接入标准输入来输入节点信息
ldapadd -x -D "cn=admin,dc=oushu,dc=com" -w Oushu6@China -f newEntry.ldif
修改节点信息
# -f:从文件内读取节点的修改信息,不使用-f的话需要接入标准输入来输入节点信息
ldapmodify -x -D "cn=admin,dc=oushu,dc=com" -w admin113 -f modify.ldif
删除节点
ldapdelete -x -D "cn=admin,dc=oushu,dc=com" -w Oushu6@China "uid=user1,ou=users,dc=oushu,dc=com"
注册到skylab(可选)#
将要安装openldap的机器需要通过机器管理添加到skylab中,如果您尚未添加,请参考注册机器。
在openldap1节点修改/usr/local/oushu/lava/conf配置server.json
,替换localhost为skylab的服务器ip,具体skylab的基础服务lava安装步骤请参考:lava安装。
{
"server": "localhost:1612",
"admin": "localhost:1652"
}
创建一个request文件,包含openldap cluster信息
touch ~/openldap-register.json
编辑json文件内容如下:
{
"data": {
"name": "OpenLDAP",
"group_roles": [
{
"role": "ldap.worker",
"cluster_name": "ldapcluster",
"group_name": "ldapgroup",
"machines": [
{
"id": 1,
"name": "openldap1",
"subnet": "lava",
"data_ip": "192.168.1.11",
"manage_ip": "192.168.1.11",
"assist_port": 1622,
"ssh_port": 22
},
{
"id": 2,
"name": "openldap2",
"subnet": "lava",
"data_ip": "192.168.1.12",
"manage_ip": "192.168.1.12",
"assist_port": 1622,
"ssh_port": 22
}
]
}
]
}
}
配置文件说明,整个json分为3部分:
第一部分name,为集群名称,个性化填写。
第二部分为group_roles,对于openldap只有1个角色,ldap.worker,不可修改。
第三部分,为每个角色添加机器,需要添加的机器信息可以通过下面的方式获得。
在平台基础组件lava所安装的机器执行(端口和用户名按照lava配置修改):
psql lavaadmin -p 4432 -U oushu -c "select m.id,m.name,s.name as subnet,m.private_ip as data_ip,m.public_ip as manage_ip,m.assist_port,m.ssh_port from machine as m,subnet as s where m.subnet_id=s.id;"
获取到所需的机器信息,根据服务角色对应的节点,将机器信息添加到machines数组中。
在openldap1节点调用lava命令注册集群:
lava login -u oushu -p Oushu6@China
lava onprem-register service -s OpenLDAP -f ~/openldap-register.json
如果返回值为:
Add service by self success
则表示注册成功,如果有错误信息,请根据错误信息处理。
从页面登录后,在自动部署模块对应服务中可以查看到新添加的集群,同时列表中会实时监控openLDAP进程在机器上的状态。