在 Linux 上安装 Kerberos 5 KDC 服务器进行身份验证

举报
Tiamo_T 发表于 2022/09/11 23:55:53 2022/09/11
【摘要】 Kerberos 是一种网络身份验证协议。 Kerberos 为设备提供强大的加密身份验证,让客户端和服务器以更安全的方式进行通信。它旨在解决网络安全问题。

Kerberos 是一种网络身份验证协议。

Kerberos 为设备提供强大的加密身份验证,让客户端和服务器以更安全的方式进行通信。它旨在解决网络安全问题。

当防火墙作为解决外部网络入侵的解决方案时,Kerberos 通常用于解决网络内的入侵和其他安全问题。

Kerberos 的当前版本是版本 5,称为 KRB5。

要实现 Kerberos,我们需要在服务器上运行集中式身份验证服务。

该服务称为密钥分发中心 (KDC)。

向 KDC 注册的服务器受到 Kerberos 领域中所有其他计算机的信任。

示例 krb5.conf 文件

这是一个示例 krb5.conf 文件,其中包含所有 REALM 和域到 REALM 的映射信息,


# cat /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 = kerberos.example.com
  admin_server = kerberos.example.com
 }

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

安装 Kerberos KDC 服务器

出于安全原因,建议在单独的服务器上运行 Kerberos (KDC) 服务器。

下载并安装 krb5 服务器包。

# rpm -ivh krb5-server-1.10.3-10.el6_4.6.x86_64.rpm
Preparing...       ########################################### [100%]
   1:krb5-server   ########################################### [100%]

在配置 KDC 之前验证是否安装了以下 rpm:

# rpm -qa | grep -i krb5
pam_krb5-2.3.11-9.el6.x86_64
krb5-server-1.10.3-10.el6_4.6.x86_64
krb5-workstation-1.10.3-10.el6_4.6.x86_64
krb5-libs-1.10.3-10.el6_4.6.x86_64

修改 /etc/krb5.conf 文件

使用适当的 REALM 和 DOMAIN_REALM 映射更改 /etc/krb5.conf 以反映如下所示。

# cat /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 = MYREALM.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 MYREALM.COM = {
  kdc = elserver1.example.com
  admin_server = elserver1.example.com
 }

[domain_realm]
 .myrealm.com = MYREALM.COM
 myrealm.com = MYREALM.COM

修改 kdc.conf 文件

还应修改 kdc.conf,如下所示。

# cat /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 MYREALM.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
 }

创建 KDC 数据库

接下来,使用 kdb5_util 命令创建 KDC 数据库,如下所示。在此阶段,为 KDC 数据库主密钥输入适当的密码。

# /usr/sbin/kdb5_util create -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'MYREALM.COM',
master key name 'K/M@MYREALM.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:

分配管理员权限

可以使用文件 /var/kerberos/krb5kdc/kadm5.acl 授予用户对数据库的管理员权限。

# cat /var/kerberos/krb5kdc/kadm5.acl
*/admin@MYREALM.COM     *

在上面的示例中,MYREALM 中具有管理员实例的任何主体都具有所有管理员权限。

创建校长

使用以下命令创建主体。在此示例中,我使用用户名“eluser”创建了主体。

# kadmin.local -q "addprinc eluser/admin"
Authenticating as principal root/admin@MYREALM.COM with password.
WARNING: no policy specified for eluser/admin@MYREALM.COM; defaulting to no policy
Enter password for principal "eluser/admin@MYREALM.COM":
Re-enter password for principal "eluser/admin@MYREALM.COM":
Principal "eluser/admin@MYREALM.COM" created.

启动 Kerberos 服务

启动 KDC 和 kadmin 守护程序,如下所示。

# service krb5kdc start
Starting Kerberos 5 KDC:               [  OK  ]

# service kadmin start
Starting Kerberos 5 Admin Server:      [  OK  ]

配置 Kerberos 客户端

配置 Kerberos 客户端以针对 KDC 数据库进行身份验证:

现在让我们看看如何配置 krb5 客户端以针对我们在上面创建的 Kerberos KDC 数据库进行身份验证。

第 1 步:在客户端机器上安装 krb5-libs 和 krb5-workstation 软件包。

第 2 步:将 /etc/krb5.conf 从 KDC 服务器复制到客户端计算机。

第 3 步:现在我们需要在 KDC/Kerberos 数据库中为客户端创建主体。

您可以使用以下命令在 KDC 主服务器上为客户端计算机创建主体。在下面的示例中,我正在主 KDC 服务器 elserver1.example.com 上为客户端 elserver3.example.com 创建主机主体

# kadmin.local -q "addprinc host/elserver3.example.com"
Authenticating as principal root/admin@MYREALM.COM with password.
WARNING: no policy specified for host/elserver1.example.com@MYREALM.COM; defaulting to no policy
Enter password for principal "host/elserver1.example.com@MYREALM.COM":
Re-enter password for principal "host/elserver1.example.com@MYREALM.COM":
Principal "host/elserver1.example.com@MYREALM.COM" created.

第 4 步:使用以下命令从 KDC 主服务器中提取客户端的 krb5.keytab:

# kadmin.local -q "ktadd -k /etc/krb5.keytab host/elserver3.example.com"
Authenticating as principal root/admin@MYREALM.COM with password.
Entry for principal host/elserver3.example.com with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/elserver3.example.com with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/elserver3.example.com with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/elserver3.example.com with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/elserver3.example.com with kvno 2, encryption type des-hmac-sha1 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/elserver3.example.com with kvno 2, encryption type des-cbc-md5 added to keytab WRFILE:/etc/krb5.keytab.

这样就完成了配置。在这个阶段你们都完成了。

从现在开始,每次建立 SSH 时,RSH 连接主机都会使用 keytab 文件针对 KDC 数据库验证其身份,并通过 Kerberos 建立安全连接。

Ktadd 用于生成新的密钥表或通过 kadmin 命令将主体添加到现有的密钥表。

Ktremove 用于从现有密钥表中删除主体。删除我们上面创建的主体的命令是,

kadmin.local -q "ktremove -k /etc/krb5.keytab –q all"

删除 KDC 数据库

出于某种原因,如果您必须删除 KDC 数据库,请使用以下命令:

# kdb5_util -r MYREALM.COM destroy
kdb5_util: Deleting KDC database stored in /usr/local/var/krb5kdc/principal, you sure
(type yes to confirm)? <== yes
OK, deleting database '/usr/local/var/krb5kdc/principal'...

上述命令中的 -f 选项强制删除 KDC 数据库。

备份和恢复 KDC 数据库

要将 KDC 数据库备份到文件,请使用 krb5_util_dump。

# kdb5_util dump kdcfile

# ls -l kdcfile
-rw-------. 1 root root 5382 Apr 10 07:25 kdcfile

要从上述步骤中创建的转储文件恢复 KDC 数据库,请执行以下操作:

# kdb5_util load kdcfile
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。