`
flylynne
  • 浏览: 374149 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Kerberos配置与使用

阅读更多

1.Kerberos协议:
Kerberos协议主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据(ticket-granting ticket)访问多个服务,即SSO(Single Sign On)。由于在每个Client和Service之间建立了共享密钥,使得该协议具有相当的安全性
2.1. 环境配置

  安装kerberos前,要确保主机名可以被解析。


主机名     内网IP        角色
master 192.168.1.15   master KDC

 

2.2 Configuring a Kerberos Server

2.2.1 确保环境可用

  确保所有的clients与servers之间的时间同步以及DNS正确解析

2.2.2 选择一个主机来运行KDC,并在该主机上安装krb-5libs,krb5-server,已经krb5-workstation:

yum install krb5-server krb5-libs krb5-auth-dialog1

KDC的主机必须非常自身安全,一般该主机只运行KDC程序。本文中我们选择vmw201作为运行KDC的主机。
在安装完上述的软件之后,会在KDC主机上生成配置文件/etc/krb5.conf和/var/kerberos/krb5kdc/kdc.conf,它们分别反映了realm name 以及 domain-to-realm mappings。

2.2.3 配置kdc.conf

默认放在 /var/kerberos/krb5kdc/kdc.conf。或者通过覆盖KRB5_KDC_PROFILE环境变量修改配置文件位置。

配置示例:

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 BAID.COM = {
  #master_key_type = aes256-cts
  max_life = 24h --添加
  max_renewable_life  = 7d --添加
  default_principal_flags = +renewable --添加
  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
 }

 

说明:
HADOOP.COM:是设定的realms。名字随意。Kerberos可以支持多个realms,会增加复杂度。本文不探讨。大小写敏感,一般为了识别使用全部大写。这个realms跟机器的host没有大关系。
max_renewable_life = 7d 涉及到是否能进行ticket的renwe必须配置。
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去掉。


2.2.4 配置krb5.conf
/etc/krb5.conf: 包含Kerberos的配置信息。例如,KDC的位置,Kerberos的admin的realms 等。需要所有使用的Kerberos的机器上的配置文件都同步。这里仅列举需要的基本配置。

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

[libdefaults]
 default_realm = BAID.COM --修改之处
 dns_lookup_realm = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = /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
# }

 BAID.COM = {--修改之处
  kdc = master --修改之处
  admin_server = master --修改之处
 }

[domain_realm]
 .BAID.com = BAID.COM --修改之处
 BAID.com = BAID.COM --修改之处

说明:
[logging]:表示server端的日志的打印位置
[libdefaults]:每种连接的默认配置,需要注意以下几个关键的小配置
default_realm = HADOOP.COM 默认的realm,必须跟要配置的realm的名称一致。
udp_preference_limit = 1 禁止使用udp可以防止一个Hadoop中的错误
oticket_lifetime表明凭证生效的时限,一般为24小时。
orenew_lifetime表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,
对安全认证的服务的后续访问则会失败。
[realms]:列举使用的realm。
kdc:代表要kdc的位置。格式是 机器:端口
admin_server:代表admin的位置。格式是机器:端口
default_domain:代表默认的域名
[appdefaults]:可以设定一些针对特定应用的配置,覆盖默认配置。


2.2.5 创建/初始化Kerberos database
初始化并启动:完成上面两个配置文件后,就可以进行初始化并启动了。

1

[root@vmw201 ~]# /usr/sbin/kdb5_util create -s -r BAID.COM

其中,[-s]表示生成stash file,并在其中存储master server key(krb5kdc);还可以用[-r]来指定一个realm name —— 当krb5.conf中定义了多个realm时才是必要的。

# 保存路径为/var/kerberos/krb5kdc 如果需要重建数据库,将该目录下的principal相关的文件删除即可

在此过程中,我们会输入database的管理密\码。这里设置的密\码一定要记住,如果忘记了,就无法管理Kerberos server。

 

Kerberos database创建好后,可以看到目录 /var/kerberos/krb5kdc 下生成了几个文件:

[root@master ~]# /usr/sbin/kdb5_util create -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'BAID.COM',
master key name 'K/M@BAID.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:
[root@master ~]# ll /var/kerberos/krb5kdc/
total 24
-rw------- 1 root root   22 Jan 30 00:59 kadm5.acl
-rw------- 1 root root  532 Apr  1 13:51 kdc.conf
-rw------- 1 root root 8192 Apr  1 13:52 principal
-rw------- 1 root root 8192 Apr  1 13:52 principal.kadm5
-rw------- 1 root root    0 Apr  1 13:52 principal.kadm5.lock
-rw------- 1 root root    0 Apr  1 13:52 principal.ok

2.2.6 添加database administrator
我们需要为Kerberos database添加administrative principals (即能够管理database的principals) —— 至少要添加1个principal来使得Kerberos的管理进程kadmind能够在网络上与程序kadmin进行通讯。

在maste KDC上执行:
?

1

[root@vmw201 /]# /usr/sbin/kadmin.local -q "addprinc admin/admin"

 

1

[root@master ~]# kadmin.local
Authenticating as principal root/admin@BAID.COM with password.
kadmin.local:  listprinc
kadmin.local: Unknown request "listprinc".  Type "?" for a request list.
kadmin.local:  listprincs
K/M@BAID.COM
kadmin/admin@BAID.COM
kadmin/changepw@BAID.COM
kadmin/master@BAID.COM
kdcadmin/admin@BAID.COM
kiprop/master@BAID.COM
krbtgt/BAID.COM@BAID.COM
kadmin.local:  quit

可以直接运行在master KDC上,而不需要首先通过Kerberos的认证,实际上它只需要对本
地文件的读写权限。

2.2.7 为database administrator设置ACL权限
在KDC上我们需要编辑acl文件来设置权限,该acl文件的默认路径是 /var/kerberos/krb5kdc/kadm5.acl(也可以在文件kdc.conf中修改)。Kerberos的kadmind daemon会使用该文件来管理对Kerberos database的访问权限。对于那些可能会对pincipal产生影响的操作,acl文件也能控制哪些principal能操作哪些其他pricipals。

我们现在为administrator设置权限:将文件/var/kerberos/krb5kdc/kadm5.acl的内容编辑为

代表名称匹配*/admin@BAID.COM 都认为是admin,权限是 *。代表全部权限。

[root@master Downloads]# cat /var/kerberos/krb5kdc/kadm5.acl
*/admin@BAID.COM 

2.2.8 在master KDC启动Kerberos daemons

手动启动:

[root@master ~]# service krb5kdc start
Redirecting to /bin/systemctl start krb5kdc.service
[root@master ~]# service krb5kdc status
Redirecting to /bin/systemctl status krb5kdc.service
● krb5kdc.service - Kerberos 5 KDC
   Loaded: loaded (/usr/lib/systemd/system/krb5kdc.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-04-01 13:59:06 CST; 2s ago
  Process: 19356 ExecStart=/usr/sbin/krb5kdc -P /var/run/krb5kdc.pid $KRB5KDC_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 19359 (krb5kdc)
    Tasks: 1
   CGroup: /system.slice/krb5kdc.service
           └─19359 /usr/sbin/krb5kdc -P /var/run/krb5kdc.pid

Apr 01 13:59:06 master systemd[1]: Starting Kerberos 5 KDC...
Apr 01 13:59:06 master systemd[1]: Started Kerberos 5 KDC.
[root@master ~]# tail -f /var/log/krb5kdc.log
otp: Loaded
Apr 01 13:59:06 master krb5kdc[19356](info): setting up network...
krb5kdc: setsockopt(9,IPV6_V6ONLY,1) worked
krb5kdc: setsockopt(11,IPV6_V6ONLY,1) worked
Apr 01 13:59:06 master krb5kdc[19356](info): set up 4 sockets
Apr 01 13:59:06 master krb5kdc[19359](info): commencing operation
^C
[root@master ~]# cat /var/log/kadmind.log
[root@master ~]# service kadmin start
Redirecting to /bin/systemctl start kadmin.service
[root@master ~]# cat /var/log/kadmind.log
Apr 01 13:59:51 master kadmind[19395](info): setting up network...
kadmind: setsockopt(9,IPV6_V6ONLY,1) worked
kadmind: setsockopt(11,IPV6_V6ONLY,1) worked
kadmind: setsockopt(13,IPV6_V6ONLY,1) worked
Apr 01 13:59:51 master kadmind[19395](info): set up 6 sockets
Apr 01 13:59:52 master kadmind[19400](info): Seeding random number generator
Apr 01 13:59:52 master kadmind[19400](info): starting

设置开机自动启动:

[root@master ~]# chkconfig krb5kdc on
Note: Forwarding request to 'systemctl enable krb5kdc.service'.
Created symlink from /etc/systemd/system/multi-user.target.wants/krb5kdc.service to /usr/lib/systemd/system/krb5kdc.service.
[root@master ~]# chkconfig kadmin on
Note: Forwarding request to 'systemctl enable kadmin.service'.
Created symlink from /etc/systemd/system/multi-user.target.wants/kadmin.service to /usr/lib/systemd/system/kadmin.service.

现在KDC已经在工作了。这两个daemons将会在后台运行,可以查看它们的日志文件(/var/log/krb5kdc.log 和 /var/log/kadmind.log)。
可以通过命令kinit来检查这两个daemons是否正常工作。

 

2.2.9关于AES-256加密
对于使用 centos5. 6及以上的系统,默认使用 AES-256 来加密的。这就需要集群中的所有节点上安装 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File。

https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

下载的文件是一个 zip 包,解开后,将里面的两个文件放到下面的目录中:$JAVA_HOME/jre/lib/security


2.3 Configuring Kerberos Clients
2.3.1 Installing Kerberos Client(CentOS7可以省略此步骤)
在另外两台主机(vmw202,vmw203)上安装kerberos客户端。 本次安装只安装了一台服务器

1

yum install krb5-workstation krb5-libs krb5-auth-dialog

2.3.2 配置krb5.conf
配置这些主机上的/etc/krb5.conf,这个文件的内容与KDC中的文件保持一致即可。

 

3. kerberos的日常操作与常见问题
3.1 管理员操作
3.1.1 登录
登录到管理员账户: 如果在本机上,可以通过kadmin.local直接登录。其它机器的,先使用kinit进行验证。

[root@master Downloads]# kadmin.local
Authenticating as principal confluence/admin@BAIDU.COM with password.
kadmin.local: 

客户机使用kinit admin/admin 验证后再使用

kadmin登录

3.1.2增删改查账户
在管理员的状态下使用addprinc,delprinc,modprinc,listprincs命令。使用?可以列出所有的命令。

[root@master Downloads]# kadmin.local
Authenticating as principal confluence/admin@BAIDU.COM with password.
kadmin.local:  addprinc test
WARNING: no policy specified for test@BAIDU.COM; defaulting to no policy
Enter password for principal "test@BAIDU.COM":
Re-enter password for principal "test@BAIDU.COM":
Principal "test@BAIDU.COM" created.

 

kadmin.local:  delprinc test
Are you sure you want to delete the principal "test@BAIDU.COM"? (yes/no): yes
Principal "test@BAIDU.COM" deleted.
Make sure that you have removed this principal from all ACLs before reusing.
kadmin.local:  listprincs
K/M@BAIDU.COM
kadmin/admin@BAIDU.COM
kadmin/changepw@BAIDU.COM
kadmin/master@BAIDU.COM
kdcadmin/admin@BAIDU.COM
kiprop/master@BAIDU.COM
krbtgt/BAIDU.COM@BAIDU.COM

3.2.3 认证用户

1

kinit -kt /xx/xx/kerberos.keytab hdfs/hadoop1

3.2.4 删除当前的认证的缓存

1

kdestroy

相关Kerberos命令
//添加principal
kadmin -p 'kdcadmin/admin' -w '<kdc password>' -s '<kdc server>' -q 'addprinc -randkey trafodion'
//生成keytab文件
ktadd -k /opt/trafodion.keytab trafodion
//认证用户
kinit -kt /opt/trafodion.keytab trafodion
//查看当前认证用户信息
klist

3.3 常见问题
3.3.1 查看ticket是否是renewable

 

通过klist命令来查看


如果Valid starting的值与renew until的值相同,则表示该principal的ticket 不是 renwable。

3.3.2 ticket无法更新
如果过了Expires,可以通过命令kinit –R来更新ticket
但如果ticket无法更新

1
2

[root@master~]$ kinit -R
kinit: Ticket expired while renewing credentials

这是因为krbtgt/BAIDU.COM@BAIDU.COM的[renewlife]被设置成了0,这一点可以通过[kadmin.local => getprinc krbtgt/ BAIDU.COM @ BAIDU.COM]看出来。

将krbtgt/BAIDU.COM@BAIDU.COM的[renewlife]修改为7days即可,方法

1

kadmin.local: modprinc -maxrenewlife 1week krbtgt/BAIDU.COM@BAIDU.COM

分享到:
评论

相关推荐

    Hadoop部署和配置Kerberos安全认证

    2. **配置Kerberos配置文件** - 配置`/etc/krb5.conf`文件,特别需要注意的是`default_realm`字段,这通常被理解为域名称(例如`TEST.COM`)。确保使用大写字母,并且在配置`kdc`和`admin_server`时使用相同的主机...

    Hadoop2.0+Kerberos配置

    以下是对标题“Hadoop2.0+Kerberos配置”和描述“Hadoop的安全认证机制,在hadoop的集群中实现对服务器与服务器之间的安全保障”中涉及知识点的详细说明: 1. Hadoop2.0安全机制:Hadoop2.0版本对安全性进行了增强...

    为hdfs配置kerberos

    这应该是为什么 Hadoop 要使用 Kerberos 的最直接的原因。 在配置 Kerberos 之前,需要安装和部署 Kerberos 服务。安装和部署 Kerberos 服务的过程请参考相关博客文章。 在 Kerberos 中,为 Namenode 和 Datanode ...

    kafka 配置kerberos安全认证

    解决此问题的方法有两种:一是将服务端与客户端的配置放在同一个配置文件中;二是仅在 Zookeeper 的配置目录 `zkconf` 下添加服务端配置,而将 Zookeeper 客户端的配置文件添加到 Kafka 的服务器端配置文件中。 ###...

    配置OpenLDAP使用Kerberos验证[参考].pdf

    配置OpenLDAP使用Kerberos验证 Kerberos是一种基于共享密钥的安全机制,由MIT发明,现在已经被标准化,最新是版本5,简称krb5。Kerberos特别适合局域网络,Windows2k及以上系统的安全机制即基于Kerberos。 在配置...

    windows配置kerberos认证

    3. **修改Kerberos配置文件**: - Kerberos的配置文件通常位于`C:\ProgramData\MIT\Kerberos5\`目录下,文件名为`krb5.ini`。 - 修改该文件以适应您的环境需求,比如指定Kerberos服务器的位置、域名以及其他特定于...

    LINUX下的kerberos的安装配置

    ### Linux下Kerberos的安装与配置 #### Kerberos简介 Kerberos是一种网络认证协议,由麻省理工学院(MIT)开发,主要用于提供安全的身份验证机制。它不同于常见的密码认证方式,通过一种称为票据(Ticket)的方式...

    Kerberos的相关配置

    #### 二、AD域控制器下的Kerberos配置 **1. 创建域控制器** 本文以Windows Server 2008为例创建域控制器。具体步骤如下: - **启动dcpromo工具**:点击“开始”菜单,输入“dcpromo”命令。 - **创建活动目录**:...

    单机 kafka 配置 kerberos,设置 ACL 权限

    kafka 配置 kerberos,设置 ACL权限, java 客户端连接。

    tableau连接kerberos认证的impala.docx

    使用 Tableau 连接 Kerberos 认证的 Impala 需要安装 Kerberos 客户端,配置 Kerberos,测试 Kerberos 登录,配置 Hive ODBC,使用 Tableau 连接 Hive,配置 Impala ODBC,使用 Tableau 连接 Impala。通过这篇文章,...

    kerberos配置实验[归纳].pdf

    一、 Kerberos 环境搭建与配置实验目的 * 掌握用 Windows 系统实施 Kerberos 的方法 * 深刻理解 Kerberos 协议 二、 Kerberos 协议原理 * Kerberos 协议是一种基于 ticket 的身份验证协议 * Kerberos 协议的参与...

    kerberos的java实现

    **Kerberos协议详解** ...通过Java实现的Kerberos可以帮助开发者构建安全的网络应用,但同时也需要对Kerberos协议有深入理解,以确保正确配置和使用。这包括对KDC的管理、JAAS策略文件的编写以及安全最佳实践的遵循。

    kerberos+hadoop搭建

    Kerberos+Hadoop 搭建是一个复杂的过程,需要进行环境准备、Kerberos 配置、HDFS 配置、YARN 配置和 Hive 配置等多个步骤。但是,通过这篇文章,读者可以了解 Kerberos+Hadoop 搭建的整个过程,并掌握相关的知识点。

    Kerberos v5 源代码

    3. **配置与管理**:Windows上的Kerberos配置涉及注册域控制器,设置KDC服务,以及调整策略以满足组织的安全需求。 **三、kfw-3-2-2-final 文件** 文件名 "kfw-3-2-2-final" 可能是指Kerberos for Windows的一个...

    CDH Kerberos入门与实战

    总结来说,CDH环境中Kerberos入门与实战涉及对Kerberos协议基础的理解,体系结构和工作机制的深入认识,以及Kerberos在CDH环境中的配置、安装和应用。掌握这些知识点对于确保Hadoop集群的安全性和高效运行至关重要。

    kerberos的使用和安装包

    **kerberos的使用和安装包** Kerberos是一种网络认证协议,主要设计用于提供安全的网络服务。它基于密钥分发中心(KDC)的概念,确保用户与服务器之间的通信是安全的,防止中间人攻击和其他形式的身份欺诈。在本...

    presto-kerberos

    2. 与Kerberos相关的配置还涉及到服务名称、密钥表文件位置和Kerberos配置文件路径,这些分别对应配置项http-server.authentication.krb5.service-name、http-server.authentication.krb5.keytab和...

    kerberos的配置及其应用 kerberos的配置验证实验

    这是自主做的实验 是参考网上资料及学院老师引导做出来的实验 但是网上是不会这么详细的资料的 像这样的配置实验室没有这么具体的实现步骤的 但是由于是我们的课程设计报告 我们话费了很多时间来实现过程的验证 现在...

    java实现flink订阅Kerberos认证的Kafka消息示例源码

    这通常涉及到创建一个`LoginContext`对象,加载Kerberos配置,并执行登录过程。 - 使用`FlinkKafkaConsumer`类来创建消费者实例,传入Kafka的topic名称、消费者的配置(包含Kerberos相关配置)以及序列化器。 - 在...

Global site tag (gtag.js) - Google Analytics