使用Docker创建Kerberos认证中心
使用Docker创建Kerberos认证中心
使用Docker构建Kerberos KDC中心以及客户端,此中心可供Hadoop等集群使用。
1、构建KDC中心
我们此处使用Dockerfile文件直接构建需要的镜像:
FROM centos:7
RUN yum install -y krb5-server krb5-libs krb5-auth-dialog krb5-workstation
RUN echo -e "[kdcdefaults]\n"\
" kdc_ports = 88\n"\
" kdc_tcp_ports = 88\n"\
"\n"\
"[realms]\n"\
" KRBKDC.COM = {\n"\
" #master_key_type = aes256-cts\n"\
" acl_file = /var/kerberos/krb5kdc/kadm5.acl\n"\
" dict_file = /usr/share/dict/words\n"\
" admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab\n"\
" max_renewable_life = 7d\n"\
" 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\n"\
" }\n"\
> /var/kerberos/krb5kdc/kdc.conf
RUN echo -e "includedir /etc/krb5.conf.d/\n"\
"\n"\
"[logging]\n"\
" default = FILE:/var/log/krb5libs.log\n"\
" kdc = FILE:/var/log/krb5kdc.log\n"\
" admin_server = FILE:/var/log/kadmind.log\n"\
"\n"\
"[libdefaults]\n"\
" dns_lookup_kdc = false\n"\
" dns_lookup_realm = false\n"\
" ticket_lifetime = 24h\n"\
" renew_lifetime = 7d\n"\
" forwardable = true\n"\
" default_realm = KRBKDC.COM\n"\
" udp_preference_limit = 1\n"\
"[realms]\n"\
" KRBKDC.COM = {\n"\
" kdc = kdc1\n"\
" admin_server = kdc1\n"\
" }\n"\
"[domain_realm]\n"\
" .krbkdc.com = KRBKDC.COM\n"\
" krbkdc.com = KRBKDC.COM\n"\
> /etc/krb5.conf
RUN sh -c '/bin/echo -e "kdcAdmin\nkdcAdmin\n" | /usr/sbin/kdb5_util create -s '
RUN sh -c '/bin/echo -e "kdcAdmin\nkdcAdmin\n" | /usr/sbin/kadmin.local -q "addprinc admin/admin" '
RUN echo -e "admin/admin@KRBKDC.COM *" > /var/kerberos/krb5kdc/kadm5.acl
RUN chkconfig krb5kdc on
RUN chkconfig kadmin on
其中default_realm可以根据需要改成自己的名字。
- [realms]内,KRBKDC.COM可根据需要修改。kdc1需要添加到/etc/hosts文件中,
- RUN sh -c '/bin/echo -e “kdcAdmin\nkdcAdmin\n” | /usr/sbin/kdb5_util create -s ’
RUN sh -c '/bin/echo -e “kdcAdmin\nkdcAdmin\n” | /usr/sbin/kadmin.local -q “addprinc admin/admin” ’
此两句中,kdcAdmin是后面要创建的密码,用户可自定义。
第一句是为了创建数据库,第二句为了创建管理员用户。 - RUN echo -e “admin/admin@KRBKDC.COM *” > /var/kerberos/krb5kdc/kadm5.acl
此句是给admin管理员用户赋权,让它可以创建其它用户
以上内容写入Dockerfile后,构建镜像:
docker build -t krb-kdc:1.0 .
创建容器:
docker run --privileged=true -d --name="my_kdc" krb-kdc:1.0
启动完成后,进入容器:
docker exec -it my_kdc bash
在容器内启动kerberos相关:
systemctl start kadmin krb5kdc
使用kadmin进入KDC:
kadmin.local
之后,创建用户:
addprinc -randkey hadoopone/master@KRBKDC.COM
生成keytab文件:
xst -k hadoopone.keytab hadoopone/master@KRBKDC.COM
当然,创建用户这一步也可以放到客户端去完成,只要能使用admin连接并进入KDC即可。
2、创建Kerberos客户端client
FROM centos:7
RUN yum install -y krb5-workstation krb5-libs krb5-auth-dialog
RUN echo -e "includedir /etc/krb5.conf.d/\n"\
"\n"\
"[logging]\n"\
" default = FILE:/var/log/krb5libs.log\n"\
" kdc = FILE:/var/log/krb5kdc.log\n"\
" admin_server = FILE:/var/log/kadmind.log\n"\
"\n"\
"[libdefaults]\n"\
" dns_lookup_kdc = false\n"\
" dns_lookup_realm = false\n"\
" ticket_lifetime = 24h\n"\
" renew_lifetime = 7d\n"\
" forwardable = true\n"\
" default_realm = KRBKDC.COM\n"\
" udp_preference_limit = 1\n"\
"[realms]\n"\
" KRBKDC.COM = {\n"\
" kdc = kdc1\n"\
" admin_server = kdc1\n"\
" }\n"\
"[domain_realm]\n"\
" .krbkdc.com = KRBKDC.COM\n"\
" krbkdc.com = KRBKDC.COM\n"\
> /etc/krb5.conf
CMD ["/usr/sbin/init"]
将内容写入Dockerfile,注意以下几项:
- realms与domain_realm 内需要与KDC相对应
- 创建并启动容器后,需要将kdc的hostname写入/etc/hosts
创建容器:
docker run --privileged=true -d --name="my_krb_agent" krb-agent:1.0
进入容器后,可以将KDC的keytab文件取过来使用(可以使用挂卷、docker cp 等方式,此处不再赘述),也可以直接尝试直接使用admin进入KDC,在客户端容器内生成
客户端认证方式举例:
- kinit admin/admin
- kinit -kt /xx/xx/admin.keytab admin/admin
使用以上任一一种方式认证之后,可使用kadmin进入管理员界面。
删除当前的认证的缓存
kdestroy
查看ticket是否是renewable
klist