kerberos详解

一、介绍

kerberos概述

Kerberos始于20世纪80年代早期麻省理工学院(MIT)的一个研究项目,是一个网络身份验证系统。Kerberos提供的完整定义是安全的、单点登录的、可信的第三方相互身份验证服务。

认证过程

相关概念

  1. KDC(key Distribution Center):密钥分发中心,是统一认证服务,负责管理发放票据,记录授权。
  2. KDC Server:作为密钥分发中心(KDC)的计算机或服务器。
  3. KDC Client:集群中针对KDC进行身份验证的任何计算机。
  4. Realm:kerberos管理的领域的标识。
  5. Principal:用于验证一个用户或者服务的唯一标识,相当于一个账号,需要为其设置密码。

Principal的形式为:主名称/实例名@领域名。

主名称可以是用户名或者服务名,标识用于提供各种网络服务(比如hdfs、hive);

实例名,对于用户主体,实例名是可选的,对于服务主体,实例则是必须的。

二、安装

安装server端

只需要在一台服务器上安装,如果提示没权限使用sudo安装

shell 复制代码
yum -y install krb5-libs krb5-workstation krb5-server

安装客户端

集群中每台节点都必须要安装客户端,如果提示没权限使用sudo安装

shell 复制代码
yum -y install krb5-libs krb5-workstation

配置

更改KDC配置文件

默认路径:/var/kerberos/krb5kdc/

shell 复制代码
sudo vi /var/kerberos/krb5kdc/kdc.conf

默认配置文件:

shell 复制代码
[kdcdefaults]
 kdc_ports = 88 # kdc 端口
 kdc_tcp_ports = 88 #kdc通信端口

[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 camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
 }

修改后的配置文件:

shell 复制代码
[kdcdefaults]
 kdc_ports = 88 # kdc 端口
 kdc_tcp_ports = 88 #kdc通信端口

[realms]
 HADOOP.COM = {
  #master_key_type = aes256-cts
  max_renewable_life = 7d 0h 0m 0s
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  supported_enctypes = 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
 }

说明:

EXAMPLE.COM:自己设定的域,一般为了识别使用大写;

max_renewable_life:是否能进行ticket的renew,也就是票据刷新;

master_key_type:和supported_enctypes默认使用aes256-cts。由于,JAVA使用aes256-cts验证方式需要安装额外的jar包,更多参考2.2.9关于AES-256加密,推荐不使用。

acl_file:标注了admin的权限,格式如下:

Kerberos_principal permissions [target_principal] [restrictions]支持通配符等。

admin_keytab:KDC进行校验的keytab;

supported_enctypes:支持的校验方式;aes256-cts要去掉;

更改krb5.conf

默认路径为:/etc/krb5.conf

默认配置文件:

shell 复制代码
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 dns_lookup_realm = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
# default_realm = EXAMPLE.COM
 default_ccache_name = KEYRING:persistent:%{uid}

[realms]
# EXAMPLE.COM = {
#  kdc = kerberos.example.com
#  admin_server = kerberos.example.com
# }

[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM

修改后的配置文件:

shell 复制代码
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/

[logging] # 日志模块
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 dns_lookup_realm = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
 default_realm = HADOOP.COM
 default_ccache_name = KEYRING:persistent:%{uid}

[realms]
 HADOOP.COM = {
  kdc = hadoop162
  admin_server = hadoop162
 }

[domain_realm]
 .hadoop.com = HADOOP.COM
 hadoop.com = HADOOP.COM

文件说明:

logging\]:表示日志存储位置 \[libdefaults\]:每种连接的配置 default_realm:默认的realm,必须和配置的realm一致; udp_preference_limit = 1 :禁止使用udp可以防止一个Hadoop中的错误; ticket_lifetime:凭证有效时间,一般为24小时; renew_lifetime:凭证最长可以被延期的时限,一般为一周,凭证过期后对安全认证的服务访问会失败; kdc:代表要kdc的位置。格式是 机器:端口; admin_server:代表admin的位置。格式是机器:端口; default_domain:代表默认的域名; #### 更改完成后将krb5.conf同步到其他节点 ```shell xsync /etc/krb5.conf ``` #### kadm5.acl 默认位置:/var/kerberos/krb5kdc/kadm5.acl ```shell */[email protected] * ``` 说明: */admin代表admin实例的全部用户主体 HADOOP.COM代表领域 最后一个* 代表所有权限 这里授权的意思就是admin实例的全部主体拥有HADOOP.COM领域的所有权限 #### 创建kerberos数据库 在服务端对数据库进行初始化,默认的数据库路径为:/var/kerberos/krb5kdc;需要设置初始化密码; ```shell kdb5_util create -r HADOOP.COM -s ``` ![image.png](https://file.jishuzhan.net/article/1732438001918676993/056b89f38ce6d5c5859bc1e2cca1a7da.webp) 说明: -r:指定一个realm_name,当krb5.conf配置多个realm时使用; -s:表示生成 stash file ,并在其中存储master server key(krb5kdc); 创建成功后在/var/kerberos/krb5kdc可以看到生成的相关principal文件: ![image.png](https://file.jishuzhan.net/article/1732438001918676993/90705ceca346c0988df81b94c0746a34.webp) #### 启动kerberos ##### 启动服务命令 ```shell systemctl start krb5kdc systemctl start kadmin ``` 服务对应的日志文件: /var/log/krb5kdc.log /var/log/kadmind.log ##### 设置开机自启 ```shell systemctl enable krb5kdc systemctl enable kadmin ``` ### kerberos操作 #### 创建管理员 ```shell kadmin.local -q "addprinc admin/admin" ``` ![image.png](https://file.jishuzhan.net/article/1732438001918676993/35868c2039e2ccbbace6ce8651b8dd09.webp) kadmin.local需在server端即KDC所在服务器执行 也可以在server端执行kadmin.local命令先登陆kerberos数据库,下图是支持的操作: ![image.png](https://file.jishuzhan.net/article/1732438001918676993/8986921d93d3204e5f916e7441ff4e66.webp) #### 其它操作 ##### 创建用户 ```shell kadmin.local -q "addprinc test" ``` ##### 为新用户生成keytab文件 ```shell kadmin.local -q "xst -norandkey -k etc/test.keytab test" # 或 kadmin.local -q "ktadd -norandkey -k /etc/test.keytab test" ``` \[-norandkey\] 表示创建keytab时,principal的密码不发生改变。如果不使用该参数,直接ktadd -k则会修改principal的密码。 ##### 查看keytab文件 ```shell klist -kte /etc/test.keytab ``` ##### 认证用户 ```shell kinit -kt /etc/test.keytab test # 或者 kinit test ``` ##### 查看认证缓存(当前认证的用户) ```shell klist -e ``` ![image.png](https://file.jishuzhan.net/article/1732438001918676993/5c809d16150c115567092afcd2338b87.webp) \[-e\] 查看当前kerberos账号的加密方式 ##### 退出当前认证的用户 ```shell kdestroy ``` ##### 查看所有principal主体 ```shell kadmin.local -q "list_principals" ``` 也可以用kadmin然后输入admin管理员密码,然后list_principals ##### 删除principal主体 ```shell kadmin.local -q "delete_principal test" ```

相关推荐
PcVue China10 分钟前
PcVue助力立讯:精密制造的智能化管控实践!
大数据·人工智能·制造
Data-Miner15 分钟前
158页PPT | 某大型研发制造集团信息化IT规划整体方案
大数据·制造
阿里云大数据AI技术28 分钟前
阿里云 Elasticsearch Serverless 检索增强型 8.17 版来袭!
大数据·elasticsearch·serverless
反向跟单策略1 小时前
期货跟单软件云端部署的重要性
大数据·数据分析·区块链
卓豪终端管理1 小时前
如何安全地管理固定功能设备?
java·大数据·开发语言·网络·人工智能·安全
chat2tomorrow2 小时前
如何构建类似云数据仓库 Snowflake 的本地数据仓库?
大数据·数据仓库·低代码·数据治理·snowflake·sql2api
孟意昶2 小时前
大数据面试问答-HBase/ClickHouse
大数据·面试·hbase
atbigapp.com3 小时前
DeepSeek在数据仓库的10大应用场景
大数据·数据库·人工智能
一只专注api接口开发的技术猿3 小时前
基于 Java 的淘宝 API 调用实践:商品详情页 JSON 数据结构解析与重构
大数据·数据结构·重构·json
Haoea!3 小时前
Flink-01学习 介绍Flink及上手小项目之词频统计
大数据·学习·flink