安装配置 Kerberos,并以 Zookeeper 为案例使用 Kerberos

1. 搭建 Kerberos

1.1. 环境

  • CentOS 7.2

1.2. 安装

1.2.1. 安装服务

$ yum install krb5-server

在安装完上述的软件之后,会生成配置文件/etc/krb5.conf/var/kerberos/krb5kdc/kdc.conf

1.2.3. 修改配置

kerberos 服务涉及到以下三个配置文件:

/var/kerberos/krb5kdc/kdc.conf
/var/kerberos/krb5kdc/kadm5.acl
/etc/krb5.conf

  • 修改 kdc.conf
    kdc 服务的配置信息
$ vi /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 EXAMPLE.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 camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
 }
 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 = 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是 realm 名,kerberos 可以支持多个 realm 并且大小写敏感。

这里简单介绍一下 realm,realm 充当了 kerberos 与应用安全数据间的桥梁或者连接器。当对用户执行认证(登录)和鉴权(访问控制)时,kerberos 会从应用配置的 realm 中获取相应的安全数据(如用户、角色、权限)进行比较以确定用户身份以及验证用户操作是否合法。
当配置 kerberos 时,你必须至少指定一个 realm ,用于认证和(或)授权。

  • 修改 kadm5.acl
    Kadmin 管理的配置信息
$ vi /var/kerberos/krb5kdc/kadm5.acl
*/admin@HADOOP.COM      *

其实根据文件名,大家也能猜出来该文件内容的内容是 kadmin 管理帐号的acl。

Kadmin daemon 会使用该文件来管理对 kerberos database 的访问权限。
对于那些可能会对 pincipal 产生影响的操作,acl 文件也能控制哪些principal能操作哪些其他pricipals。

*/admin@HADOOP.COM代表在 HADOOP.COM 域下 admin 组下的用户拥有所有权限。

  • 修改 krb5.conf
    Kerberos 的配置信息。例如 kdc 的位置,kadmin 的 realms 等
$ vi /etc/krb5.conf
# Configuration snippets may be placed in this directory as well
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 = /etc/pki/tls/certs/ca-bundle.crt
 default_realm = HADOOP.COM
 default_ccache_name = KEYRING:persistent:%{uid}

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

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

补充:
kdc:代表要 kdc 服务的地址。格式是机器:端口,端口可以不写默认88

1.2.4. 创建/初始化kerberos database

$ kdb5_util create -s -r HADOOP.COM

-s 表示生成 stash file,并在其中存储 master server key(krb5kdc)
-r 来指定为初始化哪一个 realm

补充:
该命令会在 /var/kerberos/krb5kdc/ 目录下创建 principal 数据库。

如果遇到数据库已经存在的提示,可以把 /var/kerberos/krb5kdc/ 目录下的 principal 的相关文件都删除掉。默认的数据库名字都是 principal,可以使用 -d 指定数据库名字。这里我们使用默认数据库名。

1.2.5. 添加kerberos管理员

关于 kerberos 的管理,可以使用 kadmin.local 或 kadmin,至于使用哪个,取决于账户和访问权限:

  • 如果有访问 kdc 服务器的 root 权限,但是没有 kerberos admin 账户,使用 kadmin.local。本地访问的意思。
  • 如果没有访问 kdc 服务器的 root 权限,但是有 kerberos admin 账户,使用 kadmin。远程访问的意思。

根据kadm5.acl文件配置,由于指定了 admin 用户组下所有用户都具有所有权限,这里用户名可以随便使用。

为了方便起见,这里用户名也使用了 admin

$ kadmin.local -q "addprinc admin/admin"

1.3. 启动 kerberos

$ systemctl start krb5kdc
$ systemctl start kadmin

1.4. 测试 kerberos

1.4.1. 安装 kerberos 客户端

$ yum install krb5-workstation

1.4.2. 创建测试 principal 并生成 keytab

$ kadmin.local -q "addprinc test/admin"
$ kadmin.local -q "ktadd -k /tmp/test.keytab test/admin"

1.4.3. 销毁 ticket

$ kdestroy

1.4.5. 更新 ticket

使用密码:

$ kinit test/admin

或使用 keytab:

$ kinit -kt /tmp/test.keytab test/admin

1.4.6. 查看当前 ticket

$ klist

2. 配置 zookeeper 服务端

2.1. 创建 zookeeper 的 principal

$ kadmin.local -q "addprinc -randkey zookeeper/localhost@HADOOP.COM"
$ kadmin.local -q "ktadd -k zookeeper.keytab zookeeper/localhost@HADOOP.COM"
# 移动keytab到zookeeper的配置文件夹中,方便管理
$ mv zookeeper.keytab /usr/local/zookeeper/conf

2.2. 修改 zoo.cfg

在 zoo.cfg 文件中,添加以下内容:

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000

2.3. 创建 jass 文件

在 zk 的 conf 目录下创建 jass.conf 文件

Server {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab = true
  keyTab = "/usr/local/zookeeper/conf/zookeeper.keytab"
  storeKey = true
  useTicketCache = false
  principal = "zookeeper/localhost@JAVACHEN.COM";
};

特别注意下最后两行的分号,没有的话会解析不了该 jass 文件

2.4. 开启kerberos

在开启 kerberos 之前,我们先看下 zk 启动脚本装载 jvm 过程:

  1. 根据 zk 启动脚本 zkServer.sh,可以发现启动 jvm 之前,会通过执行 zkEnv.sh 文件,设置一些环境变量。
  2. 接着获取 SERVER_JVMFLAGS 变量,并将其追加到 JVMFLAGS 变量中。
  3. 最后会在启动jvm过程中,将 JVMFLAGS 变量添加 jvm 参数中。

根据上述启动流程,我们可以将 java 配置 jass 文件,这个步骤通过 zkEnv.sh 生效,并且设置到 JVMFLAGS 这个变量中。

我们通过 zkEnv.sh 又可以发现,zkEnv.sh 会检测 conf 中是否存在java.env 文件,并执行他。

这是我们便可以在 conf 中创建 java.env 文件,并写入以下内容:

export JVMFLAGS="-Djava.security.auth.login.config=/usr/local/zookeepe/conf/jaas.conf"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值