cdh集群集成kerberos

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daguanjia11/article/details/80827699

为什么需要kerberos

cdh集群搭建好以后,你可能已经成功地入坑了,因为后面还有很多问题,例如,数据安全的问题等。当你的cdh集群搭建好以后,你会发现他是没有任何权限控制的,所有人只要能够访问到你的ip和端口,就能使用你的服务。并且,你的hdfs中的数据更是毫无安全可言,只需要在一个客户端电脑上的hadoop fs命令前面加上sudo -u hdfs,就能够拥有最高权限因为谁都可以是hdfs。

从security的角度来讲,它包含两个部分,分别是Authentication和Authorization,简单来讲,Authentication就是证明你就是你(用户名+密码),而Authorization则规定了你可以做什么,例如,可以使用hdfs但不能使用spark。

kerberos的组成部分

本篇的主题kerberos就是用来做Authentication的。下面先介绍一下kerberos中的一些基本概念

  • principal:可以理解为是账号,在kerberos中,所有的用户、主机、服务都会表示为一个principal
  • realms:每一个kerberos服务器都有一个唯一的realm,所有希望使用kerberos服务的主机需要配置同一个realm。
  • Key Distribution Center(KDC):包含三部分,分别是:一个包含所有principal的数据库,一个 authentication server,和一个ticket granting server.

当一个用户想要访问一个服务时,需要一个ticket,就需要向ticket granting server申请一个ticket,而向ticket granting server申请ticket之前要先拿到ticket granting ticket。拿到ticket granting ticket有两种方法,一种是principal+密码,另一个是principal+keytab文件,这两种方法是等价的,principal+keytab文件一般是分配给服务的。

如果你不是很明白,没关系,接着往下看吧。

搭建MIT kerberos server

找一台服务器,将它的hostname设置为kdc.yourdomain.com,将域名修改为你公司的域名(按照kerberos的惯例),或者你的名字也可以。然后执行下面的apt命令

sudo apt-get install krb5-admin-server krb5-kdc

安装期间会让你输入三次信息分别是

  1. Default Kerberos version 5 realm,输入你的主域名,按照惯例用大写,如YOURDOMAIN.COM
  2. Kerberos servers for your realm,输入你的主机名,如,kdc.yourdomain.com
  3. Administrative server for your realm,输入你的主机名,如,kdc.yourdomain.com

安装完之后,检查一下/etc/krb5.conf文件,检查以下信息

[realms]
        YOURDOMAIN.COM = {
                kdc = kdc.yourdomain.com
                admin_server = kdc.yourdomain.com
        }

如果没问题,则打开vi /etc/krb5kdc/kdc.conf文件,将supported_enctypes一行的aes256-cts:normal删除掉。这样做事为了避免在cdh集群中安装JCE Policy File。

确定无误后,执行下面的命令来创建realm数据库

sudo krb5_newrealm

这个命令可能会执行二十分钟左右。请确保你执行此命令时具有root权限或者使用了sudo,否则二十分钟之后会告诉你权限不足,还要再来一次。(我当然没有犯过这个错误了)

设置管理员账号

接下来设置一个管理员账号。管理员账号可以用来远程执行kadmin命令。kadmin命令经常用来创建principal、生成keytab文件等。由于我们是在本机上操作,所以直接使用kadmin.local命令就行。

使用sudo kadmin.local命令进入交互模式,输入?可以查看帮助

输入addprinc admin/admin,然后输入两次密码,管理员账号就创建好了。

接下来配置一下acl文件,位于/etc/krb5kdc/kadm5.acl

*/admin *这一行的注释删掉,保留这一行的内容,意味着所有admin的角色可以执行所有的操作。

使用命令重启两个服务

$ sudo service krb5-kdc restart
$ sudo service krb5-admin-server restart

验证kerberos server是否可用

使用kinit命令来获取一个ticket granting ticket

$ kinit admin/admin

输入admin/admin的密码,则获取到了ticket granting ticket。拿到ticket granting ticket后,你就有资格向ticket granting server申请ticket了。

cdh中集成kerberos

在cdh中集成kerberos比较容易,难点就在于你对kerberos本身的理解以及一个可用的kerberos server。在cdh的cluster的action列表中,选择enable kerberos,然后进入一个向导,你跟着向导一步一步去做就好了。

请参考官方文档 https://www.cloudera.com/documentation/enterprise/5-13-x/topics/cm_sg_intro_kerb.html

打开后,这个页面其实只是一个概览,左侧的文章列表中有九篇文章,分别是step 1 至 step 9。

具体的过程,请仔细阅读官方文档。在本篇博客中,我仅列出几个需要注意的点

  • 执行这个向导之前,务必将集群备份一下,因为如果出错的话,整个集群可能都会出问题
  • 请确保执行向导之前kadmin命令可以使用的,这个命令特别喜欢发神经,时好时坏。如果出现了这个错误:kadmin: GSS-API (or Kerberos) error while initializing kadmin interface,目前我没有什么好的办法,等半个小时后再试试吧。知道kadmin的shell能够工作,再开始运行向导。
  • 向导中会让你输入一个账号,没有必要再创建额外的账号,就用上面创建的管理员账号(admin/admin)就好,否则cdh将没有权限创建principal并导出keytab文件
  • 如果启用kerberos后hdfs的namenode起不来了,Login failed for user: hdfs from keytab hdfs.keytab Receive timed out,请确保你的防火墙是否开通了UDP的端口。

管理kerberos

cdh集成了kerberos以后,想使用cdh集群的其它服务都需要经过kerberos的认证,下面是比较常用的方式。

登录到kerberos server主机,使用sudo kadmin.local进入kadmin的shell,然后创建principal和keytab文件

创建principal

addprinc -randkey myservice/myhost

创建keytab文件

ktadd -norandkey -k myservice.myhost.keytab myservice/myhost

-k参数参数指定了keytab文件的文件名。当前目录下就会有一个名叫myservice.myhost.keytab的文件,就是我们需要的keytab文件

然后输入q命令退出kadmin shell。接下来将keytab文件scp到指定的服务器。

在别的服务器上想要使用kerberos服务的话,需要先安装必要的组件。

ubuntu下使用下面的命令来安装

sudo apt install krb5-user libpam-krb5 libpam-ccreds auth-client-config

centos下使用下面的命令来安装

yum install krb5-workstation

安装以后,修改/etc/krb5.conf文件,需要包含以下内容

[libdefaults]
        default_realm = YOURDOMAIN.COM
[realms]
        YOURDOMAIN.COM = {
                kdc = kdc.yourdomain.com
                admin_server = kdc.yourdomain.com
        }

接下来使用keytab文件创建credencial

kinit -kt myservice.myhost.keytab myservice/myhost

-kt参数指明了keytab文件的位置,后面加上principal的信息。然后使用klist命令查看是否成功

关于kerberos,请参考

https://help.ubuntu.com/lts/serverguide/kerberos.html

http://blog.manula.org/2012/04/setting-up-kerberos-server-with-debian.html

猜你喜欢

转载自blog.csdn.net/daguanjia11/article/details/80827699