Kerberos+LDAP+NFSv4 实现单点登录(下)
Kerberos+LDAP+NFSv4 实现单点登录(下)
六.nfs客户机的安装 1.安装sssd [email?protected]:~# apt-get install sssd sssd-krb5 sssd-ldap libsasl2-modules-gssapi-heimdal 安装后的sssd.conf是空白文件,nsswitch.conf没改变 [email?protected]:~# ls -l /etc/sssd/sssd.conf -rw------- 1 root root 1938 Jun 10 11:18 /etc/sssd/sssd.conf 仅拥有者可读(SSSD文档要求sssd.conf仅root根用户可读写,否则无法启动sssd) 修改配置文件sssd.conf、nsswitch.conf 1)查看sssd.conf services = nss,pam [nss] [pam] [domain/intern] #--v-- unix用户信息由LDAP提供 #--v-- 用户认证及密码修改由Kerberos提供 ldap_uri = ldap://192.168.1.101 krb5_server = 192.168.1.101 #--v-- 有的环境不设总无法认证,应该密码认证要很长时间,需设超时时间大一点 2)查看nsswitch.conf gshadow: files hosts: files mdns4_minimal [NOTFOUND=return] dns protocols: db files netgroup: nis sss [email?protected]:~# 即将原来的compat改为files sss 3)安装sssd时自动设置/etc/pam.d/ [email?protected]:~$ [email?protected]:~$ cat /etc/pam.d/common-session session [default=1] pam_permit.so [email?protected]:~$ [email?protected]:~$ cat /etc/pam.d/common-password password requisite pam_pwquality.so retry=3 [email?protected]:~$ [email?protected]:~$ cat /etc/pam.d/common-auth auth [success=2 default=ignore] pam_unix.so nullok_secure [email?protected]:~$ [email?protected]:~$ cat /etc/pam.d/common-account account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so 4)重启sssd [email?protected]:~# /etc/init.d/sssd stop [email?protected]:~# /etc/init.d/sssd start 5)测试 [email?protected]:~$ [email?protected]:~$ su krblinlin Password: [email?protected]:/home/linlin$ [email?protected]:/home/linlin$ passwd Current Password: 登录成功,修改密码命令kpasswd、passwd都成功.注意密码是Kerberos密码,非LDAP密码 但某些环境存在一个问题,当kdc服务器重启,SSSD客户机无法登录,需手工在kdc服务器上重启守护进程heimdal-kdc,还找不到原因.而另试另外环境很正常 2.安装nfs-common 修改/etc/default/nfs-common文件 [email?protected]:~# /etc/init.d/nfs-common stop [email?protected]:~# /etc/init.d/nfs-common start
1)挂载网络共享 [email?protected]:~# mount -t nfs4 srvnf.ctp.net:/home/linlin/share /mnt -o sec=krb5 或 添加到/etc/fstab,一开机挂载网络共享 #添加网络共享 2)查看挂载信息 3)测试写网络共享 [email?protected]:~# ls -ld /mnt drwxr-xr-x 2 krblinlin 4001 4096 Sep 18 09:13 /mnt [email?protected]:~# 可看到已获取显示ldap用户信息,krblinlin为ldap用户 在普通本地用户下 [email?protected]:/home/linlin$ cd /mnt [email?protected]:/mnt$ touch a.txt [email?protected]:/mnt$ ls a.txt [email?protected]:/mnt$ 写成功 [email?protected]:~# ps -e |grep idmapd 533 ? 00:00:00 rpc.idmapd 至此,以LDAP作为存储用户信息,以Kerberos作为身份认证,SSSD客户机已成功访问读写NFSv4服务器网络共享 七.后记 实现单点登录的方案多种多样.LDAP同时也提供简单用户认证,如果不需应用NFSv4或NFSv4采用弱的系统认证,无需搭建Kerberos,仅LDAP就可满足单点登录;而samba4可轻松打造一个linux下的活动目录. 1. 为何本文选Heimdal而不选MIT,前文已讲过,一是使用LDAP作为Kerberos后端,二是避免存储明文的ldap数据库管理员密码. 查找了资料好象ldap_sasl_interactive_bind_s 使用 EXTERNAL 之前要先ldap_get_option有关LDAP_OPT_X_SASL_AUTHZID,虽MIT源码有ldap_get_option,但里边是几个写死的LDAP_OPT_xxxx,与认证无关,也没找到和SASL相关 2)Heimdal内置支持LDAP作为后端,缺省支持EXTERNAL,查看源码简单明了 3)openldap的同步密码插件只支持Heimdal 2.openldap同步密码 方法1: [email?protected]:~# cat /etc/sasl2/slapd.conf pwcheck_method: saslauthd [email?protected]:~# userPassword属性填上固定值{SASL} 方法2和方法3:安装openldap的同步密码插件slapd-smbk5pwd 方法2: 方法3: 本文采用方式2或方式3 [email?protected]:~# apt-get install slapd-smbk5pwd slapd-smbk5pwd : Keeps Samba and Kerberos passwords in sync within slapd 2)加载模块 [email?protected]:~# cat smbk5pwd.ldif dn: cn=module{0},cn=config changetype: modify add: olcModuleLoad olcModuleLoad: smbk5pwd [email?protected]:~# [email?protected]:~# ldapadd -Y EXTERNAL -H ldapi:/// -f smbk5pwd.ldif 3)前面已安装了heimdal-kdc,并LDAP已添加加了heimdal模式,因本文目的只要同步Heimdal,不同步samba,所以无需添加samba模式 4)将/var/lib/heimdal-kdc/m-key改为openldap用户拥有
5)启用同步 [email?protected]:~# cat krb5.ldif dn: olcOverlay=smbk5pwd,olcDatabase={1}mdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSmbK5PwdConfig olcOverlay: smbk5pwd olcSmbK5PwdEnable: krb5 [email?protected]:~# [email?protected]:~# ldapadd -Y EXTERNAL -H ldapi:/// -f krb5.ldif 6)重启openldap 7)测试 [email?protected]:~$ ldappasswd -h 192.168.1.101 -D "[email?protected],ou=hdkrb5,dc=net" -W -S New password: Re-enter new password: Enter LDAP Password: 老密码(LDAP用户的密码,不是指Kerberos用户密码) [email?protected]:~$ 这样修改LDAP用户的密码同时也修改了Kerberos用户密码,用Kerberos用户密码登录也正常 注意/var/lib/heimdal-kdc/m-key文件权限要确保正确(否则虽ldappasswd提示成功,但实际krb5Key属性的值是破损的,无法以Kerberos用户密码登录) 3.因LDAP安装过程自动设置了可匿名读取除userPassword外的其它属性,而krb5Key属性应是包含Kerberos密码信息,是否需设置非本Kerberos用户禁止读取krb5Key ? 4.设置非本地用户SSSD登录自动创建用户目录 2)到/etc/pam.d/common-session中增加一行pam_mkhomedir.so,内容大致如下 #--v-- 新增一行,自动创建用户目录 session [success=ok default=ignore] pam_ldap.so minimum_uid=1000 3)登录 [email?protected]:~$ [email?protected]:~$ pwd /home/krblinlin [email?protected]:~$ 5.文件系统的ACL(访问控制列表) 6.域 即Kerberos的realm是CTP.NET 7.其它 [email?protected]:~# apt-get install tree [email?protected]:~# tree /etc/ldap/slapd.d /etc/ldap/slapd.d |-- cn=config | |-- cn=module{0}.ldif | |-- cn=schema | | |-- cn={0}core.ldif | | |-- cn={1}cosine.ldif | | |-- cn={2}nis.ldif | | |-- cn={3}inetorgperson.ldif | |-- cn=schema.ldif | |-- olcBackend={0}mdb.ldif | |-- olcDatabase={-1}frontend.ldif | |-- olcDatabase={0}config.ldif | |-- olcDatabase={1}mdb.ldif |-- cn=config.ldif [email?protected]:~# 上面是刚安装完openldap后的 如要重新创建ldap数据库 查看ldap数据库 查看配置数据库 八.修正 olcAccess: {2}to * by self write by dn="cn=admin,dc=net" write by * read 不记得是openldap安装包脚本本身设定的,还是我自己弄错,原‘改为‘那行也照抄 因此,原‘改为‘那行 本文已作了修正 附debian 10 testing 版 openldap安装后未经‘改为‘的原始完整olcAccess配置 olcSuffix: dc=ctp,dc=net olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none olcAccess: {1}to attrs=shadowLastChange by self write by * read olcAccess: {2}to * by * read olcLastMod: TRUE olcRootDN: cn=admin,dc=net (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |