目录

1 案例目标

2 环境要求

2.1 ntpserver修改

3 知识储备

4 案例流程

5 案例实践

1  创建kdcserver虚拟机:

2  NTP客户端(kdcserver为客户端)

3 编辑/etc/hosts文件保证主机名和IP地址正确对应

4 安装KDC

5 服务端配置-kdc.conf

6  配置kadm5.acl

7  客户端配置-krb5.conf

8  创建Kerberos数据库

9  测试数Kerberos据库

10  启动KDC服务

11  建立keytab文件

12  启动服务

6 案例总结

7 参考文档


1 案例目标

安装Kerberos KDC服务端

2 环境要求

Kerberos属于主从结构,我们这里使用一台KDC服务器,3个客户端,另外集群中需要有一台服务器作为时间同步服务器安装NTP服务,Kerberos对NTP服务有依赖,必须进行安装。

IP主机功能备注
192.168.56.250kdcServer Kerberos Server需要事先安装NTP客户端
192.168.56.210hadoop01namenode/Kerberos Client
192.168.56.220hadoop02datanode/Kerberos Client
192.168.56.230hadoop03datanode/Kerberos Client
192.168.56.240ntpserverNTP Server需要事先安装完成

2.1 ntpserver修改

注意:之前我们的kerberosServer地址为192.168.56.240,现在将名字改为ntpserver作为时间服务器

 启动192.168.56.240ntpserver服务器,进行修改主机

vi /etc/hostname

 将原先的kerberosServer修改为ntpserver,保存后输入命令reboot进行重启

3 知识储备

  • Kerberos是一种客户端/服务端架构。

  • KDC:密钥分发中心(Key distribution Center),由三部分构成:Kerberos数据库、认证服务(Authentication service,AS)和票据授予服务(ticket-granting service,TGS)

  • principal:主体,Kerberos中的身份标识称为主体。

  • realm:域,确定了管理边界,所有主体均属于特定的Kerberos域。

  • 主体和域的信息存储在Kerberos数据库中。

  • TGT:票据授予票据,AS认证成功后授予用户的一种特殊票据

4 案例流程

  1. 编辑/etc/hosts文件保证主机名和IP地址正确对应

  2. 安装KDC

  3. 配置kdc.conf文件

  4. 配置kadm5.acl文件

  5. 配置krb5.conf文件

  6. 创建Kerberos数据库

  7. 测试Kerberos数据库

  8. 启动KDC服务

  9. 建立keytab文件

  10. 启动kadmind服务

5 案例实践

1  创建kdcserver虚拟机:

 需要重新建一台基于centos的虚拟机,不可以直接复制ntpserver,因为ntpserver是基于openeuler的虚拟机,在后面实现kerberos测试数据库以及启动会报错。

 注意:使用centos来完成kdbserver,否则使用openeuler镜像会报错如下:

查看系统镜像:cat /etc/system-release

openEuler release 20.03 (LTS)

[root@kdcserver ~]# kadmin.local
kadmin.local: No KCM server found while opening default credentials cache

centos镜像下载(镜像下载较快) 阿里云开源镜像站资源目录 (aliyun.com)

1、新建虚拟机

2、分配内存大小

选择【现在创建虚拟硬盘】 进入下一步:

3、配置安装

3.1  设置盘片

 设置完成后如下:

3.2 设置启动顺序(将光驱放到第一个)

3.3 配置虚拟机网卡

选择刚刚创建的虚拟机,点击设置,在设置中选取网络设置,设置第一块网卡的

连接方式为仅主机网络(Host-Only)

 

界面名称中的选项对应的是系统中的虚拟网卡,该网卡在安装virtual Box 时会自动创建,该网卡的ip地址也就是虚拟机构成局域网后的网关,你可以在宿主机操作系统网络配置中找到虚拟网卡。

选择【网卡2】页签开启第2块网卡用于虚拟机连接互联网,第2块网卡设置如下:

一定要勾选启用网络连接,连接方式使用nat,自动配置网络地址方便连接互联网。

3.4 开始安装   (点击启动)

等待一会或者直接回车进入安装 :
1、选择语言,点虚拟机将鼠标捕获到虚拟机里

 注意:虚拟机和真机之间切换鼠标默认的是Ctrl键(键盘上右边的Ctrl键)左边的没用

 2、安装位置,分区

 3、选择最小安装

 4、设置网络主机名:

逐一开启两块网卡(网卡1和网卡3都设置为打开状态),设置主机名,并点击应用,点击【完成】按钮,完成设置(不必进入配置页面继续配置,后期将通过 linux命令具体配置)。

 5、设置管理员密码: 

 6、重新启动

主机名修改:vi /etc/hostname

7、编辑第一块网卡设置运行如下命令编辑第一块网卡的配置信息:  

 vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

进入vi编辑模式(按i进入)编辑为如下:

 说明:

1. bootproto设置为static,静态ip

2. onboot设置为yes,开机连接该网卡

3. 添加一行,设置ip地址:ipaddr=具体ip地址,网关gatway=网段(192.168.56.1)

 8、重启网络服务

运行如下命令重启网络服务:service network restart

9、验证网络

查看虚拟机ip地址: ip addr

2  NTP客户端(kdcserver为客户端)

Step 1 安装ntp

yum -y install ntp

Step 2 修改配置文件

vi /etc/ntp.conf

注释掉默认配置,添加刚刚建立的时间服务器

server 192.168.56.240

在客户端进行时间同步:

[root@hadoop01 ~]# ntpdate 192.168.56.240

3 编辑/etc/hosts文件保证主机名和IP地址正确对应

使用vi编辑kdcserver的/etc/hosts文件:

vi /etc/hosts

添加如下ip与主机映射记录:

192.168.56.210 hadoop01
192.168.56.220 hadoop02
192.168.56.230 hadoop03
192.168.56.240 ntpserver
192.168.56.250 kdcserver

注意:确保127.0.0.1仅和localhost关联,而不是关联到实际主机名,如果不知道具体的主机名,可以通过vi /etc/sysconfig/network查看或设置

Note:

KDC和使用Kerberos的应用服务器必须能够正确进行域名解析(DNS)

  • 系统主机名必须使用完整域名

  • 确保/etc/hosts文件将主机名映射为有效的ip地址,不要将127.0.0.1(回环地址)映射到主机名,比如有的linux系统hosts文件可能是这样的:

    127.0.0.1   hadoop123   hadoop123

    这样会导致问题,需要设置成类似下面这样:

    127.0.0.1   localhost   hadoop821
    192.168.251.101 hadoop821   hadoop821
    

4 安装KDC

按照前面的计划,将kdcserver作为Kerberos server进行安装(作为Kerberos主节点)

yum install krb5-server krb5-libs krb5-workstation

说明:

  • 安装会自动选择安装镜像

  • 中间出现提示均按'y'

安装位置:

5 服务端配置-kdc.conf

用于设置KDC和kadmind监听端口,以及realm默认设置,数据库位置和类型,日志等。

配置文件位置:/var/kerberos/krb5kdc

通过vi命令编辑该文件:

vi /var/kerberos/krb5kdc/kdc.conf

原有内容:

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88
​
[realms]
 EXAMPLE.COM = {
  #master_key_type = aes256-cts
  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
 }

只需将[realms]部分的EXAMPLE.COM修改为Kerberos realm名MYTRAIN.COM

配置文件说明:

  • kdcdefaults一节的内容适用于所有域,除非某个域包含同样的配置属性。

  • kdc_ports和kdc_tcp_ports分别指定KDC监听的UDP和TCP端口

  • realms:使用该KDC的所有域,一个KDC可以支持多个域

  • 每个域可以包含以下内容

    • acl_file:具有管理服务的用户其访问权限控制文件的位置,默认文件名:kadm5.acl

    • dict_file:列举了不允许用做密码的单词,这些单词拥有被破解或猜测

    • support_enctypes:KDC支持的加密类型

修改完成后:

6  配置kadm5.acl

kadm5.acl文件用于设置哪些用户具有管理Kerberos数据库的权限。

Kerberos kadmind服务程序使用ACL(Access Control List)文件管理Kerberos数据库访问权限,该文件的默认位置:/var/kerberos/krb5kdc/kadm5.acl,当然你可以通过kdc.conf文件的 acl_file属性修改acl文件的位置。

通过vi命令进行编辑:

vi /var/kerberos/krb5kdc/kadm5.acl 

原始内容:

*/admin@EXAMPLE.COM *

修改为对应的Kerberos域名(realm):

*/admin@MYTRAIN.COM *

说明:

  • 设置Kerberos数据库ACL访问权限

  • 第一列表示主体名,此处代表名称匹配*/admin@MYTRAIN.COM

  • 第二列表示权限,*代码全部权限

  • 第三列为可选的,表示权限应用的目标实体,此处没有设置

    比如下面的acl文件最后一条记录就设置了第三列:

    petter/admin@MYTRAIN.COM     * 
    mary/admin@MYTRAIN.COM      *   
    mary/admin@MYTRAIN.COM    ADMICL     */admin@MYTRAIN.COM
    

    Note:关于权限的说明

权限使用单个字母组合,小写字母表示授予该权限,大写字母表示拒绝该权限

权限列表:

权限说明
a向KDC数据库添加用户
d从KDC数据库中删除用户
m修改KDC数据库中的用户
c修改KDC数据库中的principal(主体)密码
i查询数据库,列举principal(主体)信息
*(或x)以上所有权限

举例:

acil表示可以添加用户,修改用户密码,查看principal详情,列举数据库中的principal,其他权限将拒绝

petter/admin@MYTRAIN.COM     * 
mary/admin@MYTRAIN.COM      *   
mary/admin@MYTRAIN.COM    ADMICL     */admin@MYTRAIN.COM

以上设置中,petter拥有全部权限

mary仅可管理普通用户,对管理员主体则没有权限(针对目标主体*/admin@MYTRAIN.COM 设置了ADMICL)

7  客户端配置-krb5.conf

默认的客户端配置文件是krb5.conf,通常位于/etc目录下。

客户端应用,包括kinit在内,在使用Kerberos时,随时读取该文件。该文件包括KDC位置,Admin server位置,Kerberos应用程序的默认realm,主机名到Kerberos realm映射等。集群中所有节点均有该文件,并且内容一致。

vi /etc/krb5.conf

以下是原始内容:

修改下面几处关键点:

[logging]   #日志部分不做改变
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log
​
[libdefaults]
 default_realm = MYTRAIN.COM    #仅需设置此处,将EXAMPLE.COM修改为自己定义的Kerberos域名(realm),通常为大写
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
​
[realms]
 MYTRAIN.COM = {    #由EXAMPLE.COM改为MYTRAIN.COM和default_realm相对应
  kdc =kdcserver   #此处填KDC主机名,密钥分发中心
  admin_server = kdcserver:8081 #admin server位置,仍是填写主机名
 }
​
[domain_realm]  #DNS名称与Kerberos域名对照,前面是小写,后面是大写。
 .mytrain.com = MYTRAIN.COM # mytrain.com域名下的所有主机映射到MYTRAIN.COM
 mytrain.com = MYTRAIN.COM  # mytrain.com域名本身映射到MYTRAIN.COM

配置说明:

  • default_realm:默认域,当不提供任何域时,默认使用的域

  • ticket_lifetime:票据生效时限,通常为24小时

  • renew_lifetime:票据最长延期时限,通常为一周,当票据过期后,对安全认证的服务的访问将失效

  • dns_lookup_realm,dns_lookup_kdc:表明是否通过DNS SRV记录定位KDC和realm,通常设置为false,如果设置为true,当有人获取DNS记录后,可能会造成Kerberos收到拒绝服务攻击的风险。

  • kdc,admin_server:告诉客户端,哪个服务器运行着KDC和kadmin进程,可以配置为ip地址或主机名,如果没有指定端口,则KDC默认使用88端口,admin_server默认使用749端口,此处修改了admin_server的默认端口(默认端口为749),原端口在centOS610下发生了端口冲突

  • 如果没有在domain_realm中找到匹配项,客户端会尝试使用DNS名转换为大写然后作为kerberos域。

更多配置可以参考:krb5.conf — MIT Kerberos Documentation

配置后:

8  创建Kerberos数据库

你需要在Master KDC上使用kdb5_util命令创建Kerberos数据库和存储文件。

运行如下命令:

kdb5_util create -r MYTRAIN.COM -s

此时会在Kerberos数据库目录下建立5个文件:

ls -a /var/kerberos/krb5kdc/

其中:

1)principal和principal.ok是Kerberos数据库文件

2)principal.kadm5和principal.kadm5.lock是Kerberos系统管理数据库

3).K5.MYTRAIN.COM是由-s参数创建的隐藏文件

Note:关于stash文件

stash文件是KDC本地磁盘上存储的master key拷贝,在自动启动Kadmind和krb5kdc服务时,KDC使用该文件进行授权。

如果没有生成stash文件,每次启动时,KDC会提示你输入master key。

9  测试数Kerberos据库

使用kadmin.local程序可以访问刚刚建立的Kerberos数据库,Kadmin是Kerberos数据库的管理接口,Kadmin里面的kerberos管理员可以添加,修改和删除principal(主体),修改密码和执行其他管理任务。

1)进入Kadmin接口:

kadmin.local

如果不再KDC master上使用该命令需要提供密码

2)列举当前KDC中主体:

listprincs

3)创建管理主体

主体名命名模式:用户名/管理权限

假设用户名使用jerry,你的admin主体将是:jerry/admin

向KDC添加主体jerry/admin

kadmin.local提示符:addprinc jerry/admin

添加主体过程中,需要设置jerry/admin主体密码

添加完主体后可以通过  listprincs  命令列举当前主体,确认是否添加成功

 

4)退出kadmin.local

quit(或exit)

注意:通过yum安装时,kadmin.local命令已经在任何路径下可用,如果向知道kadmin.local的具体位置,可以使用  whereis kadmin.local  查看

10  启动KDC服务

1)运行命令:krb5kdc

krb5kdc

注意:控制台不会返回任何消息,如果使用中出现问题,需要查看启动日志,日志位置/var/log/krb5kdc.log,/var/log/kadmin.log:

2)使用刚才建立的管理员身份(jerry/admin)登录

kinit jerry/admin

中间需要输入管理员密码。

注意:

如果不经历上面的“7  配置kadm5.acl ”,设置kadm5.acl则新建立的管理员主体是没有任何权限的,需要按照“7  配置kadm5.acl ”进行管理员权限配置。

TIP:关于开机自动运行

如果你想开机自动启动服务,你需要将krb5kdc和kadmind命令添加到KDC节点的/etc/rc或者/etc/inittab文件中,注意你需要在建立kerberos数据库时使用-s参数建立stash文件。

你可以通过查看日志文件来检查启动情况,日志位置在krb5.conf中进行了配置。

tail /var/log/krb5kdc.log
tail /var/log/kadmin.log

另外如果kinit命令能够正常运行也表示系统正常

11  建立keytab文件

如果你想在整个网络上使用kadmin,你需要建立keytab文件,并在其中包含kadmin principal。

kadmin.local:ktadd -k /var/kerberos/krb5kdc/kadm5.keytab kadmin/admin kadmin/changepw

如果不指定路径会在当前目录下建立keytab文件,最好建在KDC数据库目录下,此处是/var/kerberos/krb5kdc目录

 

 

Note:关于keytab文件

所有Kerberos服务器都需要一个keytab文件授权链接到KDC,默认文件名为:krb5.keytab。该文件是主机key的本地拷贝。

要为主机生成keytab文件,主机必须在Kerberos数据库中拥有一个principal。

12  启动服务

通常你只需要运行krb5kdc(Kerberos 5 KDC服务)和kadmind(Kerberos 5管理服务):

krb5kdc
kadmind

此时,Kerberos 5 KDC将能够响应客户端授权请求。

6 案例总结

  • Kerberos是一种客户端/服务端架构

  • KDC:密钥分发中心,由三部分构成:Kerberos数据库、认证服务,和票据授予服务

  • 主体和域的信息存储在Kerberos数据库中

  • KDC安装时,要确保在网络中安装了NTP服务

  • 保证主机名和IP地址的对应关系,不要映射到127.0.0.1

  • kdc.conf用于配置KDC服务端

  • kadm5.acl用于设置哪些用户具有管理Kerberos数据库的权限

  • 启动KDC服务端的命令是krb5kdc,日志位置是/var/log/krb5kdc.log

  • 启动Kerberos管理服务的命令是kadmind,日志位置是/var/log/kadmin.log

7 参考文档

1、安装kdcserver服务器基于centos:(centos和openeuler安装步骤相同,只需要修改镜像即可)(1条消息) 使用Oracle VM VirtualBox完成Linux环境搭建openEuler_Siobhan. 明鑫的博客-CSDN博客

2、在局域网中配置时间服务器(1条消息) Kerberos安装及使用1(在局域网中配置时间服务器)_Siobhan. 明鑫的博客-CSDN博客

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐