Kerberos(一) 安装
1、服务器基本信息
操作系统:centos7
数量:2
主机名映射关系
IP | hostname | server |
192.168.4.50 | manager1 | Kerberos server(kdc) |
192.168.0.230 | yjt | Kerberos client |
2、安装ntp服务
3、安装kerber
3.1、安装
server端:
# yum -y install krb5-libs krb5-workstation krb5-server
client端
# yum -y install krb5-devel krb5-workstation
如果想源码编译安装,可下载:https://kerberos.org/dist/index.html
配置kerberos server 主要修改三个配置文件,如下:
(1) /etc/krb5.conf
(2) /var/kerberos/krb5kdc/kdc.conf
(3) /var/kerberos/krb5kdc/kadm5.acl
3.2、配置krb5.conf文件
修改server端上面的krb5.conf文件
# cat /etc/krb5.conf
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
default_realm = EXAMPLE.COM
default_ccache_name = KEYRING:persistent:%{uid}
[realms]
EXAMPLE.COM = {
kdc = kerberos.example.com
admin_server = kerberos.example.com
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
#以上是默认的文件信息。
配置解释:
[logging] 这个组里面配置的是一些与日志存放路径相关的信息。
default: 用于配置krb5libs日志存放路径
kdc: 用于配置krb5kdc日志存放路径
admin_server: 用于配置kadmin服务日志存放路径
[libdefaults] 在使用Kerberos时使用的默认值。
dns_lookup_realm : 与dns参数有关,猜测用于域名解析,默认是false,当设置为true时,dns参数才起作用,有关dns参数获取其他参数可以查看官方文档。
ticket_lifetime: 获取到的票据存活时间,也就是该票据可以用多久,默认是1天
renew_lifetime:票据可更新的时间,也就是说该票据可以延迟到期的天数。默认是7天
forwardable:票据是否可以被kdc转发, 默认是true。
rdns :在进行dns解析的时候,正反向都可以,默认是true,如果dns_canonicalize_hostname参数被设置为false,那么rdns这个参数将无效。
default_realm:默认的领域,当客户端在连接或者获取主体的时候,当没有输入领域的时候,该值为默认值(列如:使用kinit admin/admin 获取主体的凭证时,没有输入领域,而传到kdc服务器的时候,会变成 admin/admin@EXAMPLE.COM ),这个值需要在[realms]中定义,如果有多个领域,都需要在realms中定义。默认以大写书写。
default_ccache_name:默认缓存的凭据名称,不推荐使用,当在客户端配置该参数的时候,会提示缓存错误信息。
[realms] 该组主要是配置领域相关的信息,默认只有一个,可以配置多个,如果配置多个(比如:HADOOP.COM, HBASE.COM),但是default_realm值定义为HADOOP.COM,那么客户端在获取与HBASE.COM相关的凭据时,需要指定具体的域名(比如客户端初始化凭据: kinit admin/admin@HBASE.COM).
EXAMPLE.COM: 简单说就是域名,对应用kerberos来说就是领域,相当于编程里面的namespace。
kdc : kdc服务器地址。格式 机器:端口, 默认端口是88
admin_server: admin服务地址 格式 机器:端口, 默认端口749
default_domain: 指定默认的域名
[domain_realm] 指定DNS域名和Kerberos域名之间映射关系。指定服务器的FQDN,对应的domain_realm值决定了主机所属的域。
[kdc]:
kdc的配置信息。即指定kdc.conf的位置。
profile :kdc的配置文件路径,默认值下若无文件则需要创建。
3.3、配置kdc.conf
#cat /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports =
kdc_tcp_ports = [realms]
EXAMPLE.COM = {
#master_key_type = aes256-cts
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
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
} #以上是默认的配置信息
参数解析: [kdcdefaults] 改组主要是用于配置全局信息。也就是kdc的默认值。
kdc_ports: kdc默认端口
kdc_tcp_ports: kdc默认的tcp端口
[realms] 该配置项主要是用于配置每个域的具体信息。
- EXAMPLE.COM: 是设定的 realms。名字随意。Kerberos 可以支持多个 realms,会增加复杂度。大小写敏感,一般为了识别使用全部大写。这个 realms 跟机器的 host 没有大关系。
- master_key_type:和 supported_enctypes 默认使用 aes256-cts。由于,JAVA 使用 aes256-cts 验证方式需要安装额外的 jar 包(后面再做说明)。推荐不使用,并且删除 aes256-cts。
- acl_file:标注了 admin 的用户权限,需要用户自己创建。文件格式是:Kerberos_principal permissions [target_principal] [restrictions]
- supported_enctypes:支持的校验方式。
- admin_keytab:KDC 进行校验的 keytab。
关于AES-256加密:
对于使用 centos5. 6及以上的系统,默认使用 AES-256 来加密的。这就需要集群中的所有节点上安装 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File。
下载的文件是一个 zip 包,解开后,将里面的两个文件放到下面的目录中:$JAVA_HOME/jre/lib/security (如果已经存在,可以考虑先删除)
3.4、配置kadm5.acl
#cat /var/kerberos/krb5kdc/kadm5.acl
*/admin@EXAMPLE.COM * 解析:
该配置文件主要是用于管理员登陆的acl
配置格式:
Kerberos_principal permissions [target_principal] [restrictions]
第一列: */admin@HADOOP.COM 对应 Kerberos_principal 表示主体(principal)名称
第二列:* 对应 permissions 表示权限
上述的配置表示以/admin@WXAMPLE.COM结尾的用户拥有*(all 也就是所有)权限,具体配置可根据项目来是否缩小权限。
4、Kerberos操作
4.1、创建数据库
初始化数据库 -r 指定域名(也就是在krb5.conf文件[realms]组里面定义的域名) -s选项指定将数据库的主节点密钥存储在文件中,从而可以在每次启动KDC时自动重新生成主节点密钥
#kdb5_util -s create HADOOP.COM
出现 Loading random data 的时候另开个终端执行点消耗CPU的命令如 cat /dev/sda > /dev/urandom 可以加快随机数采集。
该命令会在 /var/kerberos/krb5kdc/ 目录下创建 principal 数据库。
如果遇到数据库已经存在的提示,可以把 /var/kerberos/krb5kdc/ 目录下的 principal 的相关文件都删除掉。默认的数据库名字都是 principal。可以使用 -d 指定数据库名字。
#ll /var/kerberos/krb5kdc/ 数据库创建完成以后,会在该目录下生成以principal开头的四个文件
total
-rw------- root root Oct : kadm5.acl #kerberos管理员的访问权限控制文件
-rw------- root root Oct : kdc.conf #kdc 主配置文件
-rw------- root root Oct : principal # kerberos数据库文件
-rw------- root root Oct : principal.kadm5 #Kerberos数据库管理文件
-rw------- root root Oct : principal.kadm5.lock #kerberos 数据库管理的锁文件
-rw------- root root Oct : principal.ok # kerberos数据库文件
4.2、启动服务
启动kdc服务
# systemctl start krb5kdc
# systemctl enable krb5kdc #开启自启
启动kadmin服务
# systemctl start kadmin
# systemctl enable kadmin #开启自启
4.3、创建管理员
关于 kerberos 的管理,可以使用 kadmin.local 或 kadmin,至于使用哪个,取决于账户和访问权限: 如果有访问 kdc 服务器的 root 权限,但是没有 kerberos admin 账户,使用 kadmin.local
如果没有访问 kdc 服务器的 root 权限,但是用 kerberos admin 账户,使用 kadmin
说白了一点,在server上使用kadmin.local,在client使用kadmin
在 server 上创建远程管理的管理员:
第一种方法:
# kadmin.local #进入控制台
addprinc admin/admin #创建管理员
手动输入两次密码,这里密码为123456
第二种方法:
# kadmin.local -q "addprinc addmin/admin"
第三种方法:
不用手动输入密码
# echo -e "123456\n123456" | kadmin.local -q "addprinc admin/admin" 系统会提示输入密码,密码不能为空,且需妥善保存
4.4、客户端测试kadmin
[hduser@yjt ~]$ kinit admin/admin #获取管理员凭证(TGT)
Password for admin/admin@HADOOP.COM: #输入密码,也就是123456
[hduser@yjt ~]$ kadmin
Couldn't open log file /var/log/kadmind.log: 权限不够
Authenticating as principal admin/admin@HADOOP.COM with password.
Password for admin/admin@HADOOP.COM: #输入密码 123456
kadmin: #控制台
5、kerberos常用命令
服务端操作:
在控制台输入 ? 可以查看相关命令
kadmin: ?
Available kadmin requests: add_principal, addprinc, ank
Add principal
delete_principal, delprinc
Delete principal
modify_principal, modprinc
Modify principal
rename_principal, renprinc
Rename principal
change_password, cpw Change password
get_principal, getprinc Get principal
list_principals, listprincs, get_principals, getprincs
List principals
add_policy, addpol Add policy
modify_policy, modpol Modify policy
delete_policy, delpol Delete policy
get_policy, getpol Get policy
list_policies, listpols, get_policies, getpols
List policies
get_privs, getprivs Get privileges
ktadd, xst Add entry(s) to a keytab
ktremove, ktrem Remove entry(s) from a keytab
lock Lock database exclusively (use with extreme caution!)
unlock Release exclusive database lock
purgekeys Purge previously retained old keys from a principal
get_strings, getstrs Show string attributes on a principal
set_string, setstr Set a string attribute on a principal
del_string, delstr Delete a string attribute on a principal
list_requests, lr, ? List available requests.
quit, exit, q Exit program.
查看具体的命令用法,直接输入命令按回车,如下:
kadmin: addprinc
usage: add_principal [options] principal
options are:
[-randkey|-nokey] [-x db_princ_args]* [-expire expdate] [-pwexpire pwexpdate] [-maxlife maxtixlife]
[-kvno kvno] [-policy policy] [-clearpolicy]
[-pw password] [-maxrenewlife maxrenewlife]
[-e keysaltlist]
[{+|-}attribute]
attributes are:
allow_postdated allow_forwardable allow_tgs_req allow_renewable
allow_proxiable allow_dup_skey allow_tix requires_preauth
requires_hwauth needchange allow_svr password_changing_service
ok_as_delegate ok_to_auth_as_delegate no_auth_data_required
lockdown_keys
where,
[-x db_princ_args]* - any number of database specific arguments.
Look at each database documentation for supported arguments
5.1、添加主体(principal)
add_principal, addprinc, ank 这几个命令都可以创建主体(相当于用户)
服务器操作测试:
# kadmin.local 进入到控制台
控制台是以kadmin开头的,如下:
kadmin: addprinc yjt/yjt #创建主体(用户)yjt/yjt 需要输入密码
kadmin: addprinc -pw 123456 yjt/yjt # 创建yjt/yjt主体,密码使用-pw指定
kadmin: addprinc -randkey yjt/yjt #生成随机密码
5.2、删除主体
delete_principal, delprinc # 删除主体,删除的时候会询问是否删除
kadmin: delprinc yjt/yjt
Are you sure you want to delete the principal "yjt/yjt@HADOOP.COM"? (yes/no): yes
Principal "yjt/yjt@HADOOP.COM" deleted.
Make sure that you have removed this principal from all ACLs before reusing.
5.3、修改凭证
modify_principal, modprinc #修改用户
比如修改延迟到期时间:
kadmin: modprinc -maxrenewlife 8days yjt/yjt
Principal "yjt/yjt@HADOOP.COM" modified.
5.4、列出当前凭证
list_principals, listprincs, get_principals, getprincs #列出当前凭证
kadmin: listprincs
HTTP/yjt@HADOOP.COM
K/M@HADOOP.COM
admin/admin@HADOOP.COM
dn/yjt@HADOOP.COM
hbase/yjt@HADOOP.COM
hdfs/yjt@HADOOP.COM
hive/yjt@HADOOP.COM
host/yjt@HADOOP.COM
jn/yjt@HADOOP.COM
kadmin/admin@HADOOP.COM
kadmin/changepw@HADOOP.COM
kadmin/manager1@HADOOP.COM
kiprop/manager1@HADOOP.COM
krbtgt/HADOOP.COM@HADOOP.COM
nm/yjt@HADOOP.COM
nn/yjt@HADOOP.COM
rm/yjt@HADOOP.COM
test@HADOOP.COM
yarn/yjt@HADOOP.COM
yjt/yjt@HADOOP.COM
zkcli/yjt@HADOOP.COM
zkcli@HADOOP.COM
zkserver/yjt@HADOOP.COM
zookeeper/yjt@HADOOP.COM
5.5、生成密钥文件
ktadd, xst
kadmin: xst -norandky -k hadoop.keytab jn/yjt nn/yjt # -k指定密钥文件的位置,如果是相对路径,文件生成在当前路径下,可以指定多个认证主体 如何合并多个密钥文件的信息到一个文件?例如,在当前路径下,存在nn.keytab, dn.keytab ,现在我想把这两个文件里面的密钥合并到hadoop.keytab,操作如下:
在命令行输入ktutil
#ktutil #进入到控制台
read_kt, rkt #这两个命令可以从keytab里面读取出密钥信息
ktutil: rkt nn.keytab
ktutil: rkt dn.keytab
write_kt, wkt # 这两个命令可以把当前的keylist写入到一个keytab文件,这个keylist信息就是上面使用rkt从keytab读取的信息
ktutil: wkt hadoop.keytab
5.6、获取凭据信息
get_principal, getprinc # 获取凭据信息的两个命令
kadmin.local: getprinc yjt/yjt
Principal: yjt/yjt@HADOOP.COM
Expiration date: [never]
Last password change: Thu Oct 24 18:01:22 CST 2019
Password expiration date: [never]
Maximum ticket life: 1 day 00:00:00
Maximum renewable life: 8 days 00:00:00 注意这里:刚才被我们该过
Last modified: Thu Oct 24 18:07:28 CST 2019 (admin/admin@HADOOP.COM)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 8
Key: vno 1, aes256-cts-hmac-sha1-96
Key: vno 1, aes128-cts-hmac-sha1-96
Key: vno 1, des3-cbc-sha1
Key: vno 1, arcfour-hmac
Key: vno 1, camellia256-cts-cmac
Key: vno 1, camellia128-cts-cmac
Key: vno 1, des-hmac-sha1
Key: vno 1, des-cbc-md5
MKey: vno 1
Attributes:
Policy: [none]
5.7、生成dump文件
[root@manager1 yjt-test ::]#kdb5_util dump kerberos_data
[root@manager1 yjt-test ::]#ll
total -rw------- root root Oct : kerberos_data
-rw------- root root Oct : kerberos_data.dump_ok
5.8、修改认证主体的密码
#kpasswd yjt/yjt
Password for yjt/yjt@HADOOP.COM:
Enter new password:
Enter it again:
Password changed.
客户端操作:
5.9、获取凭证
[root@manager1 yjt-test ::]#kinit yjt/yjt #基于密码,需要输入密码
[root@manager1 yjt-test 18:28:06]#kinit -kt app.keytab yjt/yjt #基于密钥的方式验证
5.9、查看当前的凭证
[root@manager1 yjt-test ::]#klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: nm/yjt@HADOOP.COM Valid starting Expires Service principal
// :: // :: krbtgt/HADOOP.COM@HADOOP.COM
5.10、删除当前认证的缓存
[root@manager1 yjt-test ::]#kdestroy
5.11、查看密钥文件的认证主体列表
[root@manager1 kerveros_security ::]#klist -ket hadoop.keytab
Keytab name: FILE:hadoop.keytab
KVNO Timestamp Principal
---- ------------------- ------------------------------------------------------
// :: hdfs/yjt@HADOOP.COM (aes256-cts-hmac-sha1-)
// :: hdfs/yjt@HADOOP.COM (aes128-cts-hmac-sha1-)
// :: hdfs/yjt@HADOOP.COM (des3-cbc-sha1)
// :: hdfs/yjt@HADOOP.COM (arcfour-hmac)
// :: hdfs/yjt@HADOOP.COM (camellia256-cts-cmac)
// :: hdfs/yjt@HADOOP.COM (camellia128-cts-cmac)
// :: hdfs/yjt@HADOOP.COM (des-hmac-sha1)
// :: hdfs/yjt@HADOOP.COM (des-cbc-md5)
// :: yarn/yjt@HADOOP.COM (aes256-cts-hmac-sha1-)
// :: yarn/yjt@HADOOP.COM (aes128-cts-hmac-sha1-)
// :: yarn/yjt@HADOOP.COM (des3-cbc-sha1)
// :: yarn/yjt@HADOOP.COM (arcfour-hmac)
// :: yarn/yjt@HADOOP.COM (camellia256-cts-cmac)
// :: yarn/yjt@HADOOP.COM (camellia128-cts-cmac)
// :: yarn/yjt@HADOOP.COM (des-hmac-sha1)
// :: yarn/yjt@HADOOP.COM (des-cbc-md5)
// :: HTTP/yjt@HADOOP.COM (aes256-cts-hmac-sha1-)
// :: HTTP/yjt@HADOOP.COM (aes128-cts-hmac-sha1-)
// :: HTTP/yjt@HADOOP.COM (des3-cbc-sha1)
// :: HTTP/yjt@HADOOP.COM (arcfour-hmac)
// :: HTTP/yjt@HADOOP.COM (camellia256-cts-cmac)
// :: HTTP/yjt@HADOOP.COM (camellia128-cts-cmac)
// :: HTTP/yjt@HADOOP.COM (des-hmac-sha1)
// :: HTTP/yjt@HADOOP.COM (des-cbc-md5)
// :: host/yjt@HADOOP.COM (aes256-cts-hmac-sha1-)
// :: host/yjt@HADOOP.COM (aes128-cts-hmac-sha1-)
// :: host/yjt@HADOOP.COM (des3-cbc-sha1)
// :: host/yjt@HADOOP.COM (arcfour-hmac)
// :: host/yjt@HADOOP.COM (camellia256-cts-cmac)
// :: host/yjt@HADOOP.COM (camellia128-cts-cmac)
// :: host/yjt@HADOOP.COM (des-hmac-sha1)
// :: host/yjt@HADOOP.COM (des-cbc-md5)
参考:
Kerberos(一) 安装的更多相关文章
- Kerberos+SSH安装配置使用教程
一.背景说明 最早听说KDC和Kerberos应该是大三的<应用密码学>,当时感觉这套对称密钥分发机制比非对称密钥的PKI分发机制要好理解.但几年下来由于现实中使用SSL的场景比较比(主要 ...
- 【大数据安全】Kerberos集群安装配置
1. 概述 Kerberos是一种计算机网络认证协议,它允许某实体在非安全网络环境下通信,向另一个实体以一种安全的方式证明自己的身份.它也指由麻省理工实现此协议,并发布的一套免费软件.它的设计主要针对 ...
- kerberos系列之kerberos安装
最近搞了一下kerberos,准备写一个系列,介绍kerberos的安装,和常用组件kerberos配置,今天进入第一篇:kerberOS安装 具体kerberos是什么东西,大家可以百度查一下,这里 ...
- ldap + kerberos 整合
第一部分:ldap1. 安装ldap yum install -y openldap openldap-clients openldap-servers openldap-devel 2. 配置lda ...
- hadoop的kerberos认证
言归正传,介绍过hadoop的simple认证和kerberos后,我们在这一章介绍hadoop的kerberos认证 我们还使用hadoop集群的机器. OS 版本: Centos6.4 Kerbe ...
- 安装配置sentry服务
环境 系统环境:Centos6.7 Hadoop版本:CDH5.10 jdk版本:jdk7 注:本文并未集成kerberos组件 安装Sentry Server 选择安装hive的节点进行安装测试: ...
- 安装配置apache sentry服务
环境 系统环境:Centos6.7 Hadoop版本:CDH5.10 jdk版本:jdk7 注:本文并未集成kerberos组件 安装Sentry Server 选择安装hive的节点进行安装测试: ...
- centos7下源码方式安装gitlab8.9+发送邮件+ldap
CentOS7下源码方式安装gitlab 环境描述 操作系统: centos7 redis: >=2.8 mysql >=5.5.14 git >=2.7.4 架构设计 一台gitl ...
- kerberos&ssh 原理、免密登录搭建
原理 详细介绍 参考oracle文档:Kerberos 服务 安装过程 1.安装krb5 yum install -y krb5-server yum install krb5-workstation ...
随机推荐
- 安装R和RStudio详细步骤
安装这两项都很简单!! 1.首先要下载R安装包,可以去官网下载,也可以直接从我的百度网盘下载. 官网下载步骤: (1)进入网址:https://cran.r-project.org,选择适合自己电脑系 ...
- js 取得数组中的最大值和最小值(含多维数组)
转自:http://www.dewen.org/q/433 方法一: var a=[1,2,3,5]; alert(Math.max.apply(null, a));//最大值 alert(Math. ...
- IDEA修改选取单词颜色和搜索结果的颜色
一.修改选取单词颜色 下图所示,选取Father后背景为淡蓝色,其它相同单词背景为灰色,根本看不清楚 修改配置 1.修改选取文本背景色为78C9FF 2.修改相同文本背景色为78C9FF,包括iden ...
- ffmpeg 把视频转换为图片
ffmpeg -i "Tail of Hope.mp4" -r 1 -q:v 2 -f image2 pic-%03d.jpeg
- 8 个 Python 实用脚本,赶紧收藏备用!
脚本写的好,下班下得早!程序员的日常工作除了编写程序代码,还不可避免地需要处理相关的测试和验证工作. 例如,访问某个网站一直不通,需要确定此地址是否可访问,服务器返回什么,进而确定问题在于什么.完成这 ...
- Python入门篇-递归函数Recursion
Python入门篇-递归函数(recursion) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.递归概述 (1)函数直接或者间接调用自身就是递归: (2)递归需要有边界,递归 ...
- jquery 子元素 后代元素 兄弟元素 相邻元素
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content ...
- 在命令行中执行kms命令激活Microsoft Office 2010
激活office2010的命令是什么?激活office2010除了使用office2010激活工具之外,还可以使用kms命令来激活office2010,但是office2010激活命令还需考虑32位或 ...
- 【Beta】Scrum meeting3
第三天:2019/6/26 前言: 第3次会议于6月26日在教9-501召开. 对每个人负责撰写的文档进行分配,并讨论其中模糊的问题,时长30min. 本日任务完成情况 成员 今日完成任务情况 成员贡 ...
- VS2005编译QT4.8.2
为什么要编译? 因为安装安装版的QT4.8.2,vs2005编译报错. 1.下载QT4.8.2,qt-everywhere-opensource-src-4.8.2.zip,下载vs-AddIn1.1 ...