使用Docker快速搭建Kerberos環(huán)境
簡(jiǎn)介
Kerberos認證在大數據場(chǎng)景下用的比較多,特別是在Hadoop生態(tài)下,認證基本用的都是Kerberos認證。一般來(lái)講Kerberos認證相對于其他方式的認證安全很多,同樣的認證的時(shí)候性能應該差一點(diǎn)。
國內某著(zhù)名大數據平臺MapReduce服務(wù),也叫做云原生數據湖MRS(MapReduce Service),將大數據相關(guān)的軟件做了整合,其中有部分軟件,比如:Redis、Clickhouse等開(kāi)源社區并沒(méi)有支持Kerberos認證的軟件,華為自己做了Kerberos認證。
本文簡(jiǎn)單介紹怎快快速搭建Kerberos認證,做一些簡(jiǎn)單的測試。后續課程會(huì )說(shuō)明如何使用代碼進(jìn)行Kerberos認證。
前提條件
- 需要在Linux環(huán)境上安裝Docker,對于怎么安裝Docker,本文不做介紹。
- 準備好安裝目錄,比如:
/home/zeekling/project/ling/dockerFiles/kerberos,
環(huán)境搭建
步驟一:添加服務(wù)端配置
在準備好的路徑下面新建子文件夾server用于存放Kerberos服務(wù)相關(guān)的配置文件。在server下面新建文件新建krb5.conf,在里面寫(xiě)入下面內容:
[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,可以按照實(shí)際需要修改。
在server下面新建文件新建kadm5.acl,在里面寫(xiě)入下面內容:
*/admin@TEST.COM *
步驟二:新增客戶(hù)端配置
在準備好的路徑下面新增client文件夾,在client下面新建文件新建krb5.conf,在里面寫(xiě)入下面內容:
[[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啟動(dòng)腳本
在Docker啟動(dòng)的時(shí)候,需要同步創(chuàng )建admin以及需要使用的業(yè)務(wù)用戶(hù)。
在準備好的目錄下面新建文件start.sh,寫(xiě)入下面內容:
#!/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
}
main
以上用戶(hù)創(chuàng )建了admin、cli、server/hadoop.test.com用戶(hù),并且將后面兩個(gè)用戶(hù)的keytab導出到/app下面,并且在重啟Docker的時(shí)候可以重新下載Keytab。
步驟四:supervisord配置文件
在準備好的目錄下面新增supervisord.conf,寫(xiě)入下面內容:
[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創(chuàng )建
在準備好的目錄下面新建DockerFile,寫(xiě)入下面內容:
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鏡像
在已經(jīng)準備好的目錄下面執行下面命令打包鏡像:
docker build -t kerberos:1.0.0 ./
步驟七:?jiǎn)?dòng)Docker鏡像
使用下面命令啟動(dòng)Kerberos相關(guān)的鏡像:
docker run -d --name=kerberos kerberos:1.0.0
啟動(dòng)日志 如下:

步驟八:在鏡像外面訪(fǎng)問(wèn)Kerbero服務(wù)
- 新建文件夾
/home/zeekling/project/ling/kerberosTest/client,將步驟二中客戶(hù)端配置拷貝到新建的文件夾下面。 - 將客戶(hù)端配置
krb5.conf加到環(huán)境變量中:export KRB5_CONFIG=/home/zeekling/project/ling/kerberosTest/client/krb5.conf kinit cli用戶(hù),并且輸入密碼,即可得到:

評論