kerberos相关

2018-12-28  本文已影响0人  Moon_魔宽

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/e00f80b5a31b

LDAP作为账号管理,Kerberos作为认证,sentry作为授权。

Kerberos又被称为三头狗,它不同于https方式的地方在于,https只能保证server端对于client端安全,而无法保证client对于server安全。而Kerberos的因采用了KDC(密钥分发中心)模式,可以确保双向安全。

认证原理:

在使用前所有的client和Server都要加入KDC。加入后会生成KDC与各加入者之间的秘钥。

会话秘钥:client与server之间的会话秘钥,用来做临时的通信。可以将其理解为“会话通道”。

因为通信方的秘钥是长期有效的,如果在网络上传输,被截取后是有足够时间可以被破解的,因此用临时会话秘钥来通信。

【第一阶段,client与KDC交互】

首先,client询问KDC,我想访问某个server,然后KDC会将会话秘钥用client的秘钥加密后发给client;同时,KDC也会将会话秘钥连同client的基本信息打包用server秘钥加密也发给client,并经clint转发给server,至此client与KDC的交互完成。

这一阶段,KDC加密了两个包给client:

1、用client的秘钥加密的会话秘钥;

2、用server的秘钥加密的会话秘钥和client的基本信息打包;这个加密后的包经client转发给了server。

【第二阶段,client端解密打包】

client用自己的秘钥解密KDC传过来的第一个包,解密后获得会话秘钥。然后用这个会话秘钥加密自己的信息和时间戳打包后发给server

【第三阶段,client和server开始交互】

Server会收到两个数据包。

1、一个数据包用会话秘钥加密,含有一份关于client的信息;

2、一个数据包用server的密钥加密,另一份关于client的信息和时间戳;

Server先用自己的密钥解密获取数据包2,获取会话秘钥和一份关于client的信息,然后server拿着解密后的会话秘钥再解开另外一个数据包1,获得另一份关于client的信息和时间戳。

通过两份数据的对比,server就能判断出是不是对的client在访问服务。

【相关操作】

列出kerberos中的所有认证用户,即principals

kadmin.local -q "list_principals"

添加认证用户,需要输入密码

kadmin.local -q "addprinc user1"

抽取秘钥并将其存储在本地keytab文件/etc/krb5.kaytab中

kadmin.local -q "ktadd kadmin/admin"

查看生产的kaytab

klist -k /etc/krb5.keytab

使用sentry的角色授权机制

beeline -u "jdbc:hive2://xxx;principal=hive/@abc.com"

创建角色和授权

create role admin_role;

grant all on SERVER server1 TO ROLE admin_role;

grant ROLE admin_role TO GROUP admin;

grant ROLE admin_role TO GROUP hive;

greate role test_role;

GRANT ALL ON DATABASE filtered to ROLE test_role;

grant ROLE test_role to GROUP test;

设置/创建角色:admin_role和test_role,create role role_name

设置角色权限:

grant all on SERVER server1 to ROLE admin_role;将服务器server1上的所有权限给admin_role角色;

grant all on datavase filtered to role test_role;将数据库filtered的所有权限给test_role角色;

设置/创建用户组:使用LADP即linux用户和用户组的关系

角色到用户组的映射:

grant role admin_role to group admin/hive;admin和hive用户组将拥有角色admin_role的权限;

grant role test_role to group test; test用户组将拥有角色test_role的权限;

【kerberos配置流程】

一、KDC安装:

1、yum install krb5-libs krb5-server krb5-workstation

2、修改配置文件:

/etc/krb5.conf

/var/kerberos/krb5kdc/kdc.conf

/var/kerberos/krb5kdc/kadm5.acl              该文件内容为: */admin@bdh.COM

3、创建kerberos数据库

kdb5_util create -r your_realm -s    (bdh.COM)

4、创建kerberos管理员账号

/usr/sbin/kadmin.local -q "addprinc cloudera-scm/admin@BG.COM"

5、设置kadmin和krb5kdc服务开机启动

chkconfig kadmin on

chkconfig krb5kdc on

service krb5kdc start

service kadmin start

6、验证

kinit admin/admin

二、安装kerberos客户端(包含CM)

1、yum -y install krb5-libs krb5-workstation

2、CM节点额外安装openldap

yum -y install openldap-clients

3、将KDC server上的krb5.conf文件拷贝到所有客户端

三、CDH集群启动kerberos

生产上采用了LDAP+Kerberos+Sentry的方式做安全体系认证,其中Kerberos的KDC使用了两台Windows服务器做高可用的AD,并与LDAP做了集成。体现了/etc/sssd.conf文件中,并且需要在hdfs、hive等服务中配置ldap与ad的映射。

上一篇 下一篇

猜你喜欢

热点阅读