文章目录

  • 一、概述
    • 1)应用场景
    • 2)功能特性
  • 二、Kerberos中的核心概念
    • 1)用户principal
    • 2)服务principal
    • 3)Ticket
  • 三、Kerberos架构与工作原理
  • 四、Kerberos安装
    • 1)Kerberos Server 安装
      • 1、yum安装
      • 2、配置 krb5.conf
      • 3、配置 kdc.conf
      • 4、配置 kadm5.acl
      • 5、初始化KDC数据库
      • 6、启停 Kerberos 服务
      • 7、kadmin.local
    • 2)Kerberos Client 安装
    • 3)基本命令操作
      • 1、kadmin(数据库管理)
      • 2、kinit(在客户端认证用户)
      • 3、导出keytab认证文件
      • 4、kdestroy(删除当前的认证缓存)
      • 5、用户认证(登录)

一、概述

Kerberos是为TCP/IP网络系统设计的可信的第三方认证协议,用于身份认证。网络上的Keberos服务基于DES对称加密算法,但也可以用其他算法替代。因此,Keberos是一个在许多系统中获得广泛应用的认证协议。Keberos最初是美国麻省理工学院(MIT)为Athena项目开发的。

官网:https://www.kerberos.org/
官方文档:http://web.mit.edu/kerberos/krb5-current/doc/

1)应用场景

Kerberos采用客户端/服务器(CS)结构与DES加密技术,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证,是一种应用对称密钥体制进行密钥管理的系统。可以用于防止窃听、防止replay攻击、保护数据完整性等场合。

2)功能特性

  1. 安全性

Kerberos提供双向认证,不仅Server可以对Client 进行认证,Client也能对Server进行认证。Server对Client认证成功之后,通过返回Client发送的时间戳,向Client提供验证自己身份的手段。

  1. 可靠性

认证服务是其他服务的基础,服务认证过程有助于提升整个系统的可用性和高可靠性。

  1. 可扩展性

KDC(秘钥分配中心)是秘钥体系的重要部分,旨在减少密钥体制所固有的交换密钥时所面临的风险。用户可以根据需要扩展多个KDC。

  1. 开放性

Kerberos已经成为计算机领域一个被广泛接受的标准,所以使用Kerberos可以轻松实现不同平台之间的互操作。

二、Kerberos中的核心概念

Kerberos中有以下一些概念需要了解:

  • KDC:密钥分发巾心,负责管理发放票据,记录授权。
  • Realm: Kerberos管理领域的标识。
  • principalKerberos 下的用户可以称为 Principal,当每添加一个用户或服务的时候都需要向kdc添加一条principal, principal的形式为:主名称/实例名@领域名
  • 主名称:主名称可以是用户名或服务名,表示是用于提供各种网络服务(如hdfs、yam,、hive) 的主体。
  • 实例名:实例名简单理解为主机名。
  • keytab文件:存储了用户的加密密码。常用这种方式认证。

1)用户principal

用户principal的形式:

Name[/Instance]@REALM

其中Instance是可选 的,通常用于更好地限定用户的类型。比如,一个管理员用户通常会有admin instance,即Name/admin@REALM

下面是指代用户的 一些principal的例子:

pippo@EXAMPLE.COM
admin/admin@EXAMPLE.COM
cnicetoupp/admin@EXAMPLE.COM

2)服务principal

用户principal的形式:

Service/Hostname@REALM

  • 第一部分是service的名字,比如imap, AFS, ftp. 通常’host’这个名字被用于指明对一台机器的通用的访问(telnent, rsh, ssh)。
  • 第二个component是提供这个服务的机器的全限定域名(FQDN)。这个component跟DNS对应用服务器的IP地址进行逆向解析后得到的主机名。

下面是指代服务principal的例子:

imap/hadoop-node1@EXAMPLE.COMhost/hadoop-node1@EXAMPLE.COMafs/hadoop-node1@EXAMPLE.COM

3)Ticket

Ticket分两种:

  • Ticket Granting Ticket,TGT:这是KDC中的Authentication Server(简称AS)产生的,TGT是向Ticket Granting Server(TGS)用于表明自己真实身份的东西。
  • Service Ticket:这是KDC中的Ticket Granting Server(简称TGS)产生的,Service Ticket 是用于向应用服务器表明自己身份的东西

三、Kerberos架构与工作原理

  • AS_REQ 是在初始化一个用户(kinit)的时候发出的用户认证请求,这个请求是发给KDC中的Authentication Server (AS);

  • AS_REP 是 AS回复给client的信息,其中包括TGT (用TGS secret key加密过的) and the session key (用发请求的用户的secret key加密过的);

  • TGS_REQ 是client为了一个service ticket向Ticket Granting Server (TGS)的信息. 其中包括上一条信息中获得的TGT (用TGS secret key加密过的) ,一个客户端产生的一个authenticator(用session key加密过的).

  • TGS_REP 是TGS回复给TGS_REQ的信息. 其中包括service ticket(用appservice的secret key加密过),和 一个TGS产生的service sessinon key(之前AS产生的一条session key给加密过的)

  • AP_REQ 是一条客户端发给appserver的访问服务的请求,其中包括service ticket和一个authenticator(使用TGS产生的service session key 加密过的)

  • AP_REP 是appserver回复给client的一条信息,证明这个appserver确实是客户端希望访问的server。不过这条信息也不一定总是要回复的。比如当客户端和appserver需要相互认证的时候,客户端向appserver发出请求,这个时候就不需要回复信息。


Kerberos认证时序图:

四、Kerberos安装

官方文档:https://kerberos.org/dist/index.html

【温馨提示】这里主机名和域名都在配置/etc/hosts

192.168.0.113 hadoop-node1 server.kerberos.com
192.168.0.114 hadoop-node2 client1.kerberos.com
192.168.0.115 hadoop-node3 client2.kerberos.com
主机名 IP 角色
hadoop-node1 server.kerberos.com 192.168.0.113 KDC(Kerberos Server、kadmin)
hadoop-node2 client1.kerberos.com 192.168.0.114 Kerberos Client
hadoop-node3 client1.kerberos.com 192.168.0.115 Kerberos Client

1)Kerberos Server 安装

hadoop-node1节点上执行如下命令安装Kerberos Server

1、yum安装

  • krb5-server:Kerberos服务端程序,KDC所在节点。
  • krb5-workstation: 包含一些基本Kerberos程序,比如(kinit, klist, kdestroy,kpasswd),使用Kerberos的所有节点都应该部署
  • krb5-libs:包含Kerberos程序的各种支持类库等。
$ yum install krb5-server  krb5-workstation krb5-libs

2、配置 krb5.conf

【温馨提示】/etc/krb5.conf : 客户端根据该文件中的信息取访问KDC

# To opt out of the system crypto-policies configuration of krb5, remove the
# symlink at /etc/krb5.conf.d/crypto-policies which will not be recreated.
includedir /etc/krb5.conf.d/#Kerberos守护进程的日志记录方式。换句话说,表示 server 端的日志的打印位置。
[logging]#默认的krb5libs.log日志文件存放路径default = FILE:/var/log/krb5libs.log#默认的krb5kdc.log日志文件存放路径kdc = FILE:/var/log/krb5kdc.log#默认的kadmind.log日志文件存放路径admin_server = FILE:/var/log/kadmind.log#Kerberos使用的默认值,当进行身份验证而未指定Kerberos域时,则使用default_realm参数指定的Kerberos域。即每种连接的默认配置,需要注意以下几个关键的配置:
[libdefaults]#DNS查找域名,我们可以理解为DNS的正向解析,该功能我没有去验证过,默认禁用。(我猜测该功能和domain_realm配置有关)dns_lookup_realm = false# 凭证生效的时限,设置为24h。ticket_lifetime = 24h# 凭证最长可以被延期的时限,一般为7天。当凭证过期之后,对安全认证的服务的后续访问则会失败。renew_lifetime = 7d# 如果此参数被设置为true,则可以转发票据,这意味着如果具有TGT的用户登陆到远程系统,则KDC可以颁发新的TGT,而不需要用户再次进行身份验证。forwardable = true# 我理解是和dns_lookup_realm相反,即反向解析技术,该功能我也没有去验证过,默认禁用即可。rdns = false# 在KDC中配置pkinit的位置,该参数的具体功能我没有做进一步验证。pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt#设置 Kerberos 应用程序的默认领域。如果您有多个领域,只需向 [realms] 节添加其他的语句。其中默认EXAMPLE.COM可以为任意名字,推荐为大写,这里我改成了HADOOP.COM。必须跟要配置的realm的名称一致。default_realm = HADOOP.COM# 顾名思义,默认的缓存名称,不推荐使用该参数。# default_ccache_name = KEYRING:persistent:%{uid}[realms]HADOOP.COM = {# kdc服务器地址。格式  [主机名或域名]:端口, 默认端口是88,默认端口可不写kdc = server.kerberos.com:88#  # admin服务地址 格式 [主机名或域名]:端口, 默认端口749,默认端口可不写admin_server = server.kerberos.com:749# 代表默认的域名,设置Server主机所对应的域名default_domain = kerberos.com}#指定DNS域名和Kerberos域名之间映射关系。指定服务器的FQDN,对应的domain_realm值决定了主机所属的域。
[domain_realm].kerberos.com = HADOOP.COMkerberos.com = HADOOP.COM#kdc的配置信息。即指定kdc.conf的位置。
[kdc]# kdc的配置文件路径,默认没有配置,如果是默认路径,可以不写profile = /var/kerberos/krb5kdc/kdc.conf

3、配置 kdc.conf

【温馨提示】/var/kerberos/krb5kdc/kdc.conf:kdc的专属配置,可以根据自己的需求修改下kdc数据库的存放目录。

[kdcdefaults]#指定KDC的默认端口kdc_ports = 88# 指定KDC的TCP协议默认端口。kdc_tcp_ports = 88[realms]#该部分列出每个领域的配置。HADOOP.COM = {#和 supported_enctypes 默认使用 aes256-cts。由于,JAVA 使用 aes256-cts 验证方式需要安装额外的 jar 包(后面再做说明)。推荐不使用,并且删除 aes256-cts。(建议注释掉,默认也是注释掉的)#master_key_type = aes256-cts#标注了 admin 的用户权限的文件,若文件不存在,需要用户自己创建。即该参数允许为具有对Kerberos数据库的管理访问权限的UPN指定ACL。acl_file = /var/kerberos/krb5kdc/kadm5.acl#该参数指向包含潜在可猜测或可破解密码的文件。dict_file = /usr/share/dict/words#KDC 进行校验的 keytab。admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab# ticket 的默认生命周期为24hmax_file = 24h# #该参数指定在多长时间内可重获取票据,默认为0max_renewable_life = 7d#指定此KDC支持的各种加密类型。supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal}

4、配置 kadm5.acl

【温馨提示】/var/kerberos/krb5kdc/kadm5.acl:权限相关配置

其中前一个号是通配符,表示像名为“abc/admin”或“xxx/admin”的人都可以使用此工具(远程或本地)管理kerberos数据库,后一个跟权限有关,*表示所有权限。HADOOP.COM是上面配置的realm。

*/admin@HADOOP.COM     *

Kerberos kadmind 使用该文件来管理对 Kerberos 数据库的访问权限。对于影响 principa 的操作,ACL 文件还控制哪些 principa 可以对哪些其他 principa 进行操作。文件格式如下:

principal  permissions  [target_principal  [restrictions] ]

相关参数说明:

  • principal:设置该 principal 的权限;principal 的每个部分都可以使用 *。
  • permissions: 权限,指定匹配特定条目的主体可以执行或不可以执行的操作 。如果字符是大写,则不允许该操作。如果字符是小写,则允许该操作。有如下一些权限:
    • a:[不]允许添加主体或策略。
    • d:[不]允许删除主体或策略。
    • m:[不]允许修改主体或策略。
    • c:[不]允许更改主体的口令。
    • i:[不]允许查询 Kerberos 数据库。
    • l:[不]允许列出 Kerberos 数据库中的主体或策略。
    • x 或 *:允许所有权限。
  • target_principal:目标 principal,目标 principal 的每个部分都可以使用 *。【可选】
  • restrictions:针对权限的一些补充限制,如:限制创建的 principal 的票据最长时效。【可选】

【示例】
kadm5.acl 文件中的以下项授予 HADOOP.COM 领域中包含 admin 实例的任何主体对 Kerberos 数据库的所有权限:

*/admin@HADOOP.COM     *

kadm5.acl 文件中的以下项授予 test@EXAMPLE.COM 主体添加、列出和查询包含 root 实例的任何主体的权限。

test@EXAMPLE.COM ali */root@EXAMPLE.COM

kadm5.acl 文件中的以下项不授予 test@EXAMPLE.COM 主体添加、列出和查询包含 root 实例的任何主体的权限。

test@EXAMPLE.COM ALI */root@EXAMPLE.COM

详细说明可参考官网文档:https://web.mit.edu/kerberos/krb5-latest/doc/admin/conf_files/kadm5_acl.html

5、初始化KDC数据库

$ kdb5_util create -r HADOOP.COM -s
$ ll -a /var/kerberos/krb5kdc/
  • -s:表示生成 stash file,并在其中存储 master server key(krb5kdc)
  • -r:指定 realm name


kerberos数据库创建完之后,默认会创建以下5个文件(kdc.conf、kadm5.acl除外的其他几个),Kerberos 数据库的目录为:/var/kerberos/krb5kdc,如果需要重建数据库,可删除这五个文件重新执行上面的命令创建。

$ rm /var/kerberos/krb5kdc/.k5.HADOOP.COM /var/kerberos/krb5kdc/principal* -f

6、启停 Kerberos 服务

启动:

$ systemctl start krb5kdc kadmin
# 查看服务状态
$ systemctl status krb5kdc kadmin

停止:

$ systemctl stop krb5kdc kadmin

7、kadmin.local

Kerberos 服务机器上可以使用 kadmin.local 来执行各种管理的操作。进入 kadmin.local,不需要输入密码:

$ kadmin.local

常用操作:

操作 描述 示例
add_principal, addprinc, ank 增加 principal add_principal -randkey test@HADOOP.COM
cpw 修改密码 cpw test@HADOOP.COM
delete_principal, delprinc 删除 principal delete_principal test@HADOOP.COM
modify_principal, modprinc 修改 principal modify_principal test@HADOOP.COM
rename_principal, renprinc 重命名 principal rename_principal test@HADOOP.COM test2@ABC.COM
get_principal, getprinc 获取 principal get_principal test@HADOOP.COM
list_principals, listprincs, get_principals, getprincs 显示所有 principal listprincs
ktadd, xst 导出条目到 keytab xst -k /root/test.keytab test@HADOOP.COM
? 查看帮助 ?

【温馨提示】-randkey是密码是随机的,-nokey密码不随机【默认】,得手动输入密码。

【示例】

addprinc -randkey hdfs/adminaddprinc -pw 123456 hdfs/admin
addprinc hdfs/admin
输入密码:123456

2)Kerberos Client 安装

在hadoop-node2和hadoop-node3节点上安装client

  • krb5-workstation: 包含一些基本Kerberos程序,比如(kinit, klist, kdestroy,kpasswd),使用Kerberos的所有节点都应该部署。
  • krb5-devel:包含编译Kerberos程序的头文件和一些类库。
$ yum install krb5-devel krb5-workstation -y

配置 krb5.conf

【温馨提示】/etc/krb5.conf : 客户端根据该文件中的信息取访问KDC

# To opt out of the system crypto-policies configuration of krb5, remove the
# symlink at /etc/krb5.conf.d/crypto-policies which will not be recreated.
includedir /etc/krb5.conf.d/#Kerberos守护进程的日志记录方式。换句话说,表示 server 端的日志的打印位置。
[logging]#默认的krb5libs.log日志文件存放路径default = FILE:/var/log/krb5libs.log#默认的krb5kdc.log日志文件存放路径kdc = FILE:/var/log/krb5kdc.log#默认的kadmind.log日志文件存放路径admin_server = FILE:/var/log/kadmind.log#Kerberos使用的默认值,当进行身份验证而未指定Kerberos域时,则使用default_realm参数指定的Kerberos域。即每种连接的默认配置,需要注意以下几个关键的配置:
[libdefaults]#DNS查找域名,我们可以理解为DNS的正向解析,该功能我没有去验证过,默认禁用。(我猜测该功能和domain_realm配置有关)dns_lookup_realm = false# 凭证生效的时限,设置为24h。ticket_lifetime = 24h# 凭证最长可以被延期的时限,一般为7天。当凭证过期之后,对安全认证的服务的后续访问则会失败。renew_lifetime = 7d# 如果此参数被设置为true,则可以转发票据,这意味着如果具有TGT的用户登陆到远程系统,则KDC可以颁发新的TGT,而不需要用户再次进行身份验证。forwardable = true# 我理解是和dns_lookup_realm相反,即反向解析技术,该功能我也没有去验证过,默认禁用即可。rdns = false# 在KDC中配置pkinit的位置,该参数的具体功能我没有做进一步验证。pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt#设置 Kerberos 应用程序的默认领域。如果您有多个领域,只需向 [realms] 节添加其他的语句。其中默认EXAMPLE.COM可以为任意名字,推荐为大写,这里我改成了HADOOP.COM。必须跟要配置的realm的名称一致。default_realm = HADOOP.COM# 顾名思义,默认的缓存名称,不推荐使用该参数。default_ccache_name = KEYRING:persistent:%{uid}[realms]HADOOP.COM = {# kdc服务器地址。格式  [主机名或域名]:端口, 默认端口是88,默认端口可不写kdc = server.kerberos.com:88#  # admin服务地址 格式 [主机名或域名]:端口, 默认端口749,默认端口可不写admin_server = server.kerberos.com:749# 代表默认的域名,设置Server主机所对应的域名default_domain = kerberos.com}#指定DNS域名和Kerberos域名之间映射关系。指定服务器的FQDN,对应的domain_realm值决定了主机所属的域。
[domain_realm].kerberos.com = HADOOP.COMkerberos.com = HADOOP.COM

测试验证连接server

# 默认用户是root/admin@HADOOP.COM,发现在数据库里没有这个用户,可以先在server端创建该用户:add_principal root/admin@HADOOP.COM$ kadmin
输入密码:123456


指定用户

$ kadmin -p test@HADOOP.COM

3)基本命令操作

1、kadmin(数据库管理)

Kerberos 客户端机器上可以使用 kadmin 来执行各种管理的操作,服务端可以使用kadminkadmin.local命令。需先在 Kerbers Server 上创建登录的 principal,默认为 {当前用户}/admin@realm。

管理KDC数据库有两种方式:

  • 一种直接在KDC(server端)直接执行,可以不需要输入密码就可以登录【命令:kadmin.local
  • 一种则是客户端命令,需要输入密码【命令:kadmin】,在server端和client端都可以使用。

创建用户,注意自己设置的密码

# 交互式
$ kadmin.localadd_principal root/admin# 非交互式
$ kadmin.local -q "add_principal root/admin"

2、kinit(在客户端认证用户)

$ kinit root/admin@HADOOP.COM
# 查看当前的认证用户
$ klist

3、导出keytab认证文件

使用xst命令或者ktadd命令:

# 非交互式
$ kadmin.local -q "ktadd -norandkey -k /root/root.keytab root/admin"# 交互式
$ kadmin.localktadd -norandkey -k /root/root.keytab root/admin
或xst -k /root/v.keytab root/admin
或xst -norandkey -k /root/root.keytab root/admin

其中 /root/root.keytab为自己指定的路径与文件名,以.keytab结尾;root/admin为之前创建的凭证用户

查看密钥文件

$ klist -kt /root/root.keytab

4、kdestroy(删除当前的认证缓存)

$ kdestroy

5、用户认证(登录)

基于密码认证

$ klist
$ kinit root/admin
输入密码:123456$ klist

基于密钥认证(keytab)

# 删除当前用户认证
$ kdestroy# 拿到上面生成的keytab文件
$ klist
$ kinit -kt /root/root.keytab root/admin
$ klist


常见的基础操作就到这里了,更多操作命令,可以查看官方文档和查看帮助。后续会分享kerberos认证实战文章,请小伙伴耐心等待~

Kerberos认证原理与环境部署相关推荐

  1. 详解kerberos认证原理

    前言 Kerberos协议是一个专注于验证通信双方身份的网络协议,不同于其他网络安全协议的保证整个通信过程的传输安全,kerberos侧重于通信前双方身份的认定工作,帮助客户端和服务端解决" ...

  2. Kerberos认证原理与使用教程

    Kerberos认证原理与使用教程 一.Kerberos 概述 二.什么是 Kerberos ​ Kerberos 是一种计算机网络认证协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证.这 ...

  3. 趣味故事讲解Kerberos认证原理过程

    见到一段很有意思的描述,文章写的时间挺早,不过貌似核心的东西到现在也没变- 这是MIT(Massachusetts Institute of Technology)为了帮助人们理解Kerberos的原 ...

  4. [Kerberos原理]-- 趣味故事讲解Kerberos认证原理过程

    文章转自:http://blog.sina.com.cn/s/blog_5384e78b0100fhdt.html &关于TGT,见到一段很有意思的描述,文章写的时间挺早,不过貌似核心的东西到 ...

  5. Kerberos认证原理

    文章目录 Kerberos介绍 第一步:AS(Authentication Service)Exchange 第二步:TGS(Ticket Granting Service)Exchange 第三步: ...

  6. kerberos认证原理---讲的非常细致,易懂

    前几天在给人解释Windows是如何通过Kerberos进行Authentication的时候,讲了半天也别把那位老兄讲明白,还差点把自己给绕进去.后来想想原因有以下两点:对于一个没有完全不了解Ker ...

  7. [Kerberos基础]-- kerberos认证原理---讲的非常细致,易懂

    参考官方文档:http://www.kerberos.org/ 转自:http://blog.csdn.net/wulantian/article/details/42418231

  8. 大数据Hadoop之——Zookeeper鉴权认证(Kerberos认证+账号密码认证)

    文章目录 一.Zookeeper概述与安装 二.Zookeeper Kerberos 鉴权认证 1)Kerberos安装 2)创建用户并生成keytab鉴权文件(前期准备) 3)独立zookeeper ...

  9. CDH 的Kerberos认证配置

    2019独角兽企业重金招聘Python工程师标准>>> 最近因为项目需要,需要对用户权限做限制,最终选择了kerberos+sentry+hue模式来管理用户,但是这个kerbero ...

最新文章

  1. 服务器根目录文件配置文件,在文档根目录中存储安装和配置文件
  2. python发送邮件及附件
  3. mysql-5.6.x半同步复制配置
  4. 得到一个汉字的拼音第一个字母
  5. 回文字符串—回文子串—暴力破解法
  6. 【转】Windows消息传递机制详解
  7. 容器编排技术 -- Kubernetes Annotations
  8. 解决windows安装mongodb出现dbexit: rc:100错误
  9. 如何运用所掌握的技术构建一个完整的业务架构
  10. 面试微软等公司必备的书
  11. anaconda tensorflow import PIL 报错的解决方法
  12. idea怎么创建python项目
  13. matlab 上三角矩阵变为对称矩阵,已知上/下三角矩阵如何快速将对称阵补全
  14. linux 系统上开启uRPF
  15. 判断div是否在可视区内
  16. 少年派背后的故事 NVIDIA令其栩栩如生
  17. android 获取wifi连接不上,如何检测无法在android中连接wifi?
  18. 总结 | Prompt在NER场景的应用
  19. C++之回炉再造笔记--问题记录1
  20. python网页登录钉钉_【Python】关于钉钉接口使用Python,Post 500报错

热门文章

  1. 全网首发!马士兵内部共享—1658页《Java面试突击核心讲》
  2. 南方人过冬有多难?用Python带你分析全网取暖器销量数据
  3. LED的高显指是什么意思?
  4. Day4 自定义控件/ListView/RecyclerView
  5. OkHttpUtils | okhttp-OkGo的使用,完美支持RxJava
  6. R语言金融分析作业(一)
  7. 量子计算机芯片的制造过程,全干货!一文读懂芯片制造及量子芯片!
  8. CNN,GAN,AE和VAE概述
  9. unity 麻将 用于打出去牌后在桌面相应的位置生成发出去的牌
  10. 降压式变换电路(Buck电路)详解