阅读原文,体验更佳。

概要

我在Linux服务器上安装了MIT Kerberos server,然后在Cloudera Manager上通过Web UI向导进行启用Kerberos的初始化。 过程执行失败了,刷新CLoudera Manager的首页后发现许多Configuration Issues,提示说各个服务的Kerberos Credentials是missing的状态。

然而通过Web UI上的Generate Missing Credentials并不能顺利生成Credential文件。 查看log后发现是后台执行脚本时所需要的keytab不存在,这个keytab是给CDH Hadoop各个组件使用的。 生成这些keytab则是需要由拥有admin权限的Kerberos user(通过kadmin -q "addprinc..."命令生成)来生成。

下面记录一下排查错误的步骤。

搜索和错误相关的日志

进入Cloudera Manager(该环境版本为V6.2.1),依次进入Diagnostic --> Logs。

由于是报错说找不到credentials,所以直缩小定时间范围,指定关键字搜索。

可以看到是Cloudera Manager的server执行此脚本 – /opt/cloudera/cm/bin/gen_credentials.sh 失败导致生成不了各个Hadoop service所需的Kerberos的credential。

而脚本出错的地方在于没有成功生成keytab文件。

调查脚本出错的原因

于是到Cloudera Manager的server上找此脚本看看。

cat /opt/cloudera/cm/bin/gen_credentials.sh 
#!/usr/bin/env bash

# Copyright (c) 2011 Cloudera, Inc. All rights reserved.

set -e
set -x

# Explicitly add RHEL5/6, SLES11/12 locations to path
export PATH=/usr/kerberos/bin:/usr/kerberos/sbin:/usr/lib/mit/sbin:/usr/sbin:/usr/lib/mit/bin:/usr/bin:$PATH

CMF_REALM=${CMF_PRINCIPAL##*\@}

KEYTAB_OUT=$1
PRINC=$2
MAX_RENEW_LIFE=$3

KADMIN="kadmin -k -t $CMF_KEYTAB_FILE -p $CMF_PRINCIPAL -r $CMF_REALM"
RENEW_ARG=""
if [ $MAX_RENEW_LIFE -gt 0 ]; thenRENEW_ARG="-maxrenewlife \"$MAX_RENEW_LIFE sec\""
fi

if [ -z "$KRB5_CONFIG" ]; thenecho "Using system default krb5.conf path."
elseecho "Using custom config path '$KRB5_CONFIG', contents below:"cat $KRB5_CONFIG
fi

$KADMIN -q "addprinc $RENEW_ARG -randkey $PRINC"

if [ $MAX_RENEW_LIFE -gt 0 ]; thenRENEW_LIFETIME=`$KADMIN -q "getprinc -terse $PRINC" | tail -1 | cut -f 12`if [ $RENEW_LIFETIME -eq 0 ]; thenecho "Unable to set maxrenewlife"exit 1fi
fi

$KADMIN -q "xst -k $KEYTAB_OUT $PRINC"
chmod 600 $KEYTAB_OUT 

从上面的脚本可以看出,生成各个Hadoop service用的Kerberros的keytab,需要用到CMF_KEYTAB_FILE, 而这个文件是根据我在Cloudera Manager的WebUI上输入的Kerberos Account Manager Credentials生成的。

我试着在Cloudera Manager的Web-UI上重新输入了一次在kdc server上手动创建的kdc admin账号信息,可是还是不行。

Web-UI上的入口:Cloudera Manager首页 --> 最上方的Administration --> Security --> Kerberos Credentials --> Import Kerberos Account Manager Credentials

可以确定的是kdc admin的账号信息没有错误。

于是对比了一下kdc server的配置文件和正常的kdc server的配置文件,发现缺少了logging部分。于是把logging部分补充上。

以下内容在kdc server的服务器上执行:

% cat /var/kerberos/krb5kdc/kdc.conf 
[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 SHOUNENG.COM = {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 supported_enctypes = des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal des-cbc-crc:v4 des-cbc-crc:afs3max_renewable_life = 30mmaster_key_type = des3-hmac-sha1acl_file = /var/kerberos/krb5kdc/kadm5.acldict_file = /usr/share/dict/wordsmax_life = 30dmax_renewable_life = 31d#removed supported_enctypes aes256-cts:normal and aes128-cts:normalsupported_enctypes = des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal des-cbc-crc:v4 des-cbc-crc:afs3
 }

# 以下logging部分为补充的内容
[logging]
admin_server = FILE:/var/log/kdc_admin.log
kdc = FILE:/var/log/kdc.log 

打开了logging之后,重新尝试创建Hadoop的service的credential,并观察kdc server的日志,发现如下错误:

% sed -n '1,50p' /var/log/kdc_admin.log 
Oct 15 23:41:13 host-10-17-100-90 kadmind[19124](info): setting up network...
kadmind: setsockopt(10,IPV6_V6ONLY,1) worked
kadmind: setsockopt(12,IPV6_V6ONLY,1) worked
kadmind: setsockopt(14,IPV6_V6ONLY,1) worked
Oct 15 23:41:13 host-10-17-100-90 kadmind[19124](info): set up 6 sockets
Oct 15 23:41:13 host-10-17-100-90 kadmind[19124](Error): /var/kerberos/krb5kdc/kadm5.acl: syntax error at line 1 <*/admin@SHOUNENG.COM*...>
Oct 15 23:41:13 host-10-17-100-90 kadmind[19125](info): Seeding random number generator
Oct 15 23:41:13 host-10-17-100-90 kadmind[19125](info): starting
Oct 15 23:42:24 host-10-17-100-90 kadmind[19125](Notice): Request: kadm5_init, root/admin@SHOUNENG.COM, success, client=root/admin@SHOUNENG.COM, service=kadmin/host-10-17-100-90.coe.cloudera.com@SHOUNENG.COM, addr=10.17.101.160, vers=4, flavor=6
Oct 15 23:42:29 host-10-17-100-90 kadmind[19125](Notice): Unauthorized request: kadm5_get_principals, *, client=root/admin@SHOUNENG.COM, service=kadmin/host-10-17-100-90.coe.cloudera.com@SHOUNENG.COM, addr=10.17.101.160
Oct 15 23:42:46 host-10-17-100-90 kadmind[19125](Notice): Unauthorized request: kadm5_get_principals, *, client=root/admin@SHOUNENG.COM, service=kadmin/host-10-17-100-90.coe.cloudera.com@SHOUNENG.COM, addr=10.17.101.160
Oct 15 23:43:07 host-10-17-100-90 kadmind[19125](Notice): Unauthorized request: kadm5_get_policy, default, client=root/admin@SHOUNENG.COM, service=kadmin/host-10-17-100-90.coe.cloudera.com@SHOUNENG.COM, addr=10.17.101.160
Oct 15 23:43:07 host-10-17-100-90 kadmind[19125](Notice): Unauthorized request: kadm5_create_principal, zyx1@ZYX.COM, client=root/admin@SHOUNENG.COM, service=kadmin/host-10-17-100-90.coe.cloudera.com@SHOUNENG.COM, addr=10.17.101.160 

我看到有个语法错误:

kadmind[19124](Error): /var/kerberos/krb5kdc/kadm5.acl: syntax error at line 1 <*/admin@SHOUNENG.COM*...> 

于是对比正常的kdc server,发现*/admin@SHOUNENG.COM*应该改成*/admin@SHOUNENG.COM *(少了一个空格)。

修改之后重新启动kdc的service,再重新创建credentials就成功了。接下来我将给各位同学划分一张学习计划表!

学习计划

那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:

阶段一:初级网络安全工程师

接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。

综合薪资区间6k~15k

1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?

阶段二:中级or高级网络安全工程师(看自己能力)

综合薪资区间15k~30k

7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。

零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;

Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完

用Python编写漏洞的exp,然后写一个简单的网络爬虫

PHP基本语法学习并书写一个简单的博客系统

熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)

了解Bootstrap的布局或者CSS。

阶段三:顶级网络安全工程师

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

学习资料分享

当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐