首页 > 分布式相关 > Kerberos KDC 备份方案

Kerberos KDC 备份方案

2015年3月15日 发表评论 阅读评论
文章作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathinking.com)   转载请注明,谢谢合作。

---

写在前面:

真是好久好久好久木有更新博客了,工作了确实就忙了,尤其是在小米这样的公司;发现学的很多东西当时不沉淀,再回头就需要大量的时间和精力捡起来,真是取不得取不得;能记点就记点,能沉淀点就沉淀点吧,吾当努力而为之;

最近在搞一个Kerberos账号管理系统,出发点是鉴于Kerberos kdc本身没有多机房同步的功能,所以我们打算自己搞一个假同步。本文简单说下我们的同步方案,后面就是笔记了,记录备忘。组织如下:

===KDC同步方案===

===KDC搭建-配置-使用===

===常用命令===

================================================

KDC同步方案

简单来说,我就利用mysql db的实时replication来达到kdc db的同步;

首先,我们有一个基于mysql的Kerberos账号管理系统:Kerberos account management system(简称KAS),管理公司所有的Kerberos账号(具体数据结构就不细说了,视用途而定),账号信息都存储在mysql当中;

其次,不同的机房(包括海外机房)分别部署一个KAS,并部署mysql db主备实时同步;

第三,每个KAS的系统所在的机器都对应部署着KDC的服务器,KAS后面都有一个程序专门check mysql中的账号信息,并将mysql中的账号信息(包括增删改等)同步到KDC server,以此来保证KDC的同步方案;

第四,我们对mysql db replication,kas,以及实施mysql和kdc db同步的script都设置监控报警、自动拉起等配套方案。

下图就是KDC同步方案的架构图:

通过KAS,我们可以对Kerberos账号有一个非常方便的管理,例如:基本的增删改查;同一个账号为不同用户设置不同权限;提供接口查询一个账号都有哪些owner;提供接口给用户导出keytab文件等等;最重要的是通过KAS,我们完成了对Kerberos账号权限管理资源管理

KDC搭建-配置-使用

这里备忘KDC的搭建,简单配置和使用过程

1. 安装配置

yum install krb5-server

kerberos的master server一般包含两个daemon进程:krb5kdc,kadmind;
前者是kdc的server,后者是为kadmin登录操作kerberos principal的server;
kadmin.local命令直接操作数据库,就是连接的kdc server;
kadmin命令则是连接的kadmind对应的daemon进程(实际监听admin_server和kpasswd_server两个端口)

2. 编辑Kerberos的配置文件:krb5.conf & kdc.conf

krb5.conf(/etc/krb5.conf),包含了使用的域(realm),默认域,各个server的地址:kdc/admin_server/kpasswd_server等,例如:

 XIAOMI.TEST = {
  kdc = lg-hadoop-test.bj
  admin_server = lg-hadoop-test.bj:748
  kpasswd_server = lg-hadoop-test.bj:463
 }

kdc.conf(/var/kerberos/krb5kdc/kdc.conf),包含了kdc和kadmind server的端口;以及db模块的配置信息;例如:

 XIAOMI.TEST = {
  profile = /etc/krb5.conf
  database_name = /var/kerberos/krb5kdc/XIAOMI.TEST/principal
  acl_file = /var/kerberos/krb5kdc/XIAOMI.TEST/kadm5.acl
  kadmind_port = 748
  kpasswd_port = 463
  max_life = 24h 0m 0s
  max_renewable_life = 3650d
 }

其中,database_name规定了XIAOMI.TEST这个域的kerberos数据库地址;acl_file是同样的道理

3. 创建数据库

kdb5_util create -r XIAOMI.TEST -s
    Loading random data
    Initializing database '/var/kerberos/krb5kdc/XIAOMI.TEST/principal' for realm 'XIAOMI.TEST',
    master key name 'K/M@XIAOMI.TEST'
    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:

4. 创建并编辑acl文件,用于控制哪些账户可以通过kadmin登录,这些账户具有什么样的权限

touch kadm5.acl
vim kadm5.acl
    --> h_test@XIAOMI.TEST      *

这里添加了一个admin帐号(会在下文创建),星号表示具有所有权限

5. 在Kerberos数据库创建admin帐号/或者其他帐号

kadmin.local -r XIAOMI.TEST
addprinc -pw test h_test

请注意,如果krb5.conf配置了默认realm为XIAOMI.TEST就不需要指定-r了

这里指定密码创建h_test@XIAOMI.TEST的principal,后面的realm因为登录的是XIAOMI.TEST的db,所以就可以不指定

6. 启动Kerberos的daemon进程

krb5kdc -r XIAOMI.TEST --启动kdc server
kadmind -r XIAOMI.TEST --启动kadmin server

7. 使用kadmin.local操作数据库,见常用命令
8. 远程使用kadmin操作kerberos系统

使用刚才acl文件添加的具有所有权限的帐号h_test登录admin,指定realm,server,port,principal,password登录:

kadmin -r XIAOMI.TEST -s lg-hadoop-test.bj:748 -p h_test -w test
    Authenticating as principal h_test@XIAOMI.TEST with password.
    kadmin:  addprinc -pw rand h_rand
    WARNING: no policy specified for h_rand@XIAOMI.TEST; defaulting to no policy
    Principal "h_rand@XIAOMI.TEST" created.
    kadmin:

如上就是搭建配置kdc,创建db,配置acl,本地登录创建帐号,远程登录创建帐号等基本操作,这些就够用了。

常用命令

===For db admin===

只用kadmin.local或者kadmin命令管理kerberos数据库的操作命令:

add_principal 创建帐号,提示输入密码
alias:addprinc
-pw 不采用提示,指定字符串密码
-randkey 设置随机密码
addprinc -randkey h_rand

 

delete_principal 删除账户
alias:delprinc
-force 不需要提示的删除
delete_principal -force principal

 

change_password 修改密码
alias:cpw
-pw 不需要提示直接输入新密码
change_password -pwd newpasswd principal

 

ktadd 导出keytab文件
ktadd -k keytab principal --慎用,会改密码的
ktadd -k keytab -norandkey principal -- 在原有密码的基础上生成keytab

===For user===

kpasswd [principal] 改密码:-- 默认使用cache的principal

 

kinit 获得某个principal对应的tgt并cache
-l lifetime kinit -l 5h30m
-s start_time
-R 重新续约tgt

 

klist 查看帐号信息

基本常用的命令也就几个,更详细的可以参考MIT的Kerberos documention,见参考链接。

下一篇打算说说对Kerberos原理的理解,这是看了MIT经典对话后想了几天感觉想通了基本。

参考:http://web.mit.edu/kerberos/krb5-1.12/doc/index.html

[end]

  • Tutu

    这些是公司用的配置么?是的话公布出来不好吧?

    • Yx.Ac

      @Tutu,当然不是,:-) ,这里只是举的例子