博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kerberos学习(二)
阅读量:5748 次
发布时间:2019-06-18

本文共 4662 字,大约阅读时间需要 15 分钟。

在实际开始安装配置Kerberos以前,我打算先说一下keytab。

keytab,key table。上一篇的Principal里面,我们了解到了,Principal是kerberos的认证主体,相当于是你的账号。而keytab,可以粗浅的理解为SSH里面对应账号的私钥,而不同的是,SSH的私钥每个账号会有一个,而keytab是可以多个principal合并为一个的。原因是,keytab并不是作为验证用户来使用的,而是与密码的作用一样,用来替代密码做 tgt 数据加密来使用的。因此,在后面的安装配置介绍里面,生成keytab会让principal使用随机密码,而无论是你或者principal的服务使用者,都是不会知道随机密码内容的。但是由于keytab里面存储了加密的密码,所以,它可以代替每次认证手工输入密码的过程,这对于受保护的服务很重要,我们不能让一个后台常驻的服务程序不停的输入密码去跟KDC交互。所以,如果一时理解不了,你暂时可以把keytab做为ssh免密码登录的私钥来看待。

然后说一下Kerberos的安装配置过程,这个部分极其简单。

首先需要一台服务器做KDC,对于centos来说,只需要

yum -y install krb5-server

KDC的远程管理在rpm里面是放在客户端进行的,在安装workstation的同时就会安装kadmin,而本地管理的kadmin.local是放在server里面的,如果是本地管理kerberos的KDC,就不需要安装workstation。

以Hadoop集群为例,我在某个master节点安装了krb5-server,然后这些机器的所有节点既是受保护的服务,同时也是客户端,那么所有节点,包括安装kdc的master节点,都需要安装 krb5-workstation 包。

假设如下

192.168.1.2 master.hadoop [krb5-server], [namenode, resourcemanager, historyserver]

192.168.1.3 slave01.hadoop [krb5-workstation], [datanode, nodemanager]

192.168.1.4 slave02.hadoop [krb5-workstation], [datanode, nodemanager]

192.168.1.254 client01 [krb5-workstation], [hadoop-client]

作为client,主机名我并没有使用带有域名的主机名。事实上,我也没有配置这台机器的域名信息,那么它的FQDN实际上就是client01。

然后,先到master上配置krb5.conf,目标在/etc/krb5.conf,这个配置文件是kdc和workstation共用的,而kdc单独的配置文件并不在这里。

这个部分是配置KDC Server

;/etc/krb5.conf[libdefaults]    default_realm = HADOOP.COM    dns_lookup_kdc = false    dns_lookup_realm = false    ticket_lifetime = 7d    ;票据的缓存间隔,超期需要重新认证    renew_lifetime =  14d    ;票据的自动更新间隔    forwardable = true    default_tgs_enctypes = rc4-hmac    default_tkt_enctypes = rc4-hmac    permitted_enctypes = rc4-hmac    udp_preference_limit = 1    kdc_timeout = 3000[realms]HADOOP.COM =    {        kdc = master.hadoop        admin_server = master.hadoop    }[logging]    default = FILE:/var/log/krb5kdc.log    admin_server = FILE:/var/log/kadmind.log    kdc = FILE:/var/log/krb5kdc.log

接下来需要配置kdc专有的配置文件,目标在/var/kerberos/krb5kdc/kdc.conf

;/var/kerberos/krb5kdc/kdc.conf[kdcdefaults]    kdc_ports = 88    ;udp端口    kdc_tcp_ports = 88    ;tcp端口[realms]    HADOOP.COM =     {        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 des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal        max_renewable_life = 30d    }

然后初始化KDC的数据库,如同mysql安装完以后需要运行mysql_install_db,或者postgresql运行pgsql initdb一样,kdc也内建了嵌入式数据库,首次安装需要进行初始化。

kdb5_util create -s

接下来编辑kadm5.acl

默认情况下,特定principal的管理员主体的权力是很大的,但是这样不好,我们还是希望不同的人具有不同的权限,所以最好是修改kadm5.acl,让不同principal的管理员可以管理不同的东西。

下面是默认状态下 /var/kerberos/krb5kdc/kadm5.acl

*/admin@HADOOP.COM  *

对这个文件的解析会分为两列进行,第一列的具有管理员资格的principal,第二列是权限。

默认kadm5.acl的含义如下

*/admin@HADOOP.COM: 在HADOOP.COM域内任意以admin主机名认证的主体

*:所有权限

权限可选择的配置列表如下:

a: 允许增加principal或访问策略A: 不允许增加principal或访问策略c: 允许变更principals的密码C: 不允许变更princials的密码d: 允许删除principals或策略D: 不允许删除principals或策略i: 允许查看数据库I: 不允许查看数据库l: 允许列出principals或策略列表L: 不允许列出principals或策略m: 允许修改principals或策略M: 不允许修改principals或策略p: 允许传播(propagation)principal数据库P: 不允许传播principal数据库u: 允许创建使用PAM进行密码验证的单一组件用户principalU: 否决u的权限x: a,d,m,c,i,l权限的快捷方式*: 跟x一样

所以,我们的kadm5.acl可以改的更安全一些,比如

root/admin@HADOOP.COM * ;root/admin 可以在 kadmin 里做任何事xianglei/master.hadoop@HADOOP.COM aml;master.hadoop主机上的xianglei账号,可以在 kadmin 里增加,修改,查看principals列表,但不能删除,传播,查看数据库内容,变更密码等操作list/*@HADOOP.COM l;任意主机上的 list 用户只能看,别的啥也不能干

当然,除了管理员账号,这里不应该出现任何其他普通principal的账号。

关于kadm5.acl文件,其实对于安全性来说还是挺重要的,这是对管理员的管理,但是网上没看见任何一篇中文文章详细讲解了这个文件的配置,所以,还是我开一个先河吧,其他人复制粘贴我的好了。对于熟悉kerberos的人来说,默认不修改的kerberos的配置还是有机可乘的,但是我不打算把方法公布出来。怎么把kerberos本身的管理做的更好,都在这个文件里了。我们需要知道的是,kadmin.local进入kerberos管理是不需要密码的,所以,如何使用这个acl是你的问题了。

然后我们在kerberos数据库里来添加上面这三个账号

kadmin.localAuthenticating as principal root/admin@HADOOP.COM with password.kadmin.local:kadmin.local:  addprinc xianglei/master.hadoop@HADOOP.COMWARNING: no policy specified for xianglei/master.hadoop@HADOOP.COM; defaulting to no policyEnter password for principal "xianglei/master.hadoop@HADOOP.COM": Re-enter password for principal "xianglei/master.hadoop@HADOOP.COM": add_principal: Principal or policy already exists while creating "xianglei/master.hadoop@HADOOP.COM".#我们没有使用随机密码,这意味着你必须输入两次密码来做验证,如果不生成keytab文件,那么xianglei在master.hadoop上每次认证KDC都需要输入该密码。kadmin.local:  addprinc -randkey list/master.hadoop@HADOOP.COMWARNING: no policy specified for list/master.hadoop@HADOOP.COM; defaulting to no policyPrincipal "list/master.hadoop@HADOOP.COM" created.#在这里,我们使用了随机密码,这意味着你不必每次登录都输入密码,但一定要制作keytab文件了,关于如何制作keytab文件,我想放到后面再说。

然后就可以启动kdc和kadmin了

service krb5kdc startservice kadmind start

最后一步是将/etc/krb5.conf分发到其余的几台服务器上,但其他不需要启动任何服务进程。

写累了,今天不写了。

转载地址:http://xgqzx.baihongyu.com/

你可能感兴趣的文章
SQL操作json类型数据的函数
查看>>
POSIX基本正则表达式和扩展正则表达式的比较
查看>>
【动态规划】编辑距离
查看>>
SSH框架下载地址
查看>>
cocos2d-x之加速度传感器
查看>>
读《十年学会编程》笔记
查看>>
mybatis spring 整合
查看>>
两数相除,判断小数位是否有限位
查看>>
java 跨域问题解决方法
查看>>
Jquery中去除左右空格
查看>>
python 模块使用
查看>>
1.3配置存储单元(nbu重删池)
查看>>
Nginx配置代码片
查看>>
前后端分离中,Gulp实现头尾等公共页面的复用
查看>>
Android开发者掘金(1)
查看>>
java.util.Calendar
查看>>
PhpStorm/webStorm 去掉烦人的小灯泡
查看>>
【转】Java面试题全集2.2(下)
查看>>
Hadoop核心组件之HDFS
查看>>
关于关闭Eclipse的控制台自动跳出
查看>>