版权声明:本文为博主原创文章,未经博主允许不得转载。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的映射。