Kerberos统一认证实验配置
时间:2011-01-05 来源:lksj
0.准备工作
Kerberos是一种认证协议,以地狱守护者(三个头的狗)的名字命名,这个协议堪称完美,原理相当复杂,见http://blog.chinaunix.net/u/4940/showart_2374802.html,现在发展倒到第5版,其演变过程被MIT描述程Athena和Euripides的一段对话,http://biz.chinabyte.com/189/2038189.shtml,有兴趣可以看看,比较长,但是对理解Kerberos很有好处。
Kerberos的实验同样需要3台机器,分别扮演不同的角色:
a.192.168.0.48 kdc.example.com Kerberos服务器和NIS服务器
b.192.168.0.49 server.example.com 应用服务器,如ssh,ftp,krb5-telnet等
c.192.168.0.50 client.example.com 客户机
ps.几台机器需要时间同步,所以最好是建一个ntp的服务器,时间相差5分钟以上,所有实验都做不出来。建NTP也就2分钟的事情。
1.配置NIS 概念是将kdc.example.com配置成NIS和Kerberos的服务器,NIS提供用户信息(User Infomation),Kerberos提供认证信息(Authentication),下面从NIS开始: 安装ypserv #yum -y install ypserv 配置ypserv,增加NIS域,NISDOMAIN=ahau #vim /etc/sysconfig/network #nisdomainname ahau 固定ypserv的端口,在vim /etc/sysconfig/network添加参数YPSERV_ARGS=808 生成NIS库 #/usr/yp/ypinit -m 增加几个用户,但是不要密码,UID用大一点,防止跟客户机重复,更新NIS库 #useradd -u 6001 user1 #make -C /var/yp ps.这里要注意NIS服务器的hosts配置,这个配置会传到客户机,如果有错,排错是很麻烦的,我就因为这个问题花了两个小时排错
2.配置KDC 很多包系统默认安装过了,这里只要安装krb5-server #yum -y install krb5-server 修改krb5的配置文件/etc/krb5.conf [logging]段是日志,可以不动 [libdefaults]是默认配置,其中default_realm指出了默认的realm,即认证的范围,一般是全大写字母 default_realm = KDC.EXAMPLE.COM [realms]段是范围的配置,参数最好写IP地址,方便以后更改 [realms] KDC.EXAMPLE.COM = { kdc = 192.168.0.48:88 admin_server = 192.168.0.48:749 } [domain_realm]域和realm的关系,即哪些机器可以在哪个realm里认证 .example.com = KDC.EXAMPLE.COM #所有example.com域的用户和机器都可以在KDC.EXAMPLE.COM上认证 [appdefaults]段指出pam的一些参数,如票的存活时间等等。 加一条 validate = true ,目的是让登录程序确认KDC的合法性 初始化KDC的数据库,-s表示通过kadmin登录本机不需要密码 #kdb5_util create -r KDC.EXAMPLE.COM -s 修改kdc.conf,指定加密算法 #vim /var/kerberos/krb5kdc/kdc.conf [realms]段改成KDC.EXAMPLE.COM,取消master_key_type的注释,Kerveros v5采用3DES的算法,比v4的DES要安全一些 修改/var/kerberos/krb5kdc/kadm5.acl,此文件为kadmin的访问控制文件 语法是 principal permissions [target-principal] 改成如下形式,即所有admin组拥有所有权限 */[email protected] * 登录KDC,添加管理员和一般用户的principal #kadmin.local kadmin.local: addprinc root/admin kadmin.local: addprinc user1 ps.addprinc会要求输入密码,root/admin的密码一定不能泄漏,否则就完了,user1的密码就是指登录密码 查看,删除已有的principal的命令: kadmin.local:listprincs kadmin.local:getprinc user1 kadmin.local:delprinc user1 导出kadmin服务的keytab文件,退出kadmin kadmin.local:ktadd -k /var/kerberos/krb5kdc/kadm5.keytab kadmin/admin kadmin.local:ktadd -k /var/kerberos/krb5kdc/kadm5.keytab kadmin/changepw
ps.有的资料上说kadmin会自动生成keytab文件,我试了一下不行,可能版本问题吧 修正前面的几个文件的SELINUX设置 #restorecon -R -V /var/kerberos/krb5kdc/ #restorecon -R -V /var/log/ #restorecon -R -V /etc/krb5.conf
查看keytab文件内容 #ktutil ktutil:rkt /var/kerberos/krb5kdc/kadm5.keytab ktutil:list
启动服务 #service krb5kdc restart #service kadmin restart
登录到server.example.com上,复制kdc.example.com的/etc/krb5.conf文件过来,省得再配了 server#scp [email protected]:/etc/krb5.conf /etc/krb5.conf server#restorecon -R -v /etc/krb5.conf
运行kadmin,输入密码后即可远程登录到KDC上,可以对其进行管理
3.配置服务器 我们希望把server.example.com做成应用服务器,这里以sshd、gssftp、krb5-telnet为例。 先配置这几个服务,sshd默认就能用,gssftp和krb5-telnet都是xinetd管理的服务,修改/etc/xinetd.d/的相关配置文件就行,如果要telnet加密,同时打开ekrb5-telnet服务就行,建议打开。 配置服务器为NIS的客户端,并且使用Kerberos认证 server#authconfig-tui ,修改相应的NIS信息就行 在KDC增加服务的principal,并且导出生成server自己的钥匙 server#kadmin kadmin:addprinc -randkey host/server.example.com #krb5-telnet和ssh的principal都是host kadmin:addprinc -randkey ftp/server.example.com #gssftp 的principal是ftp 导出到本地 kadmin:ktadd -k /etc/krb5.keytab host/server.example.com kadmin:ktadd -k /etc/krb5.keytab ftp/server.example.com 检查防火墙和selinux
因为要做双向验证,所以我们在kdc.example.com上也把sshd服务注册一下,登录到kdc.example.com #kadmin.local kadmin.local:addprinc -randkey host/server.example.com kadmin.local:ktadd -k /etc/krb5.conf host/server.example.com
检查防火墙和selinux 重启跟kdc相关的服务
4.客户机测试 先将客户机加入NIS域,并使用Kerberos验证 然后以user1登录系统,密码为KDC中addprinc时输入的对应密码,注意这里不能用root直接su到user1,因为root是不验证密码的,这样会导致得不到TGT票,正常登录的话说明验证没有问题 此时该用户已经得到了TGT的授权票,可以用klist查看用户得到的票的信息 client#klist 使用ssh登录server.example.com,不需要密码就能登录 使用ftp登录server.example.com,不需要密码也能登录 使用telnet命令 telnet -x server.example.com -k KDC.EXAMPLE.COM登录server.example.com,同样不需要密码就能登录
再此用klist查看,该用户已经得到了多张用于访问服务的票,默认的有效时间是10个小时。
ps.ssh登录到server.example.com以后,再ssh回client.example.com是需要密码的,如果要取消密码,可以修改client.example.com上的ssh配置,增加GSSAPIDelegateCredentials yes 的参数,让ssh能够传递认证信息
以上是配置Kerberos统一认证的过程,全部都使用RHEL5.4,还有一些夸域的认证没有写,有空再说吧,强烈推荐大家看看那个对话,非常经典。
ps.几台机器需要时间同步,所以最好是建一个ntp的服务器,时间相差5分钟以上,所有实验都做不出来。建NTP也就2分钟的事情。
1.配置NIS 概念是将kdc.example.com配置成NIS和Kerberos的服务器,NIS提供用户信息(User Infomation),Kerberos提供认证信息(Authentication),下面从NIS开始: 安装ypserv #yum -y install ypserv 配置ypserv,增加NIS域,NISDOMAIN=ahau #vim /etc/sysconfig/network #nisdomainname ahau 固定ypserv的端口,在vim /etc/sysconfig/network添加参数YPSERV_ARGS=808 生成NIS库 #/usr/yp/ypinit -m 增加几个用户,但是不要密码,UID用大一点,防止跟客户机重复,更新NIS库 #useradd -u 6001 user1 #make -C /var/yp ps.这里要注意NIS服务器的hosts配置,这个配置会传到客户机,如果有错,排错是很麻烦的,我就因为这个问题花了两个小时排错
2.配置KDC 很多包系统默认安装过了,这里只要安装krb5-server #yum -y install krb5-server 修改krb5的配置文件/etc/krb5.conf [logging]段是日志,可以不动 [libdefaults]是默认配置,其中default_realm指出了默认的realm,即认证的范围,一般是全大写字母 default_realm = KDC.EXAMPLE.COM [realms]段是范围的配置,参数最好写IP地址,方便以后更改 [realms] KDC.EXAMPLE.COM = { kdc = 192.168.0.48:88 admin_server = 192.168.0.48:749 } [domain_realm]域和realm的关系,即哪些机器可以在哪个realm里认证 .example.com = KDC.EXAMPLE.COM #所有example.com域的用户和机器都可以在KDC.EXAMPLE.COM上认证 [appdefaults]段指出pam的一些参数,如票的存活时间等等。 加一条 validate = true ,目的是让登录程序确认KDC的合法性 初始化KDC的数据库,-s表示通过kadmin登录本机不需要密码 #kdb5_util create -r KDC.EXAMPLE.COM -s 修改kdc.conf,指定加密算法 #vim /var/kerberos/krb5kdc/kdc.conf [realms]段改成KDC.EXAMPLE.COM,取消master_key_type的注释,Kerveros v5采用3DES的算法,比v4的DES要安全一些 修改/var/kerberos/krb5kdc/kadm5.acl,此文件为kadmin的访问控制文件 语法是 principal permissions [target-principal] 改成如下形式,即所有admin组拥有所有权限 */[email protected] * 登录KDC,添加管理员和一般用户的principal #kadmin.local kadmin.local: addprinc root/admin kadmin.local: addprinc user1 ps.addprinc会要求输入密码,root/admin的密码一定不能泄漏,否则就完了,user1的密码就是指登录密码 查看,删除已有的principal的命令: kadmin.local:listprincs kadmin.local:getprinc user1 kadmin.local:delprinc user1 导出kadmin服务的keytab文件,退出kadmin kadmin.local:ktadd -k /var/kerberos/krb5kdc/kadm5.keytab kadmin/admin kadmin.local:ktadd -k /var/kerberos/krb5kdc/kadm5.keytab kadmin/changepw
ps.有的资料上说kadmin会自动生成keytab文件,我试了一下不行,可能版本问题吧 修正前面的几个文件的SELINUX设置 #restorecon -R -V /var/kerberos/krb5kdc/ #restorecon -R -V /var/log/ #restorecon -R -V /etc/krb5.conf
查看keytab文件内容 #ktutil ktutil:rkt /var/kerberos/krb5kdc/kadm5.keytab ktutil:list
启动服务 #service krb5kdc restart #service kadmin restart
登录到server.example.com上,复制kdc.example.com的/etc/krb5.conf文件过来,省得再配了 server#scp [email protected]:/etc/krb5.conf /etc/krb5.conf server#restorecon -R -v /etc/krb5.conf
运行kadmin,输入密码后即可远程登录到KDC上,可以对其进行管理
3.配置服务器 我们希望把server.example.com做成应用服务器,这里以sshd、gssftp、krb5-telnet为例。 先配置这几个服务,sshd默认就能用,gssftp和krb5-telnet都是xinetd管理的服务,修改/etc/xinetd.d/的相关配置文件就行,如果要telnet加密,同时打开ekrb5-telnet服务就行,建议打开。 配置服务器为NIS的客户端,并且使用Kerberos认证 server#authconfig-tui ,修改相应的NIS信息就行 在KDC增加服务的principal,并且导出生成server自己的钥匙 server#kadmin kadmin:addprinc -randkey host/server.example.com #krb5-telnet和ssh的principal都是host kadmin:addprinc -randkey ftp/server.example.com #gssftp 的principal是ftp 导出到本地 kadmin:ktadd -k /etc/krb5.keytab host/server.example.com kadmin:ktadd -k /etc/krb5.keytab ftp/server.example.com 检查防火墙和selinux
因为要做双向验证,所以我们在kdc.example.com上也把sshd服务注册一下,登录到kdc.example.com #kadmin.local kadmin.local:addprinc -randkey host/server.example.com kadmin.local:ktadd -k /etc/krb5.conf host/server.example.com
检查防火墙和selinux 重启跟kdc相关的服务
4.客户机测试 先将客户机加入NIS域,并使用Kerberos验证 然后以user1登录系统,密码为KDC中addprinc时输入的对应密码,注意这里不能用root直接su到user1,因为root是不验证密码的,这样会导致得不到TGT票,正常登录的话说明验证没有问题 此时该用户已经得到了TGT的授权票,可以用klist查看用户得到的票的信息 client#klist 使用ssh登录server.example.com,不需要密码就能登录 使用ftp登录server.example.com,不需要密码也能登录 使用telnet命令 telnet -x server.example.com -k KDC.EXAMPLE.COM登录server.example.com,同样不需要密码就能登录
再此用klist查看,该用户已经得到了多张用于访问服务的票,默认的有效时间是10个小时。
ps.ssh登录到server.example.com以后,再ssh回client.example.com是需要密码的,如果要取消密码,可以修改client.example.com上的ssh配置,增加GSSAPIDelegateCredentials yes 的参数,让ssh能够传递认证信息
以上是配置Kerberos统一认证的过程,全部都使用RHEL5.4,还有一些夸域的认证没有写,有空再说吧,强烈推荐大家看看那个对话,非常经典。
相关阅读 更多 +