正文: Kerberos是一个第三方鉴权机制,用户和用户希望得到的服务都依赖于Kerberos的服务器来实现对双方的鉴权。这个机制同时也支持在两者之间的数据传输进行加密。Kerberos的服务器叫做KDC(Key Distribution Center),有三个部分构成:
- 由用户和服务构成的数据库,存储着每个用户和服务的kerberos密码
- 一个鉴权服务器AS,进行初始鉴权和发放票据授权票据TGT(Ticket Granting Ticket)
- 一个票据授权服务器TGS(Ticket Granting Server),基于初始的TGT来处理接下来的服务票据。
安装和配置KDC 1.对于linux而言,KDC所在的机器被要求是最安全的。如果可能,KDC的机器上不要跑其他的服务。 2.由于我们使用的是redhat linux 4.1.x版本的操作系统,自身就带有kerberos。因此,只要选择其中一台安装server,其他的机器安装client就可以了。 3.安装kerberos server:
yum install krb5-server krb5-libs krb5-auth-dialog
4.安装kerberos client
yum install krb5-workstation krb5-libs krb5-auth注意:linux官网上提示要安装krb5-pkinit-openssl软件包,但是我们的操作系统不需要安装该软件包,因为对安装结果无影响
5.配置KDC
(我们没有配置多KDC模式,只是配置了单KDC的模式)所以只要配置Master KDC server
a)编辑/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 = CLOUD.EB
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes
udp_preference_limit = 1
[realms]
CLOUD.EB = {
kdc = vbaby1.cloud.eb:88
admin_server = vbaby1.cloud.eb:749
default_domain = cloud.eb
}
[domain_realm]
.cloud.eb = CLOUD.EB
cloud.eb = CLOUD.EB
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
注意:
- 这个文件可以用include和includedir引入其他文件或文件夹,但必须是绝对路径
- realms:包含kerberos realm的名字(部分键控),显示关于realm的特殊信息,包括该realm内的主机要从哪里寻找kerberos的server。
- domain realm:将domain名和子domain名映射到realm名上
- 必须填的有以下几项:
- default-realm:在libdefault部分
- admin_server:在realm部分
- domain_realm:当domain名和realm名不同的时候要设置
- logging:当该机器作为KDC时要设置
b)编辑/var/kerberos/krb5kdc/kdc.conf文件如下:
default_realm = CLOUD.EB
[kdcdefaults]
v4_mode = nopreauth
kdc_tcp_ports = 88
kdc_ports = 0
[realms]
CLOUD.EB = {
#master_key_type = des3-hmac-sha1
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
kdc_ports = 88
database_name = /var/kerberos/krb5kdc/principal
key_stash_file = /var/kerberos/krb5kdc/stash
max_life = 10h 0m 0s
max_renewable_life = 7d 0h 0m 0s
master_key_type = des3-hmac-sha1
default_principal_flags = +preauth
}
注意:所有域名(realm名)必须为大写字母,所有主机名(DNS hostnames)和相应域名(domain names)为小写字母
c)创建数据库
$ kdb5_util create -s
注意:该命令创建了可以存放kerberos域的所有key的数据库,-s命令创建了一个stash文件,存放主服务器的key。如果没有这个key,那么每次kerberos server都会提示主服务器的用户输入密码。
d)编辑/var/kerberos/krb5kdc/kadm5.acl 文件,内容如下:
*/admin@EXAMPLE.COM *
注意:
最后一个星号之前有空格!!(一般是一个制表符)
所有名字为*/admin的用户都可以修改数据库,除了修改自己的密码之外其他修改数据库的命令都被允许执行,权限很大。
e)创建第一个用户:
执行以下命令:
$ kadmin.local -q "addprinc username/admin"
建议:
最好把username设为root,会提示输入密码,可以输入一个密码。在我们的集群中,左右admin用户的密码都是123456. (若密码错误,试试456789)
创建第一个principal,必须在KDC自身的终端上进行,而且需要以root登录,这样才可以执行kadmin.local命令。
f)启动kerberos,执行以下命令:
/sbin/service krb5kdc start
/sbin/service kadmin start
g)添加principal:
输入kadmin或者kadmin.local命令进入kerberos的shell,输入以下命令:
kadmin: addprinc test/localhost
然后根据提示输入密码
之后从shell中退出,用root账号创建本地的一个用户test,从root用户su到这个账号,执行:
$ kinit test
$ klist
看见如下信息的时候,kerberos安装成功
Ticket cache: FILE:/tmp/krb5cc_505
Default principal: test@CLOUD.EB
Valid starting Expires Service principal
03/12/14 10:29:01 03/12/14 20:29:01 krbtgt/CLOUD.EB@CLOUD.EB
renew until 03/13/14 10:28:58
Kerberos 4 ticket cache: /tmp/tkt505
klist: You have no tickets cached
参考链接:
1.https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Smart_Cards/installing-kerberos.html
2.http://docs.hortonworks.com/HDPDocuments/HDP1/HDP-1.3.0/bk_installing_manually_book/content/rpm-chap14-1-4.html