[前]关于本文
大数据安全模块主要包含认证,授权,审计,加密四大子模块,其中认证是所有模块的基础。没有认证作为前提,其他三大模块都毫无意义。本文详细介绍了为Cloudera集群开启Kerberos认证的整个过程。
[〇]Kerberos协议入门
1-关于Kerberos
- 定义:Kerberos是一种网络认证协议,用于通过密钥加密的方式对客户端和服务器之间的通信进行身份验证,确保通信双方的身份安全和数据安全。
- 开发背景:Kerberos最早由麻省理工学院(MIT)在1980年代开发,旨在解决分布式网络环境中的身份验证问题。
- 名称来源:Kerberos的名称来源于希腊神话中的三头犬Kerberos,象征着其在网络安全中的守护角色。
- 工作原理:Kerberos协议通过票据交换来验证用户的身份,并允许用户安全地访问网络资源。用户首先向Kerberos密钥分发中心(KDC)请求票据,KDC验证用户身份后发放票据,用户凭票据访问网络资源时,服务器会验证票据的有效性。
2-Kerberos协议的优点
- 高安全性:Kerberos使用对称密钥加密和第三方信任模型,能够有效防止网络中的各种攻击方式,如中间人攻击、重放攻击等,为Cloudera CDP集群提供强大的安全保障。
- 单点登录支持:Kerberos支持单点登录(SSO),用户在Kerberos体系中只需登录一次,即可访问网络中所有授权的服务,无需重复输入密码,提升了用户体验,也减少了密码泄露的风险。
- 广泛兼容性:Kerberos协议被许多操作系统和应用程序支持,如Windows、Linux、Unix、Hadoop等,这使得Cloudera CDP集群能够在各种异构环境中广泛应用。
- 成熟的协议设计:Kerberos协议经过多年的发展和改进,已经非常成熟,并被多个行业标准采纳,如RFC 4120。其稳定的性能和广泛的应用基础为Cloudera CDP集群提供了可靠的保障。
3-Kerberos协议的实现
4-Kerberos协议中的重要概念
Kerberos Principals(Kerberos 主体)
每个需要向Kerberos进行身份验证的用户和服务都需要一个主体,这个主体在可能包含多个Kerberos服务器和相关子系统的环境中唯一标识该用户或服务。主体最多包含三个识别信息,首先是用户或服务名称(称为主键)。通常,主体的主键部分由操作系统中的用户帐户名称组成,例如用户的Unix帐户使用jcarlos
,而与底层集群节点主机上的服务守护进程相关联的Linux帐户使用hdfs
。
用户主体的组成通常仅包括主键和Kerberos领域名称。领域是与同一个密钥分发中心(KDC)相关联的主体的逻辑分组,该KDC配置了许多相同的属性,如支持的加密算法。大型组织可能会使用领域作为向特定用户组或功能组的各个团队委派管理权限的手段,并在多个服务器之间分配身份验证处理任务。
标准做法是使用组织的域名作为Kerberos领域名称(全部使用大写字母),以便轻松地将其区分为主体的一部分,如以下用户主体模式所示:
username@REALM.EXAMPLE.COM
主键和领域名称的组合可以区分不同的用户。例如,jcarlos@SOME-REALM.EXAMPLE.COM
和 jcarlos@ANOTHER-REALM.EXAMPLE.COM
可能是同一组织内不同的个人。
对于服务角色实例主体,主键是Hadoop守护进程(如hdfs、mapred等)使用的Unix帐户名称,后面跟着一个实例名称,该名称用于标识运行服务的特定主机。例如,hdfs/hostname.fqdn.example.com@SOME-REALM.EXAMPLE.COM
是一个HDFS服务实例的主体的示例。正斜杠(/)使用以下基本模式将主键和实例名称分开:
service-name/hostname.fqdn.example.com@REALM.EXAMPLE.COM
Hadoop网络服务接口所需的HTTP主体没有Unix本地帐户作为主键,而是使用HTTP。
实例名称也可以标识具有特殊角色的用户,如管理员。例如,主体jcarlos@SOME-REALM.COM
和主体jcarlos/admin@SOME-REALM.COM
各自拥有不同的密码和权限,它们可能属于同一个用户,也可能不是。
例如,在一个为每个地理位置设有领域的组织中,运行在集群上的HDFS服务角色实例的主体可能如下所示:
hdfs/hostname.fqdn.example.com@OAKLAND.EXAMPLE.COM
通常,服务名称是给定服务角色实例使用的Unix帐户名称,如上面所示的hdfs或mapred。用于确保对Hadoop服务Web接口进行Web身份验证的HTTP主体没有Unix帐户,因此该主体的主键是HTTP。
[一]安装Active Directory
1-安装前准备
#下载Window Server 2025 ISO
wget https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1742.240906-0331.ge_release_svc_refresh_SERVER_EVAL_x64FRE_zh-cn.iso
2-在vSphere中创建虚拟机
- 选择创建类型
- 选择名称和文件夹
- 选择计算资源
- 选择存储
- 选择兼容性
- 选择客户机操作系统
【重要提示】在其他 VMware vSphere ESXi 虚拟机硬件版本中,如果 Microsoft Windows Server 2025(64位)不可用,请选择 Microsoft Windows Server 2022(64位)作为虚拟机的客户操作系统。
参考:https://knowledge.broadcom.com/external/article?articleId=371344 - 自定义硬件
- 即将完成
- 启动AD-2025电源
3-初始化Window服务器
- 选择语言
- 选择键盘设置
- 选择安装选项
- 选择映像
- 接受声明条款
- 准备就绪,开始安装
- 等待安装完成
- 自定义用户密码
- 安装完成
- 关闭防火墙
- 运行远程桌面访问
4-安装AD DC
- 在仪表盘中选择添加角色和功能
- 开始开始之前
- 服务器选择
- 选择服务器角色(【重要提示】此处不要勾选证书服务器,否则AD DC将无法完成初始化,等初始话AD DC完成后再安装类似次步骤添加AD证书服务)
- 选择功能
- 确认AD DS信息
- 确认
- 等待安装完成
5-初始化AD DC
- 开始配置(点击最上方黄色提醒)
- 选择将此服务器提示为域控
- 选择添加新林并填写域名
- 键入密码
- 不选择DNS委派
- 确认NetBIos
- 确认路径
- 检查选择
- 先决条件检查
- 等待安装完成后会重启
7-安装AD CS
- 使用向导开始添加服务
- 选择安装类型
- 选择目标服务器
- 选择服务器角色
- 选择功能
- 选择角色服务
- 确认所选内容
- 等待安装完成
8-初始化AD CS
- 开始配置(点击最上方黄色提醒)
- 选项部署后配置
- 确认凭据
- 选择证书颁发机构
- 选择独立CA
- 指定CA类型,选择根CA
- 指定私钥类型,选择创建新的私钥
- 选择加密算法
- 指定CA名称
- 指定有效期
- 指定数据库位置
- 确认选择
- 等待配置完成
[二]Linux服务器加入AD域
1-创建集群的专用OU
- 选择新建组织单位(OU)
- 键入OU名称
- 创建完成
- 同样的操作在Cloudera OU下新建子组织单位 OU=Cloudera Computers,OU=Cloudera Users,OU=Cloudera Groups,OU=Cloudera Services他们分别用来存放集群的主机,用户,组和服务
2-创建集群的专用管理员
- 在OU Cloudera下新建用户
- 键入用户信息
- 输入用户密码
- 创建完成
3-为OU指派完全管理员
现在我们给先建的Cloudera OU指派完全管理员scm用户
- 选择委派控制
- 进入向导点击下一步
- 点击添加搜索scm用户
- 勾选全部选权限
- 完成委派
4-linux主机加入AD域
【重要提示】以下操作在linux所有主机上执行
- 安装必要软件
yum install krb5-workstation realmd sssd samba-common adcli oddjob oddjob-mkhomedir samba samba-common-tools -y
- 修改/etc/hosts,添加AD主机
[root@cdp73-1 ~]$ cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.0.171 cdp73-1.test.com cdp73-1 192.168.0.172 cdp73-2.test.com cdp73-2 192.168.0.173 cdp73-3.test.com cdp73-3 192.168.0.174 cdp73-4.test.com cdp73-4 192.168.0.175 cdp73-5.test.com cdp73-5 192.168.0.176 cdp73-6.test.com cdp73-6 #AD host 192.168.0.171 win2025ad.bigdatacdp.com win2025ad
- 修改/etc/resolv.conf,添加AD主机
[root@cdp73-1 ~]# cat /etc/resolv.conf # Generated by NetworkManager search test.com nameserver 192.168.0.170 nameserver 8.8.8.8
- 确认linux主机是否能发现域
[root@cdp73-1 ~]$ realm discover -v bigdatacdp.com * Resolving: _ldap._tcp.bigdatacdp.com * Performing LDAP DSE lookup on: 192.168.0.170 * Successfully discovered: bigdatacdp.com bigdatacdp.com type: kerberos realm-name: BIGDATACDP.COM domain-name: bigdatacdp.com configured: no server-software: active-directory client-software: sssd required-package: oddjob required-package: oddjob-mkhomedir required-package: sssd required-package: adcli required-package: samba-common-tools [root@cdp73-1 ~]$
- linux主机加入域
[root@cdp73-1 ~]$ realm join --user administrator --membership-software=samba --computer-ou "OU=Cloudera Computers,OU=Cloudera,DC=bigdatacdp,DC=com" bigdatacdp.com Password for administrator@BIGDATACDP.COM: Warning: Your password will expire in less than one hour on Mon 13 Sep 2100 10:48:05 PM EDT * Installing necessary packages: samba-common-tools [root@cdp73-1 ~]$
- 修改sssd文件并重启
[root@cdp73-1 ~]$ cat /etc/sssd/sssd.conf [sssd] domains = bigdatacdp.com config_file_version = 2 services = nss, pam [domain/bigdatacdp.com] ad_domain = bigdatacdp.com krb5_realm = BIGDATACDP.COM realmd_tags = manages-system joined-with-samba cache_credentials = True id_provider = ad krb5_store_password_if_offline = True default_shell = /bin/bash ldap_id_mapping = True use_fully_qualified_names = False #改为False fallback_homedir = /home/%u #改为/home/%u access_provider = ad [root@cdp73-1 ~]$ systemctl restart sssd [root@cdp73-1 ~]$ id scm uid=880201103(scm) gid=880200513(domain users) groups=880200513(domain users) [root@cdp73-1 ~]$
- 确认可以获取Ad域中的用户及组
[root@cdp73-1 ~]$ id scm uid=880201103(scm) gid=880200513(domain users) groups=880200513(domain users) [root@cdp73-1 ~]$
- 修改/etc/krb5.conf文件
[root@cdp73-1 ~]$ cat /etc/krb5.conf # To opt out of the system crypto-policies configuration of krb5, remove the # symlink at /etc/krb5.conf.d/crypto-policies which will not be recreated. 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 spake_preauth_groups = edwards25519 default_ccache_name = FILE:/tmp/krb5cc_%{uid} udp_preference_limit = 1 default_realm = BIGDATACDP.COM [realms] # EXAMPLE.COM = { # kdc = kerberos.example.com # admin_server = kerberos.example.com # } [domain_realm] # .example.com = EXAMPLE.COM # example.com = EXAMPLE.COM
- 确认可以正常Kinit
[root@cdp73-1 ~]$ kinit scm Password for scm@BIGDATACDP.COM: Warning: Your password will expire in less than one hour on Mon 13 Sep 2100 10:48:05 PM EDT [root@cdp73-1 ~]$ klist Ticket cache: KCM:0 Default principal: scm@BIGDATACDP.COM Valid starting Expires Service principal 12/24/2024 22:37:14 12/25/2024 08:37:14 krbtgt/BIGDATACDP.COM@BIGDATACDP.COM renew until 12/31/2024 22:37:10 [root@cdp73-1 ~]$
[三]使用Cloudera Manager开启Kerberos
1-启用Kerberos
2-入门
3-填写KDC信息
4-选择Krb5配置
5-生产KDC Account Manager凭据
6-命令详细信息
7-确认配置
8-等待命令完成
9-启动集群