前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Docker快速搭建Kerberos环境

使用Docker快速搭建Kerberos环境

作者头像
zeekling
发布2022-08-26 19:22:25
1.2K0
发布2022-08-26 19:22:25
举报

简介

Kerberos认证在大数据场景下用的比较多,特别是在Hadoop生态下,认证基本用的都是Kerberos认证。一般来讲Kerberos认证相对于其他方式的认证安全很多,同样的认证的时候性能应该差一点。

国内某著名大数据平台MapReduce服务,也叫做云原生数据湖MRS(MapReduce Service),将大数据相关的软件做了整合,其中有部分软件,比如:Redis、Clickhouse等开源社区并没有支持Kerberos认证的软件,华为自己做了Kerberos认证。

本文简单介绍怎快快速搭建Kerberos认证,做一些简单的测试。后续课程会说明如何使用代码进行Kerberos认证。

前提条件

  • 需要在Linux环境上安装Docker,对于怎么安装Docker,本文不做介绍。
  • 准备好安装目录,比如:/home/zeekling/project/ling/dockerFiles/kerberos,

环境搭建

步骤一:添加服务端配置

在准备好的路径下面新建子文件夹server用于存放Kerberos服务相关的配置文件。在server下面新建文件新建krb5.conf,在里面写入下面内容:

代码语言:javascript
复制
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
TEST.COM = {
  #master_key_type = aes256-cts
  acl_file = /etc/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/krb5kdc/kadm5.keytab
  max_renewable_life = 7d 0h 0m 0s
  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
}

其中TEST.COM为Kerberos的域名。kdc的端口为88,可以按照实际需要修改。

server下面新建文件新建kadm5.acl,在里面写入下面内容:

代码语言:javascript
复制
*/admin@TEST.COM    *

步骤二:新增客户端配置

在准备好的路径下面新增client文件夹,在client下面新建文件新建krb5.conf,在里面写入下面内容:

代码语言:javascript
复制
[[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = TEST.COM
default_ccache_name = FILE:/tmp/krb5cc_cli_%{uid}
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true

[realms]
TEST.COM = {
  kdc = krb5-kdc-server:88
  admin_server = krb5-kdc-server
}

其中TEST.COM为域名,krb5-kdc-server为kdc对应的域名,也可以使用ip。

步骤三:Docker启动脚本

在Docker启动的时候,需要同步创建admin以及需要使用的业务用户。

在准备好的目录下面新建文件start.sh,写入下面内容:

代码语言:javascript
复制
#!/bin/bash
FQDN="test.com"
ADMIN="admin"
PASS="Admin12!"
KRB5_KTNAME=/etc/admin.keytab
cat /etc/hosts
echo "hostname: ${FQDN}"
inited="/app/inited"
function init_user() {
	if [ -f "${inited}" ];then
		echo "user inited"
	        kadmin.local -q "xst -k /app/hadoop.keytab -norandkey server/hadoop.${FQDN}"
	        kadmin.local -q "xst -k /app/cli.keytab -norandkey cli"
		return;
	fi
	echo "begin init user"
	# create kerberos database
	echo -e "${PASS}\n${PASS}" | kdb5_util create -s
	# create admin
	echo -e "${PASS}\n${PASS}" | kadmin.local -q "addprinc ${ADMIN}/admin"
	# create hadoop
	echo -e "${PASS}\n${PASS}" | kadmin.local -q "addprinc cli"
	echo -e "${PASS}\n${PASS}" | kadmin.local -q "addprinc  server/hadoop.${FQDN}"
	kadmin.local -q "ktadd -norandkey -k ${KRB5_KTNAME} cli"
	kadmin.local -q "ktadd -norandkey -k ${KRB5_KTNAME} server/hadoop.${FQDN}"
	kadmin.local -q "xst -k /app/hadoop.keytab -norandkey server/hadoop.${FQDN}"
	kadmin.local -q "xst -k /app/cli.keytab -norandkey cli"
	touch "${inited}"
	echo "user inite success"
}
function main() {
	init_user
	/usr/local/bin/supervisord -n -c /etc/supervisord.conf
}

以上用户创建了admin、cli、server/hadoop.test.com用户,并且将后面两个用户的keytab导出到/app下面,并且在重启Docker的时候可以重新下载Keytab。

步骤四:supervisord配置文件

在准备好的目录下面新增supervisord.conf,写入下面内容:

代码语言:javascript
复制
[supervisord]
logfile=/var/log/supervisord/supervisord.log    ; supervisord log file
logfile_maxbytes=50MB                           ; maximum size of logfile before rotation
logfile_backups=10                              ; number of backed up logfiles
loglevel=error                                  ; info, debug, warn, trace
pidfile=/var/run/supervisord.pid                ; pidfile location
nodaemon=false                                  ; run supervisord as a daemon
minfds=1024                                     ; number of startup file descriptors
minprocs=200                                    ; number of process descriptors
user=root                                       ; default user
childlogdir=/var/log/supervisord/               ; where child log files will live
[program:krb5-kdc]
command=service krb5-kdc start
autostart=true
autorestart=true
[program:krb5-admin-server]
command=service krb5-admin-server start
autostart=true
autorestart=true
[supervisorctl]

步骤五:DockerFile创建

在准备好的目录下面新建DockerFile,写入下面内容:

代码语言:javascript
复制
FROM ubuntu:xenial
ENV DEBIAN_FRONTEND noninteractive
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt clean
RUN apt update
RUN apt install -y ntp python-dev python-pip python-wheel python-setuptools python-pkg-resources krb5-admin-server krb5-kdc
RUN apt install vim -y
RUN rm -rf /var/lib/apt/lists/*
RUN mkdir -p /var/log/supervisord/
RUN mkdir /app/
RUN pip install supervisor==4.2.4
COPY ./server/krb5.conf /etc/krb5kdc/kdc.conf
COPY ./server/kadm5.acl /etc/krb5kdc/kadm5.acl
COPY ./client/krb5.conf /etc/krb5.conf
COPY ./start.sh /app/start.sh
COPY ./supervisord.conf /etc/supervisord.conf
WORKDIR /app
CMD ["/bin/bash", "/app/start.sh"]

步骤六:编译打包Kerberos镜像

在已经准备好的目录下面执行下面命令打包镜像:

代码语言:javascript
复制
docker build -t kerberos:1.0.0 ./

步骤七:启动Docker镜像

使用下面命令启动Kerberos相关的镜像:

代码语言:javascript
复制
docker run -d --name=kerberos kerberos:1.0.0

启动日志 如下:

image.png
image.png

步骤八:在镜像外面访问Kerbero服务

  • 新建文件夹/home/zeekling/project/ling/kerberosTest/client,将步骤二中客户端配置拷贝到新建的文件夹下面。
  • 将客户端配置krb5.conf加到环境变量中:export KRB5_CONFIG=/home/zeekling/project/ling/kerberosTest/client/krb5.conf
  • kinit cli用户,并且输入密码,即可得到:
image.png
image.png
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022.07.16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 前提条件
  • 环境搭建
    • 步骤一:添加服务端配置
      • 步骤二:新增客户端配置
        • 步骤三:Docker启动脚本
          • 步骤四:supervisord配置文件
            • 步骤五:DockerFile创建
              • 步骤六:编译打包Kerberos镜像
                • 步骤七:启动Docker镜像
                  • 步骤八:在镜像外面访问Kerbero服务
                  相关产品与服务
                  容器镜像服务
                  容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档