今天主要讲解Kerberos与LDAP。
虽然LDAP是加密的但是加密强度还不够,因此需要Kerberos。
微软的活动目录就是:LDAP + kerberos + ntp + CA.
因为Linux在命令行下操作所以较为复杂。
Kerberos是RHS333的重点,在实际的工作中Kerberos是重点。
惠普的单点登录就是Kerberos实现的。
一次登陆全网漫游。
Kerberos是来自于一个传说。
由美国的MIT开发的。
Kerberos太复杂了。
取自希腊的神话。
上一期的RHCA也重点研究了Kerberos,其细节要看文档。
它的使用方法与之前的所有原理都不一样。
细节要看文档,要自己琢磨。
Kerberos有排错的内容。
今天的东西是实现类似于微软活动目录的东西。
——
Introduce to Kerberos
Configure the KDC and clients
Integrate LDAP and Kerberos
Configure SASL mappings for LDAP access control
以前是使用ldapsearch -x GSSAPI.
Kerberos。
之前是使用crypt的加密算法加密的密码。
密码还是在互联网上传输的。
getent shadow如果有权限还是可以看到md5的加密串。
Kerberos传输的是票(tickets)
Secure network authentication system
Based around credentials called tickets.基于对身份验证的方法实现验证,这种方式被成为票。
Tickets secured by secret key encyption.票的安全是通过私钥加密的,因此Kerberos就是要保障票的安全
Kerberos是安全的网络认证系统,它是专门用来做认证的。
认证体系是由两部分组成的。
NSS提供账号。LDAP
PAM提供认证。Kerberos
/etc/nsswitch.conf
/etc/pam.d/system-auth
Three participants.Kerberos由三个成员组成的
Key Distribution Center(KDC)钥匙分发中心,核心组件,类似于CA。
Application Server(Network services)应用程序。
Client users客户端。
在之前的课程里账户信息和密码信息都是有LDAP提供的。
system-config-authentication
正常情况下是客户端访问服务由服务保障安全,但是现在客户端将请求发送给KDC,由KDC来保障服务的安全。
Kerberos and LDAP
Kerberos tickets can authenticate users to the LDAP server
Kerberos can be one part of a secure centralized user management system.
LDAP provides basic NSS information
Kerberos authenticate users,replacing pam_ldap.so
Principals.代理人,角色。
一个最基本的单位是Principal
A principal identifies each participant in a kerberos authentication.
每个参与Kerberos认证的表示为Principals
Identified by primary,instance and realm
Each Principal has a password.
passwords are used as encryption keys
Users memorize passwords
Services store passwords in a keylab file
KDC knows all passwords.
完整的Principal表示方法:
e1vis/admin@server116.example.com
用户 描述 Realm
除了用户还有一个网络服务。
ftp/station1.example.com@server116.example.com
服务名 Instance realm(Kerberos的域)
把station1.example.com的ftp服务加入server116.example.com中。
需要把以上的角色加入Kerberos中。
加的之前要提供一个供验证的密码。
Kerberos是未来在整个网络用的。
通常用大写的DNS来表示
所以要具体在描述中定位到具体的计算机.
每个Principal都有一个密码,这个不是明文的密码而是密钥,它会保存在一个文件里。
这个密码是为了加密钥匙的。
用户会记忆这个密码。
用户的密码是必须要输入的。
而服务的密码是存放在一个文件里的,服务的密码是随机生成的。
我们人只知道用户的密码,而不知道服务的密码。
KDC知道所有的密码,因为KDC存储所有的密码。
未来创建了用户后不创建密码,而把密码交由Kerberos验证。
——
8-6/8-7把整个原理讲述了,非常抽象,真正的详细说起来起码是60页的文档。
TGT票据分发中心。
user enters username and password
Login program sends request for a TGT for that principal to the KDC
KDC sends the login program a TGT encrypted using the user's password
If the login program can decrypt the TGT with the password provided by the user,the user is authenticated.
在使用前所有的客户端与Service都要加入KDC
加入后会生成KDC与各个加入者之间的密钥。
客户端会向KDC请求一张票,它被称为TGT。
KDC会使用之前KDC与客户端之间生成的密钥来加密TGT,并发送给客户端。
这么做是要保证得到TGT且可以正常使用的是真正的客户端,真正的请求者。
客户端拿到TGT后,客户端会把TGT与要访问的Service打包在一起发送给KDC。这里的前提是目标Service已经加入了KDC。+IP+时间戳...more
KDC收到了请求后,把客户端发送给他的信息打包在一起,使用Service与KDC之间的密钥加密这个打包发送给客户端。
客户端是读不懂这个打包的,然后客户端把打包的东西加上客户端与KDC之间的密钥再打包在一起发给Service。 #在这一步的时候不太清楚。(Here is a Question!!)
这个时候直接把上面KDC与服务之间的密钥打包的包加上IP和时间戳发送给服务.
Question:服务还有别的动作吗?IP与时间戳是否打包了两次?Why?
打包两次IP与更新时间戳是为了服务解压包之后出现了两个IP与时间戳,IP确定要一样,两个时间戳之间会存在时间戳,不能超过一天。否则过期。其它的信息都一样,只是时间戳不一样。
每次传输、交换过程中都会有加密与解密,加密与解密的基础是KDC与各个参与者之间的密钥。
以上的过程就是两件事情:验证通过与票的安全。
请求的Service与客户端都是真正的人。
CA只能保证传输的网络安全,不能保证其它的安全。
Kerberos保证认证的安全。
Kerberos的安全在于KDC的安全与票的安全。与KDC与参与者之间的密钥的安全。
——
Kerberos的协议分为两个部分:
客户端想KDC发送自己的身份信息。
KDC自己是管理者,KDC之下有更详细的票据分发中心。
KDC从TGS(票据分发服务)发送TGT。
(...and so on:Here comes from 邹sir的Kerberos相关文档。后期整理)
至少要看5遍,才能看懂流程。要清晰。
Question:关于在互联网上暴露输入密码的过程,仍然不够清晰。
——
Service Profile: Kerberos
krb5-server,krb5-libs
krb5kdc
kadmind,客户端远程管理
kpropd
一定要关心NTP,不能超过5分钟。
否则Kerberos是无法管理的
VMware的时间会飘,时间不准确。
所以一定要有NTP服务器保证时间的准确。
——
/etc/krb5.conf
——
Installing a Master KDC.
Kerberos的配置还是比较简单的。
.16是客户端
.116是服务器
这个试验是在116上做的.
——
[domain_realm] 权限控制
创建Kerberos数据库:
kdb5_util create -r SERVER116.EXAMPLE.COM -s.
-s 存储一个密码文件。
cd /var/kerberos/krb5kdc/
kdc.conf
keytab 存放服务的密码。
kadm5.acl 设置权限,哪些Principal有哪些权限。
小写 - 允许
大写 - 拒绝
* = ADMCIL
kdb5_util create -r SERVER101.EXAMPLE.COM -s
会提示输入密码,这是最高权限的密码。
kadmin.local
authconfig-tui
ltfp 92.168.0.16
pub/certs
my-ca.crt
/etc/openldap/cacerts
krb5kdc restart
一定要注意时间的问题.
(Pausing)
(Continue:2010年9月6日 20:33:09)
一、kdc:
yum install krb5-server
/etc/krb5.conf
/var/kerberos/krb5kdc/kdc.conf | kadmin5.acl
创建kdc数据库
启动krb5kdc/kadmin服务.
(Kerberos要学两遍,这次当着学习,下次RHS333当作复习.)
kadmin.local 管理
二、Client
将kdc中的krb5.conf复制到/etc
使用kadmin -p root/admin远程管理
——
listprincs
addprinc
deleteprinc
? #Get some Help
——
Using kadmin.
addpol 添加一个策略
addpol -max life 30days -minLife 3days -history 3 gusts2001
给guest2001添加策略
getpol guest2001
查看guest2001的策略
——
man kadmin
——
ktadd
randomizes password
——
Install applicaition Servers
set up /etc/krb5.conf
Run kadmin
addprinc -randkey host/server116.example.com@server116.example.com
listprincs
ktadd -k /etc/krb5.keytab host/server116.example.com
/etc/pam.d/system-auth
——
klist
票的默认有效期是12个小时。
kinit
用户需要记忆自己的密码,而服务的密码是存放在keytab文件中的。
这里的客户端是服务器。
——
kinit可以得到一个新的TGT。
kdestroy可以删除一个认证。
——
Debugging Kerberized Services.
ktutil
ktutil
rkt /etc/xxx.keytab
list
——
kvno
——
Slave KDCs.辅助的KDC.
负载均衡与容错。
kprop/kadmind只运行在辅助的KDC上面。
所以的KDC上运行krd5kdc
KDC database可以存储在LDAP中。IPA Server。
——
Configuring slave KDCs
(以上介绍完了Kerberos的流程)
Kerberos的安全。
如果主机安全但是网络不安全。
KDC的安全是非常重要的。
如果服务本身不安全那么票的安全也不能保障。
客户端如果不安全票的安全也不能保障
所以系统中有防止的机制。
预认证功能。
防止客户端被伪造。
——
modprinc
defaul_principal_flags = +preauth
保证票据过期了不被其它的人截取使用。
——
防止有人伪造KDC,保证票本身的合法性。
validate=true
——
LDAP and Kerberos
Access Control Issues
CA与Kerberos配合操作.
——
实验:(这里用SASL的方法验证,原来是简单认证,现在是自动协商的方式认证)
yum install cyrus-sasl-gssapi
kadmin.local
addprinc -randkey ldap/server116.example.com
ktadd -k /etc/ldap ....
listprincs
vim /etc/sysconfig/dirsrv GSS加密
/etc/sysconfig/dirsrv-admin
dirsrv restart
dirsrv-admin restart
redhat-ibm-console
SASL Mapping.
gssapi-map
id=....(etc)
dn=....(etc)
...(etc)
dirsrv restart
dirsrv-admin restart
...(etc)sasl是基于Kerberos的.
ldapsearch -Y GSSAPI
——
明天把课后的几个试验做完。