目录
1、Kerberos安装与配置
1.1安装
1.1.1注意事项
1.1.2Yum安装
1.2配置
1.2.1/etc/krb5.conf
1.2.2/var/kerberos/krb5kdc/kdc.conf
1.2.3/var/kerberos/krb5kdc/kadm5.acl
1.2.4创建kpropd.acl
1.2.5创建数据库
1.2.6同步配置
1.2.7备份配置文件(主备都需要)
1.2.8生成principal
2、启动
2.1启动服务
2.2同步数据库(只在主节点)
2.3启动备KDC服务
3、验证
3.1执行# kadmin.local:
3.2在kadmin.local的命令行中添加用户principal:
3.3在kerberos客户端的admin用户里,执行
3.4验证高可用
1、Kerberos安装与配置
1.1安装
1.1.1注意事项
·kerberos涉及到的主机必须时钟同步!
·主机名hostname必须全为小写!
·该安装方案能够解决了Kerberos单点故障问题,提供 KDC的高可用。
1.1.2Yum安装
规划的KDC服务主机为:krb1(主),krb2(备)[1]
其中在备节点安装之前需要保证主节点已经安装Kerberos,并且正常可用。
在规划的主KDC服务上,执行:
# yum install -y krb5-server krb5-auth-dialog krb5-workstation krb5-devel krb5-libs
在备KDC服务上,执行:
#yum install -y krb5-server openldap-clients krb5-workstation krb5-libs
在其他主机(不包括备KDC主机)上执行
# yum install -y krb5-workstation krb5-devel[2]
注:若之前使用源码编译安装过,须卸载
1.2配置
KDC服务器涉及3个配置文件
/etc/krb5.conf
/var/kerberos/krb5kdc/kdc.conf
/var/kerberos/krb5kdc/kadm5.acl[3]
1.2.1/etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = TJ_DX.COM
kdc_timeout = 2500
max_retries = 3
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 10d
renew_lifetime = 10d
renewable = false
forwardable = false
[realms]
TJ_DX.COM = {
kdc = krb1
Kdc = krb2
admin_server = krb1
TJ_DX.COM
}
[domain_realm]
.tj_dx.com = TJ_DX.COM
tj_dx.com = TJ_DX.COM
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
说明:
- [logging]:表示 server 端的日志的打印位置
- [libdefaults]:每种连接的默认配置,需要注意以下几个关键的小配置
- default_realm = TJ_DX.COM:设置 Kerberos 应用程序的默认领域。如果您有多个领域,只需向 [realms] 节添加其他的语句。其中红色的TJ_DX.COM可以为任意名字,推荐为大写
- ticket_lifetime: 凭证生效的时限,设置为7天。
- renew_lifetime: 凭证最长可以被延期的时限,一般为7天。当凭证过期之后,对安全认证的服务的后续访问则会失败。
- forwardable:是否允许转发
- renewable:是否允许票据延迟
- [realms]:列举使用的 realm域。
- kdc:代表要 kdc 的位置。格式是 机器:端口
- admin_server:代表 admin 的位置。格式是 机器:端口
注:配置中蓝色的字体修改为KDC所在主机的hostname
- [domain_realm]:realm域和域名的映射。
- [kdc]:kdc的配置信息
- profile:kdc的配置文件路径,默认值下若无文件则需要创建。
1.2.2/var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
TJ_DX.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
max_life = 10d
max_renewable_life = 10d
}
说明:
- TJ_DX.COM : 是设定的 realms。名字随意,推荐为大写!,但须与/etc/krb5.conf保持一致。Kerberos 可以支持多个 realms,会增加复杂度。大小写敏感。
- master_key_type:默认使用 aes256-cts。。
- acl_file:标注了 admin 的用户权限的文件,若文件不存在,需要用户自己创建。
文件格式是:Kerberos_principal permissions [target_principal] [restrictions]
- supported_enctypes:支持的编码类型列表。
- admin_keytab:KDC 进行校验的 keytab。
JAVA使用aes256-cts,需要将所有Kerberos涉及到的主机的$JAVA_HOME/jre/lib/security的两个jar包进行替换。下面提供了两个zip包,解压后有对应的jar包
1.2.3/var/kerberos/krb5kdc/kadm5.acl
即/var/kerberos/krb5kdc/kdc.conf中[realms]的acl_file配置的文件。内容为:
*/admin@ TJ_DX.COM
即:
其中TJ_DX.COM与/etc/krb5.conf对应
文件的意义为给数据库管理员添加ACL权限,*代表全部
1.2.4创建kpropd.acl
备节点krb2创建kpropd.acl文件并输入内容:
vi /var/kerberos/krb5kdc/kpropd.acl
输入:
host/krb1@ TJ_DX.COM
host/krb2@ TJ_DX.COM
1.2.5创建数据库
# kdb5_util create -r TJ_DX.COM -s[4]
其中TJ_DX.COM与/etc/krb5.conf对应,且需要设置管理员密码。[5]
该命令会在/var/kerberos/krb5kdc/创建principal 数据库
如果遇到数据库已经存在的提示,且需要重建数据库时,可以把 /var/kerberos/krb5kdc/ 目录下的 principal 的相关文件都删除掉。
1.2.6同步配置
将/etc/krb5.conf拷贝到集群其他服务器(备KDC单独同步)
例:
# scp /etc/krb5.conf e3basexx:/etc/
其中e3basexx为hadoop集群需要部署Kerberos的主机。
拷贝主KDC节点配置文件至备KDC节点:
scp /etc/krb5.conf krb2:/etc/;
#注意,/etc/krb5.conf需要同步到所有的kerberos主机上
scp /etc/krb5.keytab krb2:/etc/krb5.keytab
scp /var/kerberos/krb5kdc/kdc.conf /var/kerberos/krb5kdc/kadm5.acl /var/kerberos/krb5kdc/.k5.TJ_DX.COM krb2:/var/kerberos/krb5kdc/;
1.2.7备份配置文件(主备都需要)
因/var/kerberos/krb5kdc目录下为kerberos的数据库以及各个服务的principal等重要文件,若不慎丢失,会造成严重的后果,所以需要使用cron定时任务备份krb5kdc目录下的文件。
在/var/kerberos/目录下新建backup目录用来存放备份的文件。
mkdir /var/kerberos/backup
在/var/kerberos/目录下新建backup_sh目录用来存放执行备份脚本和备份日志。
mkdri /var/kerberos/backup_sh
创建定时任务,执行:
crontab -e
输入:
00 00 * * * sh /var/kerberos/backup_sh/backup.sh >> /var/kerberos/backup_sh/backup.log[韦6]
将备份文件产生的日志重定向到backup.log文件。
1.2.8生成principal
生成需要用到的principal
格式为:
host/[主KDC主机名]@[域名]
host/[备KDC主机名]@[域名]
在主KDC主机上执行:
kadmin.local -q "ank -randkey host/krb1@ TJ_DX.COM"
kadmin.local -q "ank -randkey host/krb2@ TJ_DX.COM"
kadmin.local -q "xst host/krb1@ TJ_DX.COM"
kadmin.local -q "xst host/krb2@ TJ_DX.COM"
2、启动
2.1启动服务
主KDC节点执行:
# service krb5kdc start
# service kadmin start
备KDC节点执行:
#service kprop start[7]
2.2同步数据库(只在主节点)
在主节点同步数据库
kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans[8]
kprop -f /var/kerberos/krb5kdc/slave_datatrans krb2[9]
执行成功就会打印SUCCEEDED
#注意:kdc的数据库没有自动同步的命令,需要手动同步
设置一个cron作业,定时同步数据库。
在/var/kerberos/下新建dump目录,用来存放备份的数据库。
mkdir /var/kerberos/dump
在/var/kerberos/下新建dump_sh目录,用来存放执行备份的脚本和日志。
mkdir /var/kerberos/dump_sh
创建定时任务,执行:
crontab -e
输入:
00 00 * * * sh /var/kerberos/dump_sh/dump.sh >> /var/kerberos/dump_sh/dump.log
将执行备份的日志重定向到dump.log文件。
2.3启动备KDC服务
在备KDC节点执行:
#service krb5kdc start
3、验证
root使用kadmin.local命令,kadmin.local可以直接进入并管理Kerberos数据库,无需通过Kerberos认证。
3.1执行# kadmin.local:
输入listprincs查看已有用户(principal):
kadmin.local: listprincs
3.2在kadmin.local的命令行中添加用户principal:
- 输入addprinc admin来添加principal,并设置密码为111111
注:可以直接使用# kadmin.local 进入kadmin.local命令行,也可以直接使用# kadmin.local -q指定要执行的语句。例如kadmin.local -q "addprinc admin"。因为之前已经有该principal,所以给出了提示。
3.3在kerberos客户端的admin用户里,执行
$ kinit admin
输入密码后回车,若无任何提示表示认证成功
再执行# klist -e
此时可以看到,qinrc用户已经进行了认证,其中:
Tichet cache:ticket缓存存到了/tmp/krb5cc_0
Default principal:认证的用户
valid starting:认证开始时间
Expires:ticket生命节日日期
Service principal:服务对应的principal
renew until:ticket可以通过kinit -R进行延期的截止日期。
Etype:session key的编码类型
此时可以验证为Kerberos安装成功。
3.4验证高可用
在krb1、krb2中执行
service krb5kdc status
看到如下则说明KDC服务正常。
正常情况下kinit成功:
kill 掉主KDC
再次验证,若能正常执行kinit 和klist 命令,则高可用验证成功。
[1]主机名可换
[2]批量操作
需要root权限。
[4]加上 –s存储文件,同步数据库用
[5]记录备份
[6]定时时间可调大
[7]默认端口754,默认不以独立模式运行
[8]转储至该文件
[9]将转储文件传播到从kdc