简介
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-serve
}
其中TEST.COM为域名,krb5-kdc-server为kdc对应的域名,也可以使用ip。
步骤三:Docker启动脚本
在Docker启动的时候,需要同步创建admin以及需要使用的业务用户。
在准备好的目录下面新建文件`start.sh`,写入下面内容:
代码语言:shell复制#!/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_use
/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 use
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,写入下面内容:
代码语言:shell复制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镜像
在已经准备好的目录下面执行下面命令打包镜像:
代码语言:shell复制docker build -t kerberos:1.0.0 ./
步骤七:启动Docker镜像
使用下面命令启动Kerberos相关的镜像:
代码语言:shell复制docker run -d --name=kerberos kerberos:1.0.0
步骤八:在镜像外面访问Kerbero服务
- 新建文件夹/home/zeekling/project/ling/kerberosTest/client,将步骤二中客户端配置拷贝到新建的文件夹下面。
- 将客户端配置krb5.conf`加到环境变量中:
export KRB5_CONFIG=/home/zeekling/project/ling/kerberosTest/client/krb5.conf
- kinit cli用户,并且输入密码