Linux服务管理-kerberos

Kerberos

官网文档‘:Kerberos:网络身份验证协议 (mit.edu)

基本概念:Kerberos基本概念及原理汇总-腾讯云开发者社区-腾讯云 (tencent.com)

kerberos概述

        Kerberos是一种计算机网络认证协议,由麻省理工学院(MIT)提出并开发,旨在通过密钥加密技术为客户端和服务器应用程序提供强大的身份验证服务。

        Kerberos协议设计思想的核心是引入一个可信任的第三方来实现客户端和服务端的认证。在Kerberos中,这个可信任的第三方被称为密钥分发中心(KDC)。Kerberos软件设计上采用客户端/服务器结构,能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。

        Kerberos协议的主要特点是用户只需输入一次身份验证信息,就可以凭借此验证获得的票据(ticket-granting ticket)访问多个服务,即实现单点登录(SSO)。由于Kerberos协议在每个Client和Service之间具有共享密钥,使得该协议具有相当的安全性。

        在实际应用中,Kerberos协议可用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。在配置Kerberos服务端时,需要安装相关的软件包,并配置krb5.conf和kdc.conf文件,以定义realm和其他相关参数。

        总的来说,Kerberos协议是一种强大且灵活的网络安全协议,能够为计算机网络提供高效、安全的身份认证服务。如需更多信息,建议查阅Kerberos协议的相关文档或咨询网络安全专家。

kerberos基本组成

Kerberos协议主要由三个部分组成:

  1. 密钥分发中心(Key Distribution Center,KDC):KDC是Kerberos的核心组件,负责存储用户信息、管理并发放票据。它通常包含两个主要部分:

    • 认证服务器(Authentication Server,AS):专门用来认证客户端的身份,并发放客户端用于访问票据授予服务器(TGS)的票据授予票据(Ticket Granting Ticket,TGT)。

    • 票据授予服务器(Ticket Granting Server,TGS):用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据(Service Ticket)。

  2. 客户端(Client):发送请求的一方,需要向KDC请求票据以访问目标服务。

  3. 服务端(Server):接收请求的一方,需要验证客户端提供的票据是否有效,以决定是否提供服务。

Kerberos的相关术语

  1. Realm:Kerberos所管理的一个领域或范围,可以看作是Kerberos中的一个命名空间,不同的Kerberos环境可以通过Realm进行区分。

  2. Principal:Kerberos所管理的一个用户或者一个服务,可以理解为Kerberos中保存的一个账号。其格式通常为“primary/instance@realm”,其中primary是主体名称,instance是可选的实例名称,realm则是该主体所属的领域。

  3. keytab:Kerberos中的用户认证文件,包含用户的密钥信息,可用于证明身份。与密码相比,keytab文件更加安全,因为它不需要人工输入,且可以妥善保存在服务器上。

  4. Ticket:Kerberos中使用的一种记录,客户端用它来向服务器证明自己的身份。Ticket包含服务的主体名称、用户的主体名称、用户主机的IP地址、时间标记、会话密钥以及定义票据生命周期的时间戳等信息。

  5. Authenticator:验证者,是服务器用于验证客户端用户主体的信息。验证者包含用户的主体名称、时间标记和其他数据,与票据不同,验证者只能使用一次,通常在请求访问服务时使用。

Kerberos的认证流程

  1. 客户端向KDC请求获取TGT

    • 客户端首先以明文方式向KDC的AS发起请求,携带自己的用户名、主机IP和当前时间戳。

    • AS在Kerberos数据库中查找该用户名,如果存在,则生成一个用于客户端和TGS间通信的会话密钥(Session Key),并创建一个TGT。TGT使用TGS的密钥加密,同时AS还会生成一个使用客户端密钥加密的响应,其中包含会话密钥、TGS的名称以及TGT的有效时间等信息。

    • 客户端收到响应后,使用自己的密钥解密获得会话密钥和TGT。此时,客户端已经获得了访问TGS的权限。

  2. 客户端使用TGT请求服务授予票据并访问服务

    • 客户端使用会话密钥加密自己的信息(包括客户端名、IP和时间戳),并携带明文形式的目标服务名称和之前获得的TGT向TGS发起请求。

    • TGS首先验证TGT的有效性,然后解密TGT获得会话密钥,并使用会话密钥解密客户端的信息进行验证。如果验证通过,TGS会生成一个新的会话密钥(用于客户端和服务端之间的通信),并创建一个服务授予票据(Service Ticket)。服务授予票据使用目标服务的密钥加密,并包含客户端的信息、会话密钥以及票据的有效期等信息。

    • TGS将服务授予票据和新的会话密钥(使用之前与客户端的会话密钥加密)返回给客户端。

    • 客户端收到后,使用之前的会话密钥解密获得新的会话密钥和服务授予票据。然后,客户端使用服务授予票据和新的会话密钥向目标服务发起请求。

    • 目标服务验证服务授予票据的有效性后,使用新的会话密钥与客户端进行通信。

认证流程

TGT交付流程

实验

上手体验kerberos流程,使用kerberos保护NFS导出。

环境准备

IP地址主机名
192.168.99.129nfs.example.com
192.168.99.133kdc.example.com
192.168.99.134client.example.com

配置防火墙和selinux

$ setenforce 0
$ firewall-cmd --set-default-zone=trusted

配置时间同步

$ cat /etc/chrony.conf | grep ^server
server ntp1.aliyun.com iburst
$ systemctl restart chronyd
$ chronyc sources -v

配置域名解析,在/etc/hosts中配置(可以自己配置dns服务器实现解析)

[root@nfs ~]# tail -3 /etc/hosts
192.168.99.129   nfs.example.com
192.168.99.134   client.example.com
192.168.99.133   kdc.example.com
[root@nfs ~]# scp /etc/hosts client.example.com:/etc/hosts
[root@nfs ~]# scp /etc/hosts kdc.example.com:/etc/hosts

Kerberos服务器配置

安装kerberos

[root@kdc ~]# yum -y install krb5-server krb5-workstation

修改配置文件

[root@kdc ~]# vim /etc/krb5.conf
[root@kdc ~]# cat /etc/krb5.conf | grep -v ^# | grep -v ^$
includedir /etc/krb5.conf.d/
[logging]default = FILE:/var/log/krb5libs.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.log
[libdefaults]dns_lookup_realm = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = truerdns = falsepkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crtspake_preauth_groups = edwards25519default_realm = EXAMPLE.COMdefault_ccache_name = KEYRING:persistent:%{uid}
[realms]EXAMPLE.COM = {kdc = kdc.example.comadmin_server = kdc.example.com}
[domain_realm].example.com = EXAMPLE.COMexample.com = EXAMPLE.COM
[root@kdc ~]#
​
# 因为使用的是默认的EXAMPLE.COM,所以以下文件不需要修改
# 若使用其他的realm,则需修改配置中的EXAMPLE.COM部分
[root@kdc ~]# vim /var/kerberos/krb5kdc/kdc.conf
[root@kdc ~]# cat /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]kdc_ports = 88kdc_tcp_ports = 88spake_preauth_kdc_challenge = edwards25519
​
[realms]
EXAMPLE.COM = {#master_key_type = aes256-ctsacl_file = /var/kerberos/krb5kdc/kadm5.acldict_file = /usr/share/dict/wordsadmin_keytab = /var/kerberos/krb5kdc/kadm5.keytabsupported_enctypes = aes256-cts:normal aes128-cts:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal
}
[root@kdc ~]#

创建数据库,并按照提示设置数据库密码

[root@kdc ~]# 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:  #此处为redhat
Re-enter KDC database master key to verify:  #此处为redhat
[root@kdc ~]#

起服务并设置开机自启

[root@kdc ~]# systemctl enable --now kadmin.service krb5kdc.service 
Created symlink /etc/systemd/system/multi-user.target.wants/kadmin.service → /usr/lib/systemd/system/kadmin.service.
Created symlink /etc/systemd/system/multi-user.target.wants/krb5kdc.service → /usr/lib/systemd/system/krb5kdc.service.
[root@kdc ~]# 

防火墙放行服务(若不关防火墙,不设置trusted区域,则按如下操作放行服务)

$ firewall-cmd  --permanent  --add-service=kerberos
$ firewall-cmd –reload

运行kadmin.local 来管理kdc

# 添加nfs server 和 client的 主机信息
[root@kdc ~]# kadmin.local 
Authenticating as principal root/admin@EXAMPLE.COM with password.
kadmin.local:   addprinc -randkey host/nfs.example.com
kadmin.local:   addprinc -randkey host/client.example.com
​
# 添加nfs server 和 client的 nfs 服务主机和客户端
kadmin.local:   addprinc -randkey nfs/nfs.example.com
kadmin.local:   addprinc -randkey nfs/client.example.com
​
# 运行 listprincs 来检查kdc设置
kadmin.local:  listprincs
K/M@EXAMPLE.COM
host/client.example.com@EXAMPLE.COM
host/nfs.example.com@EXAMPLE.COM
kadmin/admin@EXAMPLE.COM
kadmin/changepw@EXAMPLE.COM
kadmin/kdc.example.com@EXAMPLE.COM
kiprop/kdc.example.com@EXAMPLE.COM
krbtgt/EXAMPLE.COM@EXAMPLE.COM
nfs/client.example.com@EXAMPLE.COM
nfs/nfs.example.com@EXAMPLE.COM
​
# 为服务器和客户端生成各自的秘钥文件,并保存在/tmp文件夹下, quit退出 kadmin
kadmin.local:   ktadd -k /tmp/nfs.keytab nfs/nfs.example.com
kadmin.local:   ktadd -k /tmp/client.keytab nfs/client.example.com
kadmin.local:  quit
[root@kdc ~]# ll /tmp/*.keytab
-rw-------. 1 root root 419 Apr 30 09:37 /tmp/client.keytab
-rw-------. 1 root root 404 Apr 30 09:36 /tmp/nfs.keytab
[root@kdc ~]#

NFS 服务器端设置

安装相关软件包

[root@nfs ~]# yum -y install nfs-utils krb5-workstation

从kdc服务器拷贝配置文件和keytab秘钥文件并保存在/etc目录下

[root@nfs ~]# scp kdc.example.com:/etc/krb5.conf /etc/krb5.conf
root@kdc.example.com's password: 
krb5.conf                                                100%  982    10.1KB/s   00:00 
[root@nfs ~]#
[root@nfs ~]#  scp kdc.example.com:/tmp/nfs.keytab /etc/krb5.keytab
root@kdc.example.com's password: 
nfs.keytab                                               100%  404   250.2KB/s   00:00 
[root@nfs ~]# 

创建导出目录,并配置导出

[root@nfs ~]# mkdir /testnfs
[root@nfs ~]# chmod o+w /testnfs/
[root@nfs ~]# vim /etc/exports
[root@nfs ~]# cat /etc/exports
#/testnfs  192.168.99.0/24(sec=krb5p,rw)
/testnfs  *.example.com(sec=krb5p,rw)
[root@nfs ~]#

配置文件中的版本可自行解开注释

[root@nfs ~]# cat /etc/nfs.conf | grep vers
# reverse-lookup=n
# vers2=n
# vers3=y
# vers4=y
# vers4.0=y
# vers4.1=y
# vers4.2=y
[root@nfs ~]# 此处用默认的配置,无需修改

重启服务测试

[root@nfs ~]# systemctl restart nfs-server.service 
[root@nfs ~]# exportfs -rv
exporting *.example.com:/testnfs
[root@nfs ~]#

NFS 客户端设置

安装相应软件包

[root@client ~]#  yum -y install nfs-utils krb5-workstation

从kdc服务器拷贝配置文件和keytab秘钥文件并保存在/etc目录下

[root@client ~]# scp kdc.example.com:/etc/krb5.conf /etc/krb5.conf
[root@client ~]# scp kdc.example.com:/tmp/client.keytab /etc/krb5.keytab

测试挂载

[root@client ~]# mkdir /nfsmount
[root@client ~]# showmount -e nfs.example.com
Export list for nfs.example.com:
/testnfs *.example.com
[root@client ~]#
​
# 注:centos stream 8没有nfs-secure服务,测试挂载前可重启
[root@client ~]# systemctl restart nfs-mountd.service
​
# 如下报错为不匹配的安全选项导致的报错
[root@client ~]# mount -o sec=none  nfs.example.com:/testnfs /nfsmount
mount.nfs: access denied by server while mounting nfs.example.com:/testnfs
[root@client ~]# mount -o sec=sys  nfs.example.com:/testnfs /nfsmount
mount.nfs: access denied by server while mounting nfs.example.com:/testnfs
[root@client ~]# mount -o sec=krb5  nfs.example.com:/testnfs /nfsmount
mount.nfs: access denied by server while mounting nfs.example.com:/testnfs
[root@client ~]# mount -o sec=krb5i  nfs.example.com:/testnfs /nfsmount
mount.nfs: access denied by server while mounting nfs.example.com:/testnfs
​
# 挂载
[root@client ~]# mount -o sec=krb5p  nfs.example.com:/testnfs /nfsmount
[root@client ~]# umount /nfsmount
[root@client ~]# mount nfs.example.com:/testnfs /nfsmount(可以自动识别挂载选项)
[root@client ~]# df -h /nfsmount/
Filesystem                Size  Used Avail Use% Mounted on
nfs.example.com:/testnfs   70G   11G   60G  15% /nfsmount
[root@client ~]# mount | grep /nfsmount
nfs.example.com:/testnfs on /nfsmount type nfs4 (rw,relatime,vers=4.2,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5p,clientaddr=192.168.99.134,local_lock=none,addr=192.168.99.129)
[root@client ~]#

注:可以从配置文件中指定默认的安全选项

[root@client ~]# cat /etc/nfsmount.conf | grep -B 2 Sec 
# RPCGSS security flavors 
# [none, sys, krb5, krb5i, krb5p ]
# Sec=sys (解开注释并修改)
[root@client ~]#

可以指定nfs版本

[root@client ~]# mount -o vers=4.2,sec=krb5p  nfs.example.com:/testnfs /nfsmount
[root@client ~]# umount /nfsmount
[root@client ~]# vim /etc/fstab 
[root@client ~]# tail -1 /etc/fstab 开机自动挂载配置如下:
nfs.example.com:/testnfs /nfsmount  nfs   _netdev,defaults,vers=4.2,sec=krb5p  0 0
[root@client ~]# mount -a
[root@client ~]# df -h /nfsmount
Filesystem                Size  Used Avail Use% Mounted on
nfs.example.com:/testnfs   70G   11G   60G  15% /nfsmount
[root@client ~]# umount /nfsmount
[root@client ~]#

作业

要求:

  • 在nfs服务端创建两个共享目录/dir1、/dir2

    • /dir1使用默认的安全选项,sec=sys

    • /dir2使用sec=krb5p

    • 服务端、客户端和KDC的域名为kunpeng.com

    • 在客户端能手动挂载两个目录

    • 在客户端能使用autofs自动挂载两个目录

    • 如果可以使用named解析三个主机的域名

    • 如果可以使用unbound解析三个主机的域名

  • 配置kerberos与其他网络服务的集成,如kerberos+ssh

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/13645.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

区块链技术在游戏行业的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 区块链技术在游戏行业的应用 区块链技术在游戏行业的应用 区块链技术在游戏行业的应用 引言 区块链技术概述 定义与原理 发展历程…

MooseFS (MFS) 分布式对象存储

一、MFS 优越特性 Free (GPL): 通用文件系统,开源免费。在线扩容: 体系架构具有极强的可伸缩性,支持在线扩容。部署简单。高可用性: 支持设置任意文件冗余(数据分区)程度,提供比RAID10更高的冗余级别,同时不会影响读写性能&#…

【常见问题解答】远程桌面无法复制粘贴的解决方法

提示:文中提出了“远程桌面无法复制粘贴文件到本地”问题的三种解决方法,其中“方法 3:重启 RDP 剪贴板监视程序”亲测有效。 目录 一、问题描述二、解决方法1.方法1:设置远程桌面连接(1)打开远程桌面连接,点击【显示选项】(2)勾选“剪贴板”,并点击【详细信息】(3)…

探索光耦:达林顿光耦的特点与应用

在现代电子设备中,光耦作为信号隔离和传输的核心元件之一,扮演着至关重要的角色。达林顿光耦凭借其独特的电流放大能力和可靠性,在众多应用中脱颖而出。本文将探讨达林顿光耦的特点及其广泛的应用。 达林顿光耦的主要特点 高电流放大倍数&a…

河南省的一级科技查新机构有哪些?

科技查新,简称查新,是指权威机构对查新项目的新颖性作出文献评价的情报咨询服务。这一服务在科研立项、成果鉴定、项目申报等方面发挥着至关重要的作用。河南省作为中国的重要科技和教育基地,拥有多个一级科技查新机构,为本省及全…

数据结构 ——— 层序遍历链式二叉树

目录 链式二叉树示意图​编辑 何为层序遍历 手搓一个链式二叉树 实现层序遍历链式二叉树 链式二叉树示意图 何为层序遍历 和前中后序遍历不同,前中后序遍历链式二叉树需要利用递归才能遍历 而层序遍历是非递归的形式,如上图:层序遍历的…

【故障解决】麒麟系统右下角网络图标取消显示叹号

原文链接:【故障解决】麒麟系统右下角网络图标取消显示叹号 Hello,大家好啊!今天给大家带来一篇关于如何在麒麟系统中解决网络图标出现感叹号问题的文章。在日常使用麒麟系统的过程中,我们在内网或公网环境下,有时会遇…

Spring boot 集成 nacos、redis、mysql

1,准备好nacos环境,准备ncc.yml配置: 在配置添加 test: haha 2,添加依赖 在pom.xml 文件中添加Nacos 客户端的依赖,样例使用Spring Cloud Alibaba 版本使用2023.x 分支,详情可查看 版本发布说明-阿里云S…

力扣 LeetCode 206. 反转链表(Day2:链表)

解题思路: pre ,cur双指针 需要通过tmp暂存cur的下一个位置,以方便cur的下一步移动 class Solution {public ListNode reverseList(ListNode head) {ListNode pre null;ListNode cur head;while (cur ! null) {ListNode tmp cur.next;c…

golang 实现比特币内核:公钥的 SEC 编码格式详解

比特币作为区块链的一个应用,它建立在分布式系统之上,‘节点’遍布全球。为了使所有节点协同工作并作为一个整体系统运行,需要保持所有节点同步在相同的状态中,也就是说节点之间需要频繁通信,并且相互交换大量数据消息。这要求在网络上传输的消息或数据要使用某种格式编码…

v-html 富文本中图片使用element-ui image-viewer组件实现预览,并且阻止滚动条

效果 导入组件 import ElImageViewer from "element-ui/packages/image/src/image-viewer"; components:{ ElImageViewer },模板使用组件 <el-image-viewerv-if"isShowPics":on-close"closeViewer":url-list"srcList"/>定义两…

Redhat7.9 安装 KingbaseES 金仓数据库 V9单机版(图形化安装)

Redhat7.9 安装 KingbaseES 金仓数据库 V9单机版 ——图形化安装 一、安装前规划1.1 安装包下载1.2 环境信息 二、操作系统配置2.1 检查操作系统和内存2.2 关闭防火墙和selinux2.3 配置内核参数(/etc/sysctl.conf)2.4 配置资源使用参数(/etc/security/limits.conf)2.5 配置Remo…

【Linux】进程状态的优先级

大家好呀&#xff0c;我是残念&#xff0c;希望在你看完之后&#xff0c;能对你有所帮助&#xff0c;有什么不足请指正&#xff01;共同学习交流哦 本文由&#xff1a;残念ing原创CSDN首发&#xff0c;如需要转载请通知 个人主页&#xff1a;残念ing-CSDN博客&#xff0c;欢迎各…

【Linux:IO多路复用(select函数)

什么是IO多路复用&#xff1f; 一种网络通信的手段&#xff0c;IO多路复用可以同时监测多个文件描述符&#xff0c;且这个过程是阻塞的&#xff0c;当检测有文件描述符就绪&#xff0c;程序的阻塞就会解除&#xff0c;就可以通过这些就绪的文件描述符进行通信。通过这种方式在…

软件工程笔记二—— 软件生存期模型

目录 瀑布模型 瀑布模型的特点 阶段间具有顺序性和依赖性。 推迟实现的观点 质量保证的观点 瀑布模型的优点 瀑布模型的缺点 快速原型模型 快速原型模型的优点 快速原型模型的缺点 增量模型 增量模型的优点 增量构件开发 螺旋模型 完整的螺旋模型&#xff08;顺…

视频孪生技术在金融银行网点场景中的应用价值

作为国民经济重要的基础行业&#xff0c;金融行业在高速发展的同时衍生出业务纠纷、安全防范、职能管理等诸多问题&#xff0c;对安全防范和监督管理提出了更高的要求。因此&#xff0c;如何能更好的利用视频监控系统价值&#xff0c;让管理人员更简便的浏览监控视频、更快速的…

【金融风控】特征评估与筛选详解

内容介绍 掌握单特征分析的衡量指标 知道 IV&#xff0c;PSI等指标含义 知道多特征筛选的常用方法 掌握Boruta,VIF,RFE,L1等特征筛选的使用方法 【理解】单特征分析 什么是好特征 从几个角度衡量&#xff1a;覆盖度&#xff0c;区分度&#xff0c;相关性&#xff0c;稳定…

LeetCode面试经典150题|228.汇总区间

给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,b] 应该按…

new Object到底占用多少内存?

前言 通过 JOL 工具&#xff0c;深入剖析对象头、实例数据以及内存对齐的具体细节&#xff0c;了解 JVM 是如何管理和优化内存的。使用 JOL&#xff0c;验证内存结构&#xff0c;直观地观察 JVM 参数&#xff08;如对象指针压缩、类指针压缩等&#xff09;对对象布局的影响。 …

深入理解接口测试:实用指南与最佳实践5.0(二)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…