Kerberos 简单安装配置

摘要:
Kerberos简单安装配置标签:Kerberos I,Kerberos的简要历史Kerberos是一种网络安全认证协议,最早由MIT开发,以保护Athena提供的网络服务器。在客户端和服务器使用Kerberos来证明他们的身份之后,他们还可以加密所有通信以确保隐私和数据完整性。总而言之,Kerberos是网络安全问题的解决方案。Kerberos服务器充当密钥分发中心,简称KDC。Kerberos身份验证系统使用一系列加密消息向身份验证者证明客户端正在作为指定用户运行。例如,KDC的位置、Kerberos管理领域等。
Kerberos 简单安装配置

标签(空格分隔): Kerberos


一,Kerberos简史

Kerberos是一种网络安全认证协议,最早由麻省理工研发,用来保护项目 Athena提供的网络服务器。这个协议以希腊神话中的人物Kerberos(或者Cerberus)命名,他在希腊神话中是Hades的一条凶猛的三头保卫神犬。

kerberos

Internet是一个非常不安全的地方。在Internet中使用的很多协议并没有提供任何安全保障。一些站点尝试使用防火墙来解决网络安全问题。不幸的是,防火墙假设“坏蛋”都在外边,往往这是非常愚蠢的假设。现实情况是大多数计算机犯罪的毁灭事件都从内部发起。

Kerberos作为网络安全问题的解决方案,使用强加密技术,以便客户端可以在不安全网络连接上向服务器端证明身份。在客户端和服务器端使用Kerberos证明彼此身份之后,它们也可以加密所有通信以确保隐私和数据的完整性。在系统设计上Kerberos采用C/S架构,基于DEC加密技术,支持客户端和服务器端双向认证。

总之,Kerberos是一种网络安全问题的解决方案。它提供了认证和强加密工具用以在整个企业基于网络帮助你保护你的信息系统。

二,Kerberos 基本原理

1,Kerberos 认证原理

Kerberos是第三方的认证机制,通过它,用户和用户希望访问的服务依赖于Kerberos服务器彼此认证。这种机制也支持加密用户和服务之间的所有通信。Kerberos 服务器作为密钥分发中心,简称KDC。在高级别上,它包含三部分:
1,用户和服务的数据库(即principals)以及他们各自的Kerberos 密码
2,认证服务器(AS),执行初始认证并签发授权票据(TGT)
3,Ticket授予服务器(TGS)基于初始的TGT签发后续的服务票据(ST)

关于AS, TGS , user client , Application server , TGT 以及ST的关系,可以参考下图:

image.png-113kB

用户principal,从AS请求认证,AS返回一个使用用户principal的kerberos密码加密的TGT,它仅被用户principal和AS知晓。用户principal使用Kerberos密码本地解密这个TGT,并且从这个点开始,直到票据过期,用户principal可以使用这个TGT从TGS获取服务票据(ST)。

Kerberos 认证系统使用一系列的加密消息向验证机证明客户端正在以指定用户身份运行。Kerberos通过使用时间戳来减少需要基础校验的消息数量,除了“tikcket-granting”(TGS)服务被用来支持后续的认证外,不需要重复输入principal的密码。

最初,客户端和服务器端并没有共享加密密钥。无论何时客户端到一个新的验证机认证自己都依赖于AS生成的新的加密密钥,并且将其安全地分发给彼此。这个新的加密密钥叫做 session key, Kerberos ticket被用来分发它到验证机。

由于服务principal不可能每次提供密码来解密TGT,它会使用一个特定的文件,叫做keytab,这个文件包含了它的认证授权。
这种服务票据允许principal访问各种服务。Kerberos服务器控制的一套主机,用户和服务被称作一个域(realm)。

2,Kerberos 注意事项

用户名/FQDN(Full Quafilied Domain Name)的主机名@REALM(受保护的域,全大写)

当然这个用户名需要是Linux下存在的用户

FQDN全限定域名,就是一定要带上hostname.domain这种形式,当然,如果你的主机并没有给出domain,那么不写域名也可以。反正就是要全部的主机名加域名(如果存在域名的话),也就是hostname -f所输出的主机名。但实际上,在Kerberos里面,这个并不称之为主机名,而是叫做Instance,实例名,他可以不是任何服务器的主机名称,但是便于理解和认识,我们还是先把他当初主机名来看待吧。

REALM,受到Kerberos保护的域名称,就是一类或一组受到Kerberos保护服务的服务器集合,你可以想象成Windows里面的域。由于一个KDC可以同时保护多个域,比如你可以在一个KDC上既保护HADOOP服务器组,也保护MYSQL服务器组,所以我们通常会使用域名来进行区别。

如果你的hostname里面使用了domain name,那么你必须在Principal的第二部分写完整,否则KDC将无法验证主机的合法性,加密的tgt是要带着主机名信息的。

还有,特别需要注意的是,这里面第二部分的domain(域名),第三部分的realm(域),在中文里的字是一样,但是英文单词完全不同,他们所表达的含义也完全不同。由于通常Kerberos的Realm部分也会写成域名的形式,所以就会让人迷惑,而实际上,你把realm部分理解成windows里面的workgroup或者home这种域也是可以的。名称可以随便起,不一定用你的真实域名。只是个区分不同服务集合的代号。

注意:Kerberos是时间敏感型协议,在域内的所有主机必须是时间同步的。既使客户端的本地系统时间和KDC的差异小到5分钟,客户端都可能认证失败。

三,KDC服务安装及配置

1,确保hosts 能够解析

hostname -f 获取的是 hosts 文件中 FQDN 格式的 的hostname(大小写按照hosts 文件中的),Kerberos必须要求FQDN格式的主机名为小写。
所以hosts 文件中按照如下格式:

ip vecs02583.domain.com vecs02583

如果没有domain.com 类似的长域名,则一定注意主机名英文字母一定要为小写。
确保所有的clients与servers之间的时间同步以及DNS正确解析。

2,安装KDC服务

KDC的主机必须非常自身安全,一般该主机只运行KDC程序。
在安装完上述的软件之后,会在KDC主机上生成配置文件/etc/krb5.conf和/var/kerberos/krb5kdc/kdc.conf,它们分别反映了realm name 以及 domain-to-realm mappings。
进入vecs02583(该节点为KDC Server 节点) 的root 用户下

yum -y install krb5-server krb5-libs krb5-auth-dialog krb5-workstation openldap-clients

3,修改主配置文件/etc/krb5.conf,这个配置文件后续将被下发给所有kerberos客户端服务器。

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

vim /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 = HADOOP.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
[realms]
 HADOOP.COM = {
  kdc = vecs02583
  admin_server = vecs02583
 }
[domain_realm]
 .hadoop.com = HADOOP.COM
 hadoop.com = HADOOP.COM

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

4,配置kdc.conf

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

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88
[realms]
 HADOOP.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
 }

说明:
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需要JDK 下安装额外的jar。

五,创建/初始化Kerberos database

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

[root@VECS02583 ~]# /usr/sbin/kdb5_util create -s -r HADOOP.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 下生成了几个文件:

-rw------- 1 root root   22 Nov 23  2016 kadm5.acl
-rw------- 1 root root  405 Feb 23 20:25 kdc.conf
-rw------- 1 root root 8192 Feb 23 22:26 principal
-rw------- 1 root root 8192 Feb 23 21:56 principal.kadm5
-rw------- 1 root root    0 Feb 23 21:56 principal.kadm5.lock
-rw------- 1 root root    0 Feb 23 22:26 principal.ok

六,添加kdc database administrator

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

/usr/sbin/kadmin.local -q "addprinc admin/admin"

并为其设置密码.

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

七,为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的内容编辑为

vim /var/kerberos/krb5kdc/kadm5.acl

*/admin@HADOOP.COM

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

八,启动并设置 kerberos 后台进程 为deamon

在master KDC启动Kerberos daemons

[root@VECS02583 /]# service krb5kdc start
[root@VECS02583 /]# service kadmin start

开机自动启动

[root@VECS02583 /]# chkconfig krb5kdc on
[root@VECS02583 /]# chkconfig kadmin on

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

九,关于AES-256加密

对于使用 centos5 , 6及以上的系统,默认使用 AES-256 来加密的。这就需要集群中的所有节点上安装 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File。
下载的文件是一个 zip 包,解开后,将里面的两个文件放到下面的目录中:$JAVA_HOME/jre/lib/security

配置JCE,这是因为CentOS6.5及以上系统默认使用AES-256加密,因此需要所有节点安装并配置JCE,JCE下载路径: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

十,配置集群其他Kerberos Clients

在使用到 kerberos client 机器上安装如下

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

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

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

[libdefaults]
 default_realm = HADOOP.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 HADOOP.COM = {
  kdc = vecs02583
  admin_server = vecs02583
 }

[domain_realm]
 .hadoop.com = HADOOP.COM
 hadoop.com = HADOOP.COM

参考:
https://www.jianshu.com/p/69e211cc39ca
https://blog.51cto.com/slaytanic/2102931

免责声明:文章转载自《Kerberos 简单安装配置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python实现图片隐藏信息技术JS 页面弹窗,弹出DIV并使整个页面背景变暗的功能的实现代码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Lighttpd 搭建 Web 服务器

背景:      公司项目用到了lighttpd,由于自己没有接触过,所以做下记录。 简介:      Lighttpd 是一个德国人领导的开源Web服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。支持FastCGI, CGI,...

svn_linux + apache 实现网页访问svn

CentOS7:搭建SVN + Apache 服务器实现网页访问 1. 安装httpd 安装httpd服务: $ sudo yum install httpd 检查httpd是否安装成功: $ httpd -version Server version: Apache/2.4.6 (CentOS) Server built: Jul 18 20...

ansible用普通用户执行root权限的命令 + script模块

0.禁止root登陆1.用sudo的用户登陆2.执行root的权限 3.cat /etc/ansible/hosts # Ex 2: A collection of hosts belonging to the 'webservers' group [test] 10.0.0.3 ansible_ssh_user="dev" ansible_ssh_pa...

移动端 H5 拍照 从手机选择图片,移动端预览,图片压缩,图片预览,再上传服务器

前言:最近公司的项目在做全网营销,要做非微信浏览器的wap 站 的改版,其中涉及到的一点技术就是采用H5 选择手机相册中的图片,或者拍照,再将获取的图片进行压缩之后上传。 这个功能模块主要有这5点比较难:   1手机获取相册的图片文件,拍照的图片文件,通过js 的自带的img对象,获取图片对象。     2.图片的压缩,采用canvas 画布进行压缩图片,...

前端—JavaScript

一、引入JavaScript的引入方式 Script标签内写代码 <script> //在这里写你的JS代码 </script> 引入额外的JS文件 <script src="http://t.zoukankan.com/myscript.js"></script> 二、JavaScript语言规范 注释...

微信支付方式区分

第一: JSAPI支付     https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1 使用场景:JSAPI支付是指商户通过调用微信支付提供的JSAPI接口,在支付场景中调起微信支付模块完成收款 使用实例 A:线下实例   B:公众号场景   C:PC网站场景            A: ...