金仓数据库KingbaseES安全指南--6.3. Kerberos身份验证

目录

6.3.1. 关于Kerberos身份验证

6.3.2. Kerberos协议原理

6.3.3. 配置Kerberos身份验证

6.3.4. 通过Kerberos身份验证连接Kingbase


6.3.1. 关于Kerberos身份验证

将Kingbase数据库用户信息集中存储在第三方的Kerberos服务器中,用于用户请求Kingbase服务器时对其身份合法性进行集中管理,如对访问系统的用户权限进行认证、授权、用户信息维护更新等。第三方数据库是一种应用于分布式网络环境, 以加密为基础, 对用户及网络连接进行认证的增强网络安全的服务;

6.3.2. Kerberos协议原理

Kerberos 协议包括两种服务器: 一个认证服务器, 一个或多个门票分配服务器(TGS)。其认证协议基本结构如下图所示。

 

  1. 客户请求Kerberos 认证服务器发给接入Kerberos TGS (门票分配服务器) 的门票。请求以报文形式形成。

  2. 认证服务器在其数据库中查找客户实体,产生一个会话密钥, Kerberos 使用客户的秘密密钥对此会话密钥进行加密; 然后生成一TGT (门票分配许可证) , 该许可证包括客户实体名、地址、TGS 名、时间印记、时限、会话密钥等信息; 并用TGS 的秘密密钥(此密钥只有认证服务器和TGS 知道) 对TGT 进行加密; 认证服务器把这两个加密报文发还给客户。

  3. 客户将第一个报文解密得到会话密钥, 然后生成一个认证单, 包括客户实体名、地址及时间印记, 并用会话密钥对认证单进行加密。然后, 向TGS 发出请求,

  4. 申请接入某一目标服务器的门票。此请求包括目标服务名称、收到Kerberos 发来的加过密的TGT 以及加密的认证单。

  5. TGS 用其秘密密钥对TGT 进行解密, 使用TGT 中的会话密钥对认证单进行解密。然后将认证单中的信息与TGT 中的信息进行比较。此时, TGS 产生新的会话密钥供客户实体与目标服务器使用, 利用客户实体和TGS 用的会话密钥将新的会话密钥加密; 还将新的会话密钥加入客户向该服务器提交的有效门票

  6. 之中, 门票中还包括客户实体名、网络地址、服务器名、时间印记、时限等, 并用目标服务器的秘密密钥将此门票加密; 然后将这两个报文发送给客户。

  7. 客户将接收到的报文解密后, 获得与目标服务器共用的会话密钥。这时, 客户制作一个新的认证单, 并用获得的会话密钥对该认证单进行加密。当请求进入访问目标服务器时, 将加密的认证单和从TGS 收到的门票一并发送给目标服务器。由于此认证单有会话密钥加密的明文信息, 从而证明发信人知道该密钥。

  8. 目标服务器对门票和认证单进行解密检查, 包括地址、时间印记、时限等。如果一切都核对无误, 服务器则知道了客户实体的身分, 并与之共享一个可用于他们之间秘密通信的加密密钥。

6.3.3. 配置Kerberos身份验证

6.3.3.1. 配置kerberos服务器

kerberos服务器的配置步骤如下:

  1. 修改/etc/hosts 文件;

  2. 配置/etc/krb5.conf 文件,如果没有该文件,则创建该文件;

  3. 生成kerberos的本地数据库 ;

  4. kdb5_util create -r EXAMPLE.COM;

  5. 启动kdc服务 查看是否成功;

  6. 使用kadmin.local管理程序配置 ;

  7. 为管理员账号admin/admin指定权限;

  8. 启动kadmind服务程序,查看是否成功启动;

  9. 增加测试服务;

下面通过一个示例,来演示配置过程:

  1. 修改/etc/hosts 文件(通过ifconifg命令查询服务器IP,例如:192.168.8.243)增加服务器ip信息:

192.168.8. 243   kerberos.example.com    kerberos
192.168.8. 243   kdc.example.com    kdc

修改完成之后,保证下边两条命令能够ping通过:

Ping kerberos.example.com
ping kdc.example.com
  1. 配置/etc/krb5.conf文件

查找: realms 确认在[realms]内kdc,admin_server,default_domain的值如下所示:

[realms]

EXAMPLE.COM = {

kdc = kdc.example.com:88 admin_server = kerberos.example.com:749 default_domain = example.com

}

以下为文件的样本

[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
 forwardable = yes
[realms]
 EXAMPLE.COM = {
  kdc = kerberos.example.com:88
  admin_server = kerberos.example.com:749
  default_domain = example.com
 }
[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM
[kdc]
 profile = /usr/local/var/krb5kdc/kdc.conf
[appdefaults]
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }
  1. 生成kerberos的本地数据库

kdb5_util create -r EXAMPLE.COM
(注意:记住KDC master的口令)

该命令将创建如下文件(缺省目录是: /var/kerberos/krb5kdc/)。这个命令用来生成kerberos的本地数据库principal,具体介绍如下:

  • principal:Kerberos database files 存放principal (数据和索引文件)

  • principal.ok:Kerberos database lock files.

  • principal.kadm5:the Kerberos administrative database file,

  • principal.kadm5.lock:the administrative database lock file;

  1. 启动kdc服务,查看是否成功

/usr/kerberos/sbin/krb5kdc

查看启动是否成功:

ps -ef | grep krb5kdc
  1. 使用kadmin.local管理程序配置kadmin.local,然后会出现如下提示信息:

Authenticating as principal root/admin@EXAMPLE.COM with password.kadmin.local:

然后增加安全策略:

add_policy -maxlife 180days -minlife 2days -minlength 8 -minclasses 3 -history 10 default

并增加管理员账号:

addprinc admin/admin

输入管理员口令:

[admin12;](中括号内即为密码,包括分号)

查看是否存在admin/admin@EXAMPLE.COM账号:

listprincs

创建一个包含密钥的keytab文件;

ktadd -k /usr/local/var/krb5kdc/kadm5.keytab kadmin/changepw

退出程序:

quit
  1. 为管理员账号admin/admin指定权限

vim /var/kerberos/krb5kdc/kadm5.acl

添加下面这一行:

admin/admin@EXAMPLE.COM *
  1. 启动kadmind服务程序

/usr/kerberos/sbin/kadmind

查看启动是否成功:

ps -ef | grep kadmind

8) 增加测试服务 进入kadmin.local,将会出现如下提示 .. code:

kadmin.local
Authenticating as principal root/admin@EXAMPLE.COM with password.kadmin.local:

输入测试服务口令:[abcd110;](中括号内即为密码,包括分号)

addprinc server_test/kerberos.example.com

产生并导出服务server所使用的密钥:

ktadd -k /usr/local/var/krb5kdc/kadm5.keytab server_test/kerberos.example.com

输入测试服务口令:[abcd110;](中括号内即为密码)

addprinc  client_test/kerberos.example.com

退出程序

quit
  1. 启动服务端测试程序

sserver -p 8899 -s server_test -S  /usr/local/var/krb5kdc/kadm5.keytab;

6.3.3.2. 配置kerberos客户端

kerberos客户端的配置步骤如下:

  1. 修改/etc/hosts 文件;

  2. 获取client的TGT;

  3. 启动客户端测试程序;

  4. 获取client/kerberos.example.com的Kerberos TGT;

  5. 启动客户端测试程序;

下面通过一个示例,来演示配置过程:

  1. 修改/etc/hosts 文件;

  2. 获取client的TGT;

3) 启动客户端测试程序; 说明:kerberos客户端即为kingbase服务器。修改/etc/hosts 文件(本机客户端IP为192.168.1.27):

192.168.8. 243   kerberos.example.com    kerberos
192.168.8. 243   kdc.example.com    kdc
192.168.1.27      test.example.com  test

保证kerberos.example.com,kdc.example.com 是否能够ping通:

ping kerberos.example.com
ping kdc.example.com
ping test.example.com
  1. 获取client/kerberos.example.com的Kerberos TGT。客户端执行:

kinit client_test/kerberos.example.com
密码[test110;]
  1. 启动客户端测试程序

sclient kerberos.example.com 8899 server_test

若测试成功,将会返回如下信息:

connected
sendauth succeeded, reply is:
reply len 53, contents:
You are client_test/kerberos.example.com@EXAMPLE.COM

6.3.3.3. 配置KingbaseES服务器配置

KingbaseES服务器配置步骤如下:

  1. 启动服务器(kingbase已经加入krb5编译选项kerberos)创建jack用户,密码1234

  2. 修改sys_hba.conf,修改认证方式

  3. 修改kingbase配置文件kingbase.conf,确保能够连接到kerberos服务器。

  4. 确保能够ping同kerberos服务器

  5. 远程登录kerberos服务器,创建kingbase用户

下面通过一个示例,来演示配置过程:

  1. 启动服务器(kingbase已经加入krb5编译选项kerberos)创建jack用户,密码1234:

CREATE USER jack WITH PASSWORD '1234';
  1. 修改sys_hba.conf

修改认证方式trust为krb5:
 host    all         all         0.0.0.0/0             trust
修改后如下:
 host    all         all         192.168.0.0/16         krb5
  1. 修改kingbase.conf

krb_server_hostname = 'test.example.com'

打开krb_server_keyfile,并赋值如下:

krb_server_keyfile = '/home2/bliu/p_install/etc/kadm5.keytab'
(注意:kadm5.keytab的默认位置是--prefix所指定目录下的etc目录,etc需要收手动创建)
  1. 确保能够ping同kerberos服务器

如果不能ping通服务器的话,则需要配置/etc/hosts。同kerberos客户端。

  1. 远程登录kerberos服务器,创建kingbase用户

切换到普通用户执行如下:

  1. 获取admin/admin的TGT,并根据提示输入密码[admin12;]

    kinit admin/amdin

  2. 连接到Kerberos数据库管理服务进程kadmind:

/usr/kerberos/sbin/kadmin

进入kadmin后会显示如下信息:

Couldn't open log file /var/log/kadmind.log: Permission denied
Couldn't open log file /var/log/kadmind.log: Permission denied
Authenticating as principal admin/admin@EXAMPLE.COM with password.
Password for admin/admin@EXAMPLE.COM:<输入admin/admin的密码[admin12;]>

注意:由于kerberos认证需要三台机器时间同步,相差不能超过五分钟,如果出现如下错误,请查看所用三台机器,确认时间是否同步。
       (kadmin: GSS-API (or Kerberos) error while initializing kadmin interface)
  1. 在Kerberos数据库中增加与数据用户同名的jack kadmin: ank jack,根据提示输入密码【admin12;】

  2. 在kerberos数据库中增加kingbase的服务主记录

kadmin: ank -randkey kingbase/test.example.com
  1. 将kingbase得服务主记录导出到密钥表,确保导出的密钥表文件kadm5.keytab,kingbase拥有读权限

kadmin: ktadd -k /home2/bliu/p_install/etc/kadm5.keytab kingbase/test.example.com kadmin: quit
  1. 重新启动kingbase服务器

./kingbase -D /data -h 192.168.1.27

6.3.4. 通过Kerberos身份验证连接Kingbase

完成Kerberos身份验证的配置后,就可以连接到KingbaseES数据库。步骤如下:

  1. 配置kingbase客户端/etc/hosts

  2. 获取用户TGT

  3. 判断是否登录成功。

下面通过一个示例,来演示配置过程:

  1. 配置kingbase客户端/etc/hosts,在(127.0.0.1 localhost.localdomain localhost)下面增加:

192.168.8. 243   kerberos.example.com    kerberos
192.168.8. 243   kdc.example.com    kdc
192.168.1.27      test.example.com  test
  1. 获取用户TGT

kinit jack
根据提示输入密码:[admin12;]

检查是否获取TGT成功:

klist
则会出现如下信息:
03/23/11 09:50:38  03/23/11 19:50:37  krbtgt/EXAMPLE.COM@EXAMPLE.COM
  1. 判断是否登录成功,用数据库用户jack登录数据库:

./isql -U jack test -h 192.168.1.27

如果登录成功,则说明kerberos认证配置成功可用klist,检查获取服务主的ticket是否成功,如下:

klist

03/23/11 09:54:37  03/23/11 19:50:37  kingbase/test.example.com@EXAMPLE.COM
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值