文章目录
- 一、背景
- 二、Kerberos安装部署
- 2.1kerberos服务端必要软件安装
- 2.2配置krb5.conf
- 2.3配置kdc.conf
- 2.4配置kadm5.acl
- 2.5创建Kerberos数据库
- 2.6启动Kerberos服务
- 2.7创建Kerberos管理员principal
- 2.8客户端安装kerberos
- 2.9Kerberos功能验证
- 本人其他相关文章链接
一、背景
亲测可用,之前搜索了很多博客,啥样的都有,就是不介绍报错以及配置用处,根本不懂照抄那些配置是干啥的,稀里糊涂的按照博客搭完也跑不起来,因此记录这个。
项目背景
:公司项目当前采用http协议+shiro+mysql的登录认证方式,而现在想支持ldap协议认证登录然后能够访问自己公司的项目网站。
举例说明
:假设我们公司有自己的门户网站,现在我们收购了一家公司,他们数据库采用ldap存储用户数据,那么为了他们账户能登陆我们公司项目所以需要集成,而不是再把他们的账户重新在mysql再创建一遍,万一人家有1W个账户呢,不累死了且也不现实啊。
需要安装openldap+kerberos,且ldap和kerberos安装在同一台服务器上,当前版本如下:
centos 7.9
openldap 2.4.44
phpldapadmin 1.2.5
服务器IP:10.110.38.162
Kerberos :Kerberos 5 release 1.15.1
本博客参考的博客是:
- ① Openldap安装部署
- ② Kerberos基本原理、安装部署及用法
- ③ Openldap集成Kerberos
注意
:这个文章是真实可行的,但是有执行顺序,一定要先安装“Openldap安装部署”+“Kerberos基本原理、安装部署及用法”之后,确保安装无误后再去安装“Openldap集成Kerberos”。
我当时犯的毛病就是前两个没完全照着文档安装完成就直接安装的第三个,然后出现各种问题,我还不知道为点啥。人家博客都说了要先安装前两个,再看这个“Kerberos基本原理、安装部署及用法”。所以一定要注意安装顺序,遇到不懂得配置也没事先照着安。
二、Kerberos安装部署
2.1kerberos服务端必要软件安装
# yum -y install krb5-server openldap-clients
在安装完上述的软件之后,会在KDC主机上生成配置文件/etc/krb5.conf和/var/kerberos/krb5kdc/kdc.conf。
2.2配置krb5.conf
/etc/krb5.conf:包含Kerberos的配置
。例如,KDC的位置,Kerberos的admin realms等。需要所有使用的Kerberos的机器上的配置文件都同步。这里仅列举需要的基本配置。(具体配置请参考附件文件)
请替换DOMAIN.COM为自定义域名:(本文档使用的是NODE3.COM)
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
#renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
default_realm = NODE3.COM
# default_ccache_name = KEYRING:persistent:%{uid}
[realms]
NODE3.COM = {
# kdc = kdc.node.com
# admin_server = kdc.node.com
kdc = 127.0.0.1
admin_server = 127.0.0.1
ldap_servers = ldap://127.0.0.1:389
# kdc = node3.com:88
# admin_server = node3.com:749
# default_domain = NODE3.COM
}
[domain_realm]
.node3.com = NODE3.COM
node3.com = NODE3.COM
说明
:
[logging]
:表示server端的日志的打印位置[libdefaults]
:每种连接的默认配置,需要注意以下几个关键的小配置- default_realm = NODE3.COM 默认的realm,必须跟要配置的realm的名称一致。
- udp_preference_limit = 1 禁止使用udp,可以防止一个Hadoop中的错误
- ticket_lifetime表明凭证生效的时限,一般为24小时
- renew_lifetime表明凭证最长可以被延期的时限,一般为一周。当凭证过期之后,对安全认证的服务的后续访问则会失败。
[realms]
:列举使用的realm。- kdc:代表kdc的位置,格式是:机器hostname或ip地址
- admin_server:代表admin的位置,格式是:机器hostname或ip地址
- default_domain:代表默认的域名
[appdefaults]
:可以设定一些针对特定应用的配置,覆盖默认配置。
注:这里需要分发krb5.conf至所有client主机
2.3配置kdc.conf
默认放在/var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
NODE3.COM = {
#master_key_type = aes256-cts
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
max_life = 25h
max_renewable_life = 8d
}
说明
:
NODE3.COM
:是设定的realms,名字随意。Kerberos可以支持多个realms,会增加复杂度。一般为大写。max_renewable_life = 8d
涉及到是否能进行ticket的renew必须配置。master_key_type:和supported_enctyps
默认使用aes256-cts。由于,JAVA使用aes256-cts验证方式需要安装额外的jar包,推荐不使用。acl_file
:标注了admin的用户权限。文件格式是Kerberos_principal permissions [target_principal] [restrictions]支持通配符等。admin_keytab
:KDC进行校验的keytab。supported_enctypes
:支持的校验方式。注意把aes256-cts去掉。
2.4配置kadm5.acl
修改服务端上的配置文件/var/kerberos/krb5kdc/kadm5.acl,以允许具备匹配条件的admin用户进行远程登录权限
*/admin@NODE3.COM *
说明
:
- 标注了admin的用户权限,需要用户自己创建。文件格式是Kerberos_principal permissions [target_principal] [restrictions]支持通配符等。最简单的写法是*/admin@NODE3.COM * 代表名称匹配*/admin@NODE3.COM都认为是admin,权限是*代表全部权限。
2.5创建Kerberos数据库
在服务器上对数据库进行初始化,默认的数据库路径为/var/kerberos/krb5kdc,如果需要重建数据库,将该目录下的principal相关的文件删除即可,请牢记数据库密码(为了好记建议密码统一用123456)。
kdb5_util create -r NODE3.COM -s
说明
:
[-s]
表示生成stash file,并在其中存储master server key(krb5kdc)[-r]
来指定一个realm name,当krb5.conf中定义了多个realm时使用- 当Kerberos database创建好了之后,在/var/kerberos/中可以看到生成的principal相关文件
2.6启动Kerberos服务
# 启动服务命令
systemctl start krb5kdc
systemctl start kadmin
# 加入开机启动项
systemctl enable krb5kdc
systemctl enable kadmin
2.7创建Kerberos管理员principal
# 需要设置两次密码
kadmin.local -q "addprinc root/admin"
pincipal的名字的第二部分是admin,那么根据之前配置的kadm5.acl文件,该principal就拥有administrative privileges,这个账号将会被CDH用来生成其他用户/服务的principal。 注意:需要先kinit保证已经有principal缓存。
[root@master ~]# kinit root/admin
Password for root/admin@NODE3.COM:
[root@master ~]# klist //查看当前票据,出现以下证明安装kerberos成功
Ticket cache: KEYRING:persistent:0:0
Default principal: root/admin@NODE3.COM
Valid starting Expires Service principal
07/14/2020 11:51:17 07/15/2020 11:51:16 krbtgt/NODE3.COM@NODE3.COM
renew until 07/21/2020 11:51:16
Kerberos客户端支持两种,一是使用principal + Password,二是使用principal + keytab。前者适合用户进行交互式应用,例如hadoop fs -ls 这种,后者适合服务,例如yarn的rm、nm等。principal + keytab就类似于ssh免密码登录,登录时不需要密码了。
2.8客户端安装kerberos
# yum -y install krb5-devel krb5-workstation
在安装完上述的软件之后,在kerberos客户端主机上生成配置文件/etc/krb5.conf。 把服务端的/etc/krb5.conf文件拷贝到其他各节点客户端同路径/etc/krb5.conf中,此操作只适用于集群部署,单机部署可略仅供了解。
2.9Kerberos功能验证
当出现以上内容证明kerberos安装成功,具体kerberos的其它命令操作可自行查询验证,在此不具体阐述。
本人其他相关文章链接
1.Centos7.9安装openldap
2.Centos7.9安装kerberos
3.Openldap集成Kerberos
4.Centos7.9安装phpldapadmin
5.java连接ldap实现用户查询功能
6.java连接kerberos用户认证
7.javax.security.auth.login.LoginException: Unable to obtain password from user
8.javax.security.auth.login.LoginException: null (68)
9.javax.security.auth.login.LoginException: Message stream modified (41)
10.javax.security.auth.login.LoginException: Checksum failed
11.javax.security.auth.login.LoginException: No CallbackHandler available to garner authentication info
12.javax.security.auth.login.LoginException: Cannot locate KDC
13.javax.security.auth.login.LoginException: Receive timed out
14.java: 无法访问org.springframework.context.ConfigurableApplicationContext
15.LDAP: error code 34 - invalid DN
16.LDAP: error code 32 - No Such Object
17.java: 无法访问org.springframework.ldap.core.LdapTemplate