OpenLdap搭建
LDAP是一款轻量级目录访问协议(Lightweight Directory Access Protocol,简称LDAP),属于开源集中账号管理架构的实现
1、OpenLdap简介
OpenLDAP目录中的信息是以树状的层次结构来存储数据((这很类同于DNS),最顶
层即根部称作“基准DN”,形如“dc=mydomain,dc=org”或者“o=mydomain.org”,前一种方式更为灵活也是Windows AD中使用的方式。
在根目录的下面有很多的文件和目录,为了把这些大量的数据从逻辑上分开,OpenLDAP像其它的目录服务协议一样使用OU(Organization Unit,组织单元),可以用来表示公司内部机构,如部门等,也可以用来表示设备、人员等。同时OU还可以有子OU,用来表示更为细致的分类。
OpenLDAP中每一条记录都有一个唯一的区别于其它记录的名字DN(Distinguished Name),其处在“叶子”位置的部分称作RDN(用户条目的相对标识名)。如dn:cn=tom,ou=animals,dc=ilanni,dc=com中cn即为RDN,而RDN在一个OU中必须是唯一的。
其中o=dlw.com是dc=dlw,dc=com的简写
部署的组织架构:1
2
3
4
5dn: dc=qbos,dc=com # 公司
dn: ou=krb5,dc=qbos,dc=com # 部门
dn: cn=admin,dc=qbos,dc=com # LDAP管理用户
dn: cn=kdc-srv,ou=krb5,dc=qbos,dc=com # kdc连接ldap用户
dn: cn=adm-srv,ou=krb5,dc=qbos,dc=com # kadmin连接ldap用户
1、安装软件包
1 | # yum install openldap openldap-servers openldap-clients openldap-devel compat-openldap -y |
2、初始化配置
1 | # cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf |
生产ldap服务管理用户密码1
2# slappasswd -s 123123
{SSHA}FGTQwm900Ac+FPPTpzB9R1ZHNVY/MOXP # hash加密后的值,直接复制到配置文件中使用
修改slap.conf,支持kerberos1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51# vim /etc/openldap/slapd.conf
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/nis.schema
# kerberos使用的schema文件
include /etc/openldap/schema/kerberos.schema
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
database bdb
# 组织后缀
suffix "dc=qbos,dc=com"
# 管理员账号
rootdn "cn=admin,dc=qbos,dc=com"
# 管理员密码(slappasswd生产的密码)
rootpw {SSHA}FslGWaaPsw9XcM7Sr3gc24lFQQe1NxRA
directory /var/lib/ldap
# ldap数据库索引字段
index krbPrincipalName eq,pres,sub
index objectClass eq,pres
loglevel 256
# acl规则
access to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=qbos,dc=com" write
by anonymous auth
by self write
by * none
access to dn.subtree="ou=krb5,dc=qbos,dc=com"
by dn="cn=admin,dc=qbos,dc=com" write
# kerberos服务连接ladp的账号
by dn="cn=adm-srv,ou=krb5,dc=qbos,dc=com" write
# kerberos服务连接ladp的账号
by dn="cn=kdc-srv,ou=krb5,dc=qbos,dc=com" read
by * none
access to attrs=loginShell
by dn="cn=admin,dc=qbos,dc=com" write
by self write
by * none
access to dn.base=""
by * read
access to *
by self write
by * read
access to *
by dn="cn=admin,dc=qbos,dc=com" write
by users read
by * none
access to *
by dn.exact="cn=admin,dc=qbos,dc=com" read
by * none
3、初始化ldap配置
官方 对于 OpenLDAP 2.4 ,不推荐使用 slapd.conf 作为配置文件。从这个版本开始所有配置数据都保存在 /etc/openldap/slapd.d/中,在slapd.d生成配置文件,但是还是能使用slapd.conf修改配置的,每次修改后都要执行slaptest -f 命令1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51# rm -rf /etc/openldap/slapd.d/*
修改文件权限
# chown ldap.ldap -R /var/lib/ldap/
每次修改完sldp.conf配置文件都要删除重新执行
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
报错忽略
> 5b99e55c bdb_db_open: database "dc=qbos,dc=com": db_open(/var/lib/ldap/id2entry.bdb) failed: No such file or directory (2).
> 5b99e55c backend_startup_one (type=bdb, suffix="dc=qbos,dc=com"): bi_db_open failed! (2)
> slap_startup failed (test would succeed using the -u switch)
# chown ldap.ldap -R /etc/openldap/slapd.d/
启动sldap服务
# /etc/init.d/slapd start
初始化ldap库,编写kerberos.ldif文件
# vim /tmp/kerberos.ldif
dn: dc=qbos, dc=com
dc: qbos
objectClass: top
objectClass: dcObject
objectClass: organization
o: qbos.com
dn: ou=krb5, dc=qbos,dc=com
ou: krb5
objectClass: organizationalUnit
dn: cn=kdc-srv,ou=krb5,dc=qbos,dc=com
cn: kdc-srv
objectClass: simpleSecurityObject
objectClass: organizationalRole
userPassword: {SSHA}o4pwTcWIoY/CX8mx7gUyy0PRdwfKilAx
dn: cn=adm-srv,ou=krb5,dc=qbos,dc=com
cn: adm-srv
objectClass: simpleSecurityObject
objectClass: organizationalRole
userPassword: {SSHA}o4pwTcWIoY/CX8mx7gUyy0PRdwfKilAx
注:userPassword中的密码是slappasswd生成的
导入kerberos.ldif到ldap库中
# ldapadd -x -D 'cn=admin,dc=qbos,dc=com' -w 123123 -h 127.0.0.1 -f /tmp/kerberos.ldif
注:userPassword中的密码是slappasswd生成的, -w 是'cn=admin,dc=qbos,dc=com'真实的用户密码
查看ldap数据库信息
# ldapsearch -x -D 'cn=admin,dc=qbos,dc=com' -w 123123 -b 'cn=adm-srv,ou=krb5,dc=qbos,dc=com'
搭建kerberos服务端
Kerberos 服务是单点登录系统,这意味着您对于每个会话只需向服务进行一次自我验证,即可自动保护该会话过程中所有后续事务的安全。服务对您进行验证后,即无需在每次使用基于 Kerberos 的服务时进行验证 官方文档
1、安装过程
1 | # yum install krb5-server* krb5-auth-dialog* krb5-libs* krb5-workstation* -y |
2、修改配置文件
1 | 编辑krb5.conf |
向数据库添加管理主体
可以根据需要添加任意数目的 admin 主体。至少必须添加一个 admin 主体,这样才能完成 KDC 配置过程1
2
3
4# kadmin.local: addprinc kadmin/admin
Enter password for principal kadmin/admin@QBOS.COM:<Type the password>
Re-enter password for principal kadmin/admin@QBOS.COM: <Type it again>
Principal "kadmin/admin@QBOS.COM" created.
为 kadmind 服务创建一个密钥表文件
此命令序列创建一个包含 kadmin/1
2
3
4# kadmin.local: ktadd -k /var/kerberos/krb5kdc/kadm5.keytab kadmin/admin@QBOS.COM
# kadmin.local: ktadd -k /var/kerberos/krb5kdc/kadm5.keytab kadmin/changepw@QBOS.COM
参考文件:https://docs.oracle.com/cd/E24847_01/html/819-7061/setup-9.html
3、生成访问ldap的服务密码文件
1 | # kdb5_ldap_util -D "cn=admin,dc=qbos,dc=com" -w 123123 stashsrvpw -f /var/kerberos/krb5kdc/service.keyfile "cn=kdc-srv,ou=krb5,dc=qbos,dc=com" |
4、创建kerberos数据库
1 | # kdb5_ldap_util -D "cn=admin,dc=qbos,dc=com" -H ldap:// create -r QBOS.COM |
5、启动kerberos服务
1 | # /etc/init.d/krb5kdc start |
6、测试创建kerberos用户
1 | # kadmin.local |
7、问题
1 | krb5kdc: Can not fetch master key (error: ?????????). - while fetching master key K/M for realm QBOS.COM |
搭建kerberos客户端
1、安装kerberos客户端
1 | # yum install -y krb5-libs krb5-workstation krb5-devel |
2、修改配置文件
1 | 修改kerberos配置文件 |
3、生成keytab密钥表
keytab密钥表是可以免密登录,如果用户有独立的密钥表是可以免密登录,提供服务的每台主机都必须包含称为 keytab(密钥表)的本地文件。
要将服务密钥添加至密钥表文件,应使用 kadmin 的 ktadd 命令,将相应的服务主体添加至主机的密钥表文件。由于要将服务主体添加至密钥表文件,因此该主体必须已存在于 Kerberos 数据库中,以便 kadmin 可验证其存在
创建主机密钥表
1 | 创建主机kerberos主体 |
4、kerberos用户授权主机
用户配置文件: .k5login - 用于主机访问的Kerberos V5 acl文件,该文件驻留在用户的主目录,包含了Kerberos主体列表1
2
3
4
5在客户端主机172.28.0.106的root家目录下修改.k5login,授权给用户admintest
# vim ~/.k5login
...
admintest@QBOS.COM
admintest通过kinit
获取到票据后就可以ssh root@172.28.0.106
注:-policy为指定密码安全策略,可以使用 list_policies
查看密码策略列表,使用get_policy
查看策略详情
kerberos双活与主从
kerberos 双主+主从实际上是通知ldap实现的,只需实现LDAP的双主+主从
1、LDAP双主+主从部署
2、kerberos服务端配置
按照 搭建kerberos客户端
安装kerberos客户端,将 另一台 kerberos服务端配置CA、key、.k5.QBOS.COM 拷贝至相应位置即可
参考文档:
https://www.ilanni.com/?p=13775
https://www.cnblogs.com/zhaojonjon/p/5967281.html
https://www.cnblogs.com/zihanxing/p/7001201.html
https://docs.oracle.com/cd/E26926_01/html/E25889/refer-15.html
http://k5wiki.kerberos.org/wiki/LDAP_on_Kerberos
kerberos主从
https://help.ubuntu.com/lts/serverguide/kerberos-ldap.html.en
kerberos x.509证书
https://web.mit.edu/kerberos/krb5-latest/doc/admin/pkinit.html