Kerberos
一、Kerberos简介
Kerberos是一种基于对称密钥的身份认证协议,它作为一个独立的第三方的身份认证服务,可以为其它服务提供身份认证功能,且支持SSO(即客户端身份认证后,可以访问多个服务如HBase/HDFS等)。Kerberos协议主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据(ticket-granting ticket)访问多个服务,即SSO(Single Sign On)。由于Kerberos协议在每个Client和Service之间具有共享密钥,使得该协议具有相当的安全性。
(1)Kerberos是一种客户端/服务端架构。
(2)KDC:密钥分发中心(Key distribution Center),由三部分构成:Kerberos数据库、认证服务(Authentication service,AS)和票据授予服务(ticket-granting service,TGS)
(3)principal:主体,Kerberos中的身份标识称为主体。
(4)realm:域,确定了管理边界,所有主体均属于特定的Kerberos域。
(5)主体和域的信息存储在Kerberos数据库中。
(6)TGT:票据授予票据,AS认证成功后授予用户的一种特殊票据
二、安装配置Kerberos
1、下载安装
yum install krb5-server krb5-libs krb5-auth-dialog krb5-workstation -y
2、配置/etc/krb5.conf。服务基本配置
修改以下参数。Master和Worker(调用端)都需要配置,内容相同
default_realm:默认的realm。如EMR-QX9XE1IH
kdc:KDC 服务器的主机名或 IP 地址
admin_server:kadmind 服务器地址,默认与 kdc 相同
[domain_realm]:将域名映射到 realm域
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = EMR-QX9XE1IH
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
default_tgs_enctypes = des3-cbc-sha1
default_tkt_enctypes = des3-cbc-sha1
permitted_enctypes = des3-cbc-sha1
kdc_timeout = 3000
max_retries = 3
[realms]
EMR-QX9XE1IH = {
kdc = ?.?.194.147:88
admin_server = ?.?.194.147
kdc = 主?.?.192.94:88
}
[domain_realm]
# test.cn = EMR-QX9XE1IH
3、配置kdc.conf,仅Master节点。密钥分发中心
路径less /var/kerberos/krb5kdc/kdc.conf
[logging]
default = FILE:/data/emr/krb5/krb5libs.log
kdc = FILE:/data/emr/krb5/krb5kdc.log
admin_server = FILE:/data/emr/krb5/kadmin.log
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
EMR-QX9XE1IH = {
database_module = openldap_ldapconf
kadmind_port = 749
max_life = 12h 0m 0s
max_renewable_life = 7d 0h 0m 0s
supported_enctypes = des3-hmac-sha1:normal
acl_file = /var/kerberos/krb5kdc/kadm5.acl
}
[dbdefaults]
ldap_kerberos_container_dn = cn=Kerberos,dc=emr,dc=cloud,dc=tencent,dc=com
[dbmodules]
openldap_ldapconf = {
db_library = kldap
ldap_kdc_dn = "cn=krb5kdc,cn=Manager,dc=emr,dc=cloud,dc=tencent,dc=com"
ldap_kadmind_dn = "cn=krbadmin,cn=Manager,dc=emr,dc=cloud,dc=tencent,dc=com"
ldap_service_password_file = /root/ldap.stash
ldap_servers = ldapi:/// ldap://localhost:389
ldap_conns_per_server = 5
}
4、配置kadm5.acl:用于设置哪些用户具有管理Kerberos数据库的权限
路径:less /var/kerberos/krb5kdc/kadm5.acl
内容:*/admin@EMR-QX9XE1IH *
配置描述:
第一列表示主体名,此处代表名称匹配`*/admin@EMR-QX9XE1IH`
第二列表示权限,*代码全部权限,其它的话参考下面列表。小写字母代表授予权限,大写表示拒绝权限
权限 | 说明 |
a | 向KDC数据库添加用户 |
d | 从KDC数据库中删除用户 |
m | 修改KDC数据库中的用户 |
c | 修改KDC数据库中的principal(主体)密码 |
i | 查询数据库,列举principal(主体)信息 |
*|x | 以上所有权限 |
第三列为可选的,表示权限应用的目标实体,此处没有设置
三、Kerberos服务端操作
1、创建Kerberos数据库,需要设置管理员密码,创建成功会在/var/kerberos/krb5kdc/生成一些文件
如重新创建服务端,则先删除历史的某些文件
cd /var/kerberos/krb5kdc/
rm -rf principal*
第一次新建:在root用户下执行以下命令,需要设置密码
kdb5_util create -s -r EMR-QX9XE1IH
2、启动服务
krb5kdc:认证使用
kadmin:管理用户使用
chkconfig --level 35 krb5kdc on
chkconfig --level 35 kadmin on
service krb5kdc start
service kadmin start
3、创建Kerberos的管理员,需要输入密码
在Master的root用户执行
kadmin.local
添加管理员
addprinc admin/admin@EMR-QX9XE1IH
4、查看用户
listprincs
5、退出之前的登录
quit
6、用密码登录
kinit admin/admin
或 kinit admin/admin@EMR-QX9XE1IH
7、查看认证状态
klist
四、管理Kerberos用户
1、管理用户主体常用命令
操作 | 描述 | 示例 |
add_principal, addprinc, ank | add_principal:添加主体,多命令可操作 | add_principal -randkey test@EMR-QX9XE1IH |
cpw | 修改密码 | cpw test@EMR-QX9XE1IH |
delete_principal, delprinc | 删除主体 | delete_principal test@EMR-QX9XE1IH |
modify_principal, modprinc | 修改主体 | modify_principal test@EMR-QX9XE1IH |
rename_principal, renprinc | 重命名主体 | rename_principal test@EMR-QX9XE1IH test2@ABC.COM |
get_principal, getprinc | 获取主体查看详情 | get_principal test@EMR-QX9XE1IH |
list_principals, listprincs, get_principals, getprincs | 显示所有主体 | listprincs |
ktadd, xst | 导出条目到 keytab | xst -k /root/test.keytab test@EMR-QX9XE1IH |
? | 查看帮助 | ? |
2、创建Kerberos普通用户
(1)在Master的root用户下操作,删除普通用户的认证文件,psvmc.keytab相当于普通用户秘钥文件和密码的作用一样。
rm -rf /root/psvmc.keytab
hdfs文件在/user/kadmin/keytabs/
本地在/root/add_princals/certificate/
(2)登录到管理员账户,如在其他服务器,先进行kinit验证。
kadmin.local
(3)创建用户和验证文件
存在用户则先删除用户
delprinc psvmc/hadoop@EMR-QX9XE1IH
创建用户(带密码,使用时需要输入密码)
addprinc -pw zhangjian psvmc/hadoop@EMR-QX9XE1IH
创建用户(随机密码,只能keytab方式登录)
addprinc -randkey psvmc/hadoop@EMR-QX9XE1IH
生成秘钥文件(可以用keytab和密码登录)
ktadd -norandkey -k /root/psvmc.keytab psvmc/hadoop@EMR-QX9XE1IH
生成秘钥文件(只能用keytab登录)
ktadd -k /root/psvmc.keytab psvmc/hadoop@EMR-QX9XE1IH
退出
quit
(4)设置相应的组
chown root:root psvmc.keytab
cp psvmc.keytab /data/tools/bigdata/kerberos/
(5)验证
#方式1 用密码登录
kinit psvmc/hadoop
#方式2 用keytab登录
kinit -kt /root/psvmc.keytab psvmc/hadoop@EMR-QX9XE1IH
#查看认证状态
klist
五、Kerberos客户端操作
1、客户端安装krb5-level、krb5-workstation
yum install krb5-devel krb5-workstation -y
2、配置客户端。内容和Master相同,把服务端的配置拉取到本地
vi /etc/krb5.conf
3、用户登录
执行 kinit用户登录。登录过程就是客户端从KDC获取票据TGT的过程。
登录方式1:kinit psvmc/hadoop
登录方式2:先先把把服务端生成的密钥文件psvmc.keytab复制过来
kinit -kt /root/psvmc.keytab psvmc/hadoop@PSVMC.CN
3、查看认证状态
klist
4、其它常用命令
kinit用户登录。登录过程就是客户端从KDC获取票据TGT的过程,登陆成功后票据被缓存在本地,建立了安全会话。
kdestroy用于退出登录,即销毁缓存中票据。
kpasswd用于修改用户(主体)口令。
六、Hadoop配置
1、core-site.xml
<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
2、hdfs-site.xml
<!-- kerberos start -->
<!-- namenode -->
<property>
<name>dfs.namenode.keytab.file</name>
<value>/data/tools/bigdata/kerberos/hadoop.keytab</value>
</property>
<property>
<name>dfs.namenode.kerberos.principal</name>
<value>root/hadoop@PSVMC.CN</value>
</property>
<property>
<name>dfs.namenode.kerberos.internal.spnego.principal</name>
<value>root/hadoop@PSVMC.CN</value>
</property>
<property>
<name>dfs.web.authentication.kerberos.principal</name>
<value>root/hadoop@PSVMC.CN</value>
</property>
<property>
<name>dfs.web.authentication.kerberos.keytab</name>
<value>/data/tools/bigdata/kerberos/hadoop.keytab</value>
</property>
<!-- datanode -->
<property>
<name>dfs.datanode.keytab.file</name>
<value>/data/tools/bigdata/kerberos/hadoop.keytab</value>
</property>
<property>
<name>dfs.datanode.kerberos.principal</name>
<value>/data/tools/bigdata/kerberos/hadoop.keytab</value>
</property>
<property>
<name>dfs.http.policy</name>
<value>HTTPS_ONLY</value>
</property>
<property>
<name>dfs.data.transfer.protection</name>
<value>integrity</value>
</property>
<property>
<name>dfs.block.access.token.enable</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.data.dir.perm</name>
<value>700</value>
</property>
<!-- journalnode -->
<property>
<name>dfs.journalnode.keytab.file</name>
<value>/data/tools/bigdata/kerberos/hadoop.keytab</value>
</property>
<property>
<name>dfs.journalnode.kerberos.principal</name>
<value>root/hadoop@PSVMC.CN</value>
</property>
<property>
<name>dfs.journalnode.kerberos.internal.spnego.principal</name>
<value>root/hadoop@PSVMC.CN</value>
</property>
<!-- kerberos end-->
3、hadoop_env.sh
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=${JAVA_HOME}/lib -Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.krb5.realm=PSVMC.CN -Djava.security.krb5.kdc=hadoop01:88"
4、ssl-server.xml
keytool -keystore /etc/security/keytab/keystore -alias jetty -genkey -keyalg RSA
5、修改访问权
chown -R root:root /etc/security/keytab/keystore
chmod 660 /etc/security/keytab/keystore
6、分发
ha-fenfa.sh /etc/security/keytab/keystore
7、ssl-server.xml
<!-- SSL密钥库路径 -->
<property>
<name>ssl.server.keystore.location</name>
<value>/etc/security/keytab/keystore</value>
</property>
<!-- SSL密钥库密码 -->
<property>
<name>ssl.server.keystore.password</name>
<value>123456</value>
</property>
<!-- SSL可信任密钥库路径 -->
<property>
<name>ssl.server.truststore.location</name>
<value>/etc/security/keytab/keystore</value>
</property>
<!-- SSL密钥库中密钥的密码 -->
<property>
<name>ssl.server.keystore.keypassword</name>
<value>123456</value>
</property>
<!-- SSL可信任密钥库密码 -->
<property>
<name>ssl.server.truststore.password</name>
<value>123456</value>
</property>
原文链接:https://www.psvmc.cn/article/2022-11-08-bigdata-kerberos-centos.html