作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:
Web服务器
代理服务器
ZooKeeper
Kafka
RabbitMQ
Hadoop HDFS(本章节)
上个小节,我们介绍了kerberos这个网络认证协议,本小节我们就来进行kerberos的部署。****
1.安装配置kerberos
这里主要的软件核心如软件是:krb5-server,提供 KDC(密钥分发中心)服务,包含核心的 Kerberos 认证服务。
ini
# 安装 KDC (以 MIT Kerberos 为例)
yum install krb5-server krb5-libs krb5-workstation
# 配置 /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 = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
EXAMPLE.COM = {
kdc = kdc-server.example.com
admin_server = kdc-server.example.com
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
-
default_realm
:客户端未指定领域时使用的默认领域(必须大写) -
dns_lookup_*
:设为false
避免依赖 DNS,需手动配置 KDC -
ticket_lifetime
:用户票据有效期(建议 24 小时) -
renew_lifetime
:票据总生命周期(续订上限) -
forwardable
:允许代理认证(如 SSH 跳转) -
EXAMPLE.COM
:领域名称(需与default_realm
一致) -
kdc
:KDC 服务器的主机名或 IP(可端口kdc = host:88
) -
admin_server
:KDC 管理服务地址(默认端口 749) -
注意:这里不使用dns,就必须通过hosts来实现。
2.初始化数据库
创建 Kerberos 数据库(存储所有主体和密钥),当然我这里并没有输入密码,而是直接回车,所以这里的密码是空密码,当然我这里测试没有问题,生产建议还是需要配置密码。
kotlin
[root@localhost hadoop-2.10.2]# kdb5_util create -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'EXAMPLE.COM',
master key name 'K/M@EXAMPLE.COM'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:
Re-enter KDC database master key to verify:
' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
3.启动服务
-
krb5kdc
:密钥分发中心服务(处理票据请求) -
kadmin
:Kerberos 管理服务(管理主体和策略)systemctl start krb5kdc kadmin systemctl enable krb5kdc kadmin
4.设置管理员密码
-
创建管理员主体 admin/admin,这是 Kerberos 系统的超级用户,密码用于后续管理操作(添加/删除主体等),kadmin.local 直接在 KDC 上运行,无需认证。
-
这里必须要输入密码,无法直接回车跳过,后面也会用到这里的密码。
root@localhost hadoop-2.10.2\]# kadmin.local -q "addprinc admin/admin" Authenticating as principal root/admin@EXAMPLE.COM with password. WARNING: no policy specified for admin/admin@EXAMPLE.COM; defaulting to no policy Enter password for principal "admin/admin@EXAMPLE.COM": Re-enter password for principal "admin/admin@EXAMPLE.COM": Principal "admin/admin@EXAMPLE.COM" created. \[root@localhost hadoop-2.10.2\]# #设置密码
-
instance
=admin
(区分管理员类型) -
完整名称:
admin/admin@EXAMPLE.COM
(假设领域为 EXAMPLE.COM)
5.配置hosts和acl
- ACL 文件 (kadm5.acl):
-
*/admin@EXAMPLE.COM *
表示所有admin
实例的主体都有完全管理权限 -
格式:
主体 权限
(*
代表所有权限)
- Hosts 文件:
-
将
kdc-server.example.com
解析到 127.0.0.1 -
解决单机环境 DNS 解析问题
-
确保 Kerberos 客户端能找到 KDC 服务
root@localhost hadoop-2.10.2\]# echo "\*/admin@EXAMPLE.COM \*" \> /var/kerberos/krb5kdc/kadm5.acl \[root@localhost hadoop-2.10.2\]# echo "127.0.0.1 kdc-server.example.com" \>\> /etc/hosts
进行票据验证,列出当前票据。默认票据有效期24小时。
ruby
root@localhost hadoop-2.10.2]# kinit admin/admin
Password for admin/admin@EXAMPLE.COM:
[root@localhost hadoop-2.10.2]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/admin@EXAMPLE.COM
Valid starting Expires Service principal
07/20/2025 23:14:31 07/21/2025 23:14:31 krbtgt/EXAMPLE.COM@EXAMPLE.COM
**到这里我们的Kerberos就算部署完成,但是这里的和我们的HDFS还没产生任何关系,因为Kerberos不仅仅支持HDFS,他还支持很多软件,只是在HDFS里面使用最广泛,所以我们拿到这里来讲解。
**Kerberos 的通用性使其成为企业级环境中身份认证的首选方案,几乎所有主流的分布式系统、数据库、应用服务器和云服务都提供了对 Kerberos 的支持。在 Hadoop 生态系统中,Kerberos 更是安全认证的标准配置,用于保护集群免受未授权访问。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。