FreeIPA 是集成了ldap+Kerberos(Kerberos 认证原理不多说,简单的说就是在身份认证的时候不传输密码,而是在传输票据,更加安全可靠)+web管理的集中式用户认证管理系统(系统级别的sso,可以对apache,ftp,nfs,ldap,smtp ,ssh做身份认证。但是对samba 的身份认证不支持。samba貌似只支持AD),同时还可以与微软的AD进行用户信息的同步。
我是基于centos 6.5 配置安装配置,centos ipa 身份认证是redhat 建立在开源FreeIPA身份管理软件上。与FreeIPA配置,命令完全一样。
基本环境:
ipa.dadi.com ipa1.dadi.com (ipa server)
nfs3.dadi.com (nfs server)
client.dadi.com (ipa client)
dns 配置:
bind 配置参考:
; ldap servers _ldap._tcp IN SRV 0 100 389 ipa.dadi.com _ldap._tcp IN SRV 0 100 389 ipa1.dadi.com ;kerberos realm _kerberos IN TXT DADI.COM ; kerberos servers _kerberos._tcp IN SRV 0 100 88 ipa.dadi.com _kerberos._udp IN SRV 0 100 88 ipa.dadi.com _kerberos-master._tcp IN SRV 0 100 88 ipa.dadi.com _kerberos-master._udp IN SRV 0 100 88 ipa.dadi.com _kpasswd._tcp IN SRV 0 100 464 ipa.dadi.com _kpasswd._udp IN SRV 0 100 464 ipa.dadi.com _kerberos._tcp IN SRV 0 100 88 ipa1.dadi.com _kerberos._udp IN SRV 0 100 88 ipa1.dadi.com _kerberos-master._tcp IN SRV 0 100 88 ipa1.dadi.com _kerberos-master._udp IN SRV 0 100 88 ipa1.dadi.com _kpasswd._tcp IN SRV 0 100 464 ipa1.dadi.com _kpasswd._udp IN SRV 0 100 464 ipa1.dadi.com ipa IN A 192.88.50.48 ipa1 IN A 192.88.50.49 nfs3 IN A 192.88.50.50 client IN A 192.88.50.51
注意:每台服务器还需要配置反向DNS解析,否则会有问题。
yum install ipa-server bind-dyndb-ldap -y
然后同步时间:
ntpdate ntp.dadi.com
配置:
ipa-server-install
然后一路yes 即可,会自动配置krdc,ldap,ldap web 管理,安装完成后执行:
kinit admin klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: [email protected] Valid starting Expires Service principal 12/19/13 10:22:23 12/20/13 10:22:21 krbtgt/[email protected] ipa config-mod --defaultshell=/bin/bash ##修改所有用户默认shell 路径 添加用户: ipa user-add fsm --uid=1001 --gid=1001 修改用户密码: ipa passwd fsm 查询添加用户信息: ldapsearch -x -b "dc=dadi, dc=com" uid=fsm GSS 加密查询: ldapsearch -Y GSSAPI uid=fsm -LLL
由于是身份认证系统,必须做HA,否则如果ipa server 坏了,那么你还能登录其他系统吗。后果可想而知。
ipa.dadi.com 上执行:
kinit admin ipa-replica-prepare ipa1.dadi.com scp /var/lib/ipa/replica-info-ipa1.dadi.com.gpg [email protected]:/root
ipa1 上执行:
yum install ipa-server bind-dyndb-ldap -y /etc/init.d/iptables stop chkconfig iptables off ntpdate ntp.dadi.com ###时间一定要同步,防火墙关闭把,不然要开放几个端口。 ipa-replica-install replica-info-ipa1.dadi.com.gpg --skip-conncheck
安装成功后查看,在ipa或者是ipa1上执行:
kinit admin ipa-replica-manage list ipa1.dadi.com: master ###两台都是master,可以同时进行读写 ipa.dadi.com: master
yum install ipa-client ipa-admintools openldap-clients -y ipa-client-install --mkhomedir --no-ntp --domain=dadi.com --server=ipa.dadi.com --no-sssd -p admin
ipa.dadi.com 上执行:
kinit admin ipa-getkeytab -s ipa.dadi.com -p host/client.dadi.com -k /tmp/krb5.keytab scp /tmp/krb5.keytab client.dadi.com:/tmp
在client.dadi.com 上执行:
(echo rkt /tmp/krb5.keytab; echo wkt /etc/krb5.keytab) |ktutil klist -etk Keytab name: FILE:/etc/krb5.keytabKVNO Timestamp Principal---- ----------------- -------------------------------------------------------- 3 12/17/13 17:06:46 host/[email protected] (aes256-cts-hmac-sha1-96) 3 12/17/13 17:06:46 host/[email protected] (aes128-cts-hmac-sha1-96) 3 12/17/13 17:06:46 host/[email protected] (des3-cbc-sha1) 3 12/17/13 17:06:46 host/[email protected] (arcfour-hmac)
测试登录:
这个时候可以在任意一台机器上执行ssh -l fsm client.dadi.com 就可以登录 client 这台机器了。注意client 的时间一定要与ipa server 时间是同步的,否则ssh 用户是无法登录的。
添加ipa1 /etc/krb5.conf 配置中。
#File modified by ipa-client-install[libdefaults] default_realm = DADI.COM dns_lookup_realm = false dns_lookup_kdc = false rdns = false ticket_lifetime = 24h forwardable = yes[realms] DADI.COM = { kdc = ipa.dadi.com:88 kdc = ipa1.dadi.com:88 ###添加ipa1 master_kdc = ipa.dadi.com:88 master_kdc = ipa1.dadi.com:88 ###添加ipa1 admin_server = ipa.dadi.com:749 admin_server = ipa1.dadi.com:749 ###添加ipa1 default_domain = dadi.com pkinit_anchors = FILE:/etc/ipa/ca.crt } [domain_realm] .dadi.com = DADI.COM dadi.com = DADI.COM
/etc/nslcd.conf /etc/pam_ldap.conf 中添加:
uri ldap://ipa.dadi.com,ldap://ipa1.dadi.com
service nslcd restart service sshd restart service oddjobd restart
测试HA:
人工down掉ipa server 看看能不能够ssh 登录 client。正常情况当然是可以了。或者是在ipa1上添加一个用户,然后启动ipa,看是否能够同步到ipa上来。
centos6/redhat6: /etc/nslcd.conf /etc/pam_ldap.conf 中添加: ssl start_tls tls_reqcert never tls_cacertdir /etc/cacerts mkdir /etc/cacerts cd /etc/cacerts cp /etc/ipa/ca.crt cacert.crt service nslcd restart service sshd restart
ipa.dadi.com 上执行: kinit admin ipa host-add nfs3.dadi.com ipa service-add nfs/nfs3.dadi.com 添加用户登录ldap mount nfs 键值: ipa automountkey-add default auto.home --key=fsm --info=nfs3.dadi.com:/export/fsm ##添加fsm /home 目录 nfs3.dadi.com 上执行: mkdir /export/fsm && cp /etc/skel/.bash* /export/fsm && chmod 700 /export/fsm && chown -R fsm:fsm /export/fsm vi /etc/export /export *.dadi.com(rw,fsid=0,insecure,no_subtree_check) ###不用krb5认证,krb5 由于加密密钥问题,还没有做通 service rpcbind restart service nfs restart client.dadi.com 上执行: ipa-client-automount --location=default -S --server=ipa.dadi.com 测试: ssh -l fsm client.dadi.com 的时候会自动mount /home/fsm 这个目录
说明:这是我目前真实的系统环境。
一、nfs krb5 问题,总是报错如下:
WARNING: gss_accept_sec_context failed
nfs3 rpc.svcgssd[1960]: ERROR: GSS-API: error in handle_nullreq: gss_accept_sec_context(): GSS_S_FAILURE (Unspecified GSS failure. Minor code may provide more information) - Wrong principal in request
这个错说是加密密钥造成,目前还没解决。
二、夸机房问题。
其实这个问题比较简单,每个机房放两台ipa server,因为全部是master(ldap 版本必须是2.4 以上的版本),所有哪里写用户信息都会同步到全网。当然夸机房mount nfs 是可以的。考虑到高可用,如果放置nfs 的机房断网或者是无法链接的时候就会有问题。这个问题有两个解决方案,一是不用自动mount nfs,ldap 的home 目录就放在本地机器上。二是通过私网IP地址解决,每个机房都放置一台nfs 服务器,并且都配置私网ip地址,比如 192.88.50.53。这样就可以解决nfs夸机房问题,还会引出一个问题,nfs 之间数据同步问题。请你想一下?
参考文档:http://docs.fedoraproject.org/en-US/Fedora/18/html/FreeIPA_Guide/index.html