Kerberos+LDAP+NFSv4 实现单点登录(下)

六.nfs客户机的安装
nfs客户机也即SSSD客户机,需安装sssd和nfs-common

1.安装sssd
会自动安装libsasl2-modules-gssapi-mit(非依赖)
libsasl2-modules-gssapi-mit和libsasl2-modules-gssapi-heimdal两者冲突,安装libsasl2-modules-gssapi-heimdal也可以

[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
[email protected]:~# cat /etc/sssd/sssd.conf
[sssd]
config_file_version = 2

services = nss, pam
domains = intern

[nss]

[pam]

[domain/intern]

#--v-- unix用户信息由LDAP提供
id_provider = ldap
#--^--

#--v-- 用户认证及密码修改由Kerberos提供
auth_provider = krb5
chpass_provider = krb5
#--^--

ldap_uri = ldap://192.168.1.101
ldap_search_base = ou=hdkrb5,dc=ctp,dc=net
ldap_tls_reqcert = allow

krb5_server = 192.168.1.101
krb5_realm = CTP.NET

#--v-- 有的环境不设总无法认证,应该密码认证要很长时间,需设超时时间大一点
krb5_auth_timeout = 60
#--^--
[email protected]:~#

2)查看nsswitch.conf
[email protected]:~# cat /etc/nsswitch.conf
passwd: files sss
group: files sss
shadow: files sss

gshadow: files

hosts: files mdns4_minimal [NOTFOUND=return] dns
networks: files

protocols: db files
services: db files sss
ethers: db files
rpc: db files

netgroup: nis sss
sudoers: files sss

[email protected]:~#
即将原来的compat改为files sss

3)安装sssd时自动设置/etc/pam.d/
[email protected]:~$ cat /etc/pam.d/common-session-noninteractive
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session required pam_unix.so
session optional pam_umask.so umask=002

[email protected]:~$
[email protected]:~$ cat /etc/pam.d/common-session

session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session required pam_unix.so
session optional pam_sss.so
session optional pam_systemd.so
session optional pam_umask.so umask=002

[email protected]:~$
[email protected]:~$ cat /etc/pam.d/common-password

password requisite pam_pwquality.so retry=3
password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512
password sufficient pam_sss.so use_authtok
password requisite pam_deny.so
password required pam_permit.so
password optional pam_gnome_keyring.so

[email protected]:~$
[email protected]:~$ cat /etc/pam.d/common-auth

auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_sss.so use_first_pass
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_group.so

[email protected]:~$
[email protected]:~$ cat /etc/pam.d/common-account

account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
account requisite pam_deny.so
account required pam_permit.so
account sufficient pam_localuser.so
account [default=bad success=ok user_unknown=ignore] pam_sss.so
[email protected]:~$

4)重启sssd

[email protected]:~# /etc/init.d/sssd stop
[email protected]:~# /etc/init.d/sssd start

5)测试
[email protected]:~$ kpasswd krblinlin
[email protected]‘s Password:
New password for [email protected]:
Verify password - New password for [email protected]:
Success : Password changed

[email protected]:~$

[email protected]:~$ su krblinlin
Password:
[email protected]:/home/linlin$

[email protected]:/home/linlin$ passwd

Current Password:
New password:
BAD PASSWORD: The password is shorter than 8 characters
New password:
Retype new password:
passwd: password updated successfully 要很长时间
[email protected]:/home/linlin$

登录成功,修改密码命令kpasswd、passwd都成功.注意密码是Kerberos密码,非LDAP密码

但某些环境存在一个问题,当kdc服务器重启,SSSD客户机无法登录,需手工在kdc服务器上重启守护进程heimdal-kdc,还找不到原因.而另试另外环境很正常

2.安装nfs-common
[email protected]:~# apt-get install nfs-common

修改/etc/default/nfs-common文件

NEED_GSSD=
改为
NEED_GSSD="yes"

[email protected]:~# /etc/init.d/nfs-common stop
[email protected]:~# /etc/init.d/nfs-common start

[email protected]:~# ps -e |grep gss
1027 ? 00:00:00 rpc.gssd

1)挂载网络共享
手工挂载

[email protected]:~# mount -t nfs4 srvnf.ctp.net:/home/linlin/share /mnt -o sec=krb5

添加到/etc/fstab,一开机挂载网络共享
[email protected]:~# cat /etc/fstab
UUID=c992cbf5-3eca-4434-baf9-b5a3180acdbb / ext4 errors=remount-ro 0 1
#swap was on /dev/sda5 during installation
UUID=854aa36b-6ce5-436d-91fa-50aa10e8338c none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0

#添加网络共享
srvnf.ctp.net:/home/linlin/share /mnt nfs4 rw,sec=krb5
[email protected]:~#

2)查看挂载信息
[email protected]:~$ mount|grep nfs
srvnf.ctp.net:/home/linlin/share on /mnt type nfs4 (rw,relatime,vers=4.0,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=krb5,clientaddr=192.168.1.102,local_lock=none,addr=192.168.1.103)

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]:~$ su krblinlin
Password:
或控制台直接登录
debian login: krblinlin
Password:

[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服务器网络共享

七.后记
本文的目的是要打造一个类似FreeIPA、AD活动目录,而完善的Kerberos系统还需DNS、DHCP配合,所以本文也仅仅实验而已.

实现单点登录的方案多种多样.LDAP同时也提供简单用户认证,如果不需应用NFSv4或NFSv4采用弱的系统认证,无需搭建Kerberos,仅LDAP就可满足单点登录;而samba4可轻松打造一个linux下的活动目录.

1.
Kerberos系统最初由麻省理工开发,即MIT Kerberos项目 ( http://web.mit.edu/kerberos/ ),当前很活跃
另一Kerberos系统即本文的Heimdal Kerberos项目( http://www.h5l.org/ ).

为何本文选Heimdal而不选MIT,前文已讲过,一是使用LDAP作为Kerberos后端,二是避免存储明文的ldap数据库管理员密码.
1)MIT通过插件支持LDAP作为后端,文档也说明支持EXTERNAL,但我搞不掂配置怎支持EXTERNAL,查看源码也看不出头绪
st = ldap_sasl_interactive_bind_s(server->ldap_handle, NULL,ctx->sasl_mech, NULL, NULL,LDAP_SASL_QUIET, interact, ctx);
通过配置文件将"EXTERNAL"传递到ctx->sasl_mech

查找了资料好象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,查看源码简单明了
rc = ldap_sasl_bind_s(HDB2LDAP(db), NULL, "EXTERNAL", &bv,NULL, NULL, NULL);

3)openldap的同步密码插件只支持Heimdal

2.openldap同步密码
当有时以Kerberos登录,有时要以LDAP登录,要维护记住两套密码是麻烦的事情.有3种方法可只使用一个密码

方法1:
使用{SASL}方式,需配置如下面

[email protected]:~# cat /etc/sasl2/slapd.conf
pwcheck_method: saslauthd
[email protected]:~#

userPassword属性填上固定值{SASL}
此方法是搜索网上的方法,本人未试过.

方法2和方法3:安装openldap的同步密码插件slapd-smbk5pwd

方法2:
userPassword属性填上固定值{K5KEY}
方法2和方法1都要注意不要改动到userPassword属性的值,并且修改密码只能用Kerberos方式

方法3:
修改密码只能用LDAP方式,且只能用类似ldappasswd命令的方式,同时修改了userPassword、krb5Key .
ldappasswd is a tool to set the password of an LDAP user. ldappasswd uses the LDAPv3 Password Modify (RFC 3062) extended operation.
注意ldappasswd是LDAP一扩展操作,详细请参考RFC 3062.
我对ldappasswd的理解应该是发送未经散列的明文密码到LDAP服务器,由LDAP服务器自己散列成密文存储到ldap数据库.
而普通ldap修改密码是要自己在客户端将明文密码散列成密文,LDAP服务器不再变换而存储到ldap数据库,也就是说本来LDAP的密码属性和其它属性没什么区别,普通ldap修改密码的方式就是如同修改其它属性值.
方法3可做到Kerberos、LDAP、samba三套密码同步

本文采用方式2或方式3
1)安装

[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用户拥有
m-key原权限是root拥有,仅root读写.而openldap是以openldap用户启动.
如不先改m-key权限,而先执行步骤5),则会因无权限而ldapadd出错

[email protected]:~# chown openldap /var/lib/heimdal-kdc/m-key

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
通常在线配置,是立即生效,但因/var/lib/heimdal-kdc/m-key文件权限问题,所以还是重启openldap为好

7)测试
以普通本地用户登录

[email protected]:~$ ldappasswd  -h 192.168.1.101 -D "[email protected],ou=hdkrb5,dc=ctp,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 ?
本人不才,未见有相关资料有明确设置禁止,是不是即使krb5Key被非法获取,没有/var/lib/heimdal-kdc/m-key也无法破解密码吗?

4.设置非本地用户SSSD登录自动创建用户目录
上面的实验krblinlin登录到客户机,该客户机不存在krblinlin的用户目录.
可使用pam_mkhomedir.so来自动创建用户目录,pam_mkhomedir.so在libpam-modules包中
1)安装
[email protected]:~# apt-get install libpam-modules

2)到/etc/pam.d/common-session中增加一行pam_mkhomedir.so,内容大致如下
...
session required pam_unix.so

#--v-- 新增一行,自动创建用户目录
session required pam_mkhomedir.so umask=0077
#--^--

session [success=ok default=ignore] pam_ldap.so minimum_uid=1000
...

3)登录
debian login: krblinlin
Password:
Creating directory ‘/home/krblinlin‘.已正常首次登录创建用户目录

[email protected]:~$
[email protected]:~$ pwd
/home/krblinlin
[email protected]:~$

5.文件系统的ACL(访问控制列表)
虽说NFSv4的是 NFSv4 acl,但本实验仍是posix acl,猜测NFSv4 acl可能需本地文件系统支持吧,好象只有zfs本地文件系统才支持NFSv4 acl

6.域
LDAP域和Kerberos域可以不同

即Kerberos的realm是CTP.NET
LDAP的基本DN 可以是dc=oled,dc=com

7.其它
debian 9安装openldap过程是使用mdb作为LDAP的后端,而LDAP还可选hdb等其它作为后端.选不同的后端,其配置目录、文件名称及配置数据库条目内容按后端名称
如本实验是mdb

[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数据库
[email protected]:~# dpkg-reconfigure slapd
配置过程中假如选hdb作为后端,则相关内容是hdb

查看ldap数据库
[email protected]:~# slapcat

查看配置数据库
[email protected]:~# slapcat -b cn=config

八.修正
实验时的环境是 debian 9 testing 版
第三章节第1小节的2)设置ACL访问控制列表,那行‘将‘

olcAccess: {2}to * by self write by dn="cn=admin,dc=ctp,dc=net" write by * read

不记得是openldap安装包脚本本身设定的,还是我自己弄错,原‘改为‘那行也照抄to * by self write
这是严重的漏洞及错误.‘to * by self write‘会允许ldap用户修改本身条目的任何属性,
如ldap用户可将自己的unix 的uidNumber设为0即根用户,这很危险,即普通用户可以提权自己(虽然ldap客户机默认配置将ldap的uidNumber值为0映射为非根用户)或冒充其他用户.
所以,原则ldap用户只允许修改本身及只能修改密码属性,其他属性只能由管理员设置.

因此,原‘改为‘那行
olcAccess: {2}to * by self write by dn="cn=admin,dc=ctp,dc=net" write by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * read
实际是需改为
olcAccess: {2}to * by dn="cn=admin,dc=ctp,dc=net" write by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * read

本文已作了修正

附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=ctp,dc=net

原文地址:https://blog.51cto.com/13752418/2443824

时间: 2024-10-29 01:28:25

Kerberos+LDAP+NFSv4 实现单点登录(下)的相关文章

Kerberos+LDAP+NFSv4 实现单点登录(续2)--一键安装

( 附:LDAP简单认证登录 login4ldap-ver0.0.6.zip 源代码 下载地址 http://u.163.com/NeMVmlIT 提取码: ObEubL7Y ) 上篇Kerberos+LDAP+NFSv4 实现单点登录(续1)链接地址http://lulinlin1.lofter.com/post/1cf3848f_11f58066?act=qbbloglofter_20150506_01 本篇是前两篇的总结,编写成一键安装脚本onekeysso.sh,并需名为dns.ldif

Kerberos+LDAP+NFSv4 实现单点登录(续4)--SASL/GSSAPI

前篇<Kerberos+LDAP+NFSv4 实现单点登录(续1)--dns+dhcp>的krb5 + ldap + bind9 + bind9-dyndb-ldap 全面升级到debian 10,出现bind9-dyndb-ldap的GSSAPI+krb5_keytab认证机制无法连接ldap数据库.查看日志:SASL/GSSAPI authentication startedError: Local errorAdditional info: SASL(-1): generic failu

Kerberos+LDAP+NFSv4 实现单点登录

Kerberos : 身份认证LDAP : 目录信息服务NFSv4 : 网络共享 实验环境 : debian 9 三台主机:nfs服务器 : 192.168.1.103nfs客户机 : 192.168.1.102 即SSSD客户端+NFS客户端kdc服务器 : 192.168.1.101 即Kerberos+LDAP 以下 [email protected]:~# 表示以root根用户运行命令 一.安装NTP时间同步要使用Kerberos提供身份认证,各主机需时间同步 在一台主机上安装时间同步服

Kerberos+LDAP+NFSv4 实现单点登录(上)

Kerberos : 身份认证LDAP : 目录信息服务NFSv4 : 网络共享 实验环境 : debian 9 三台主机:nfs服务器 : 192.168.1.103nfs客户机 : 192.168.1.102 即SSSD客户端+NFS客户端kdc服务器 : 192.168.1.101 即Kerberos+LDAP 以下 [email protected]:~# 表示以root根用户运行命令 一.安装NTP时间同步要使用Kerberos提供身份认证,各主机需时间同步 在一台主机上安装时间同步服

Kerberos+LDAP+NFSv4 实现单点登录(中)

五.nfs服务器的安装1.安装nfs-kernel-server[email protected]:~# apt-get install nfs-kernel-server nfs-common 修改/etc/default/nfs-kernel-server文件将NEED_SVCGSSD=""改为NEED_SVCGSSD="yes" 重启nfs-kernel-server [email protected]:~# /etc/init.d/nfs-kernel-se

基于CAS实现单点登录(SSO):CAS+LDAP实现单点登录认证

[一].概述 CAS是N个系统的中心认证入口,而贯穿多个系统的用户信息是共用的,应该被单独维护,而这些信息可能属于不用的系统,不用的组织,不用的国家,从而形成了树形结构,而使用关系型数据库维护树形结构信息是它的弱点,这就是本文CAS和LDAP整合的初衷. 本来主要详细是介绍CAS和LDAP整合实现单点登录的步骤. [二].详细步骤 1.LDAP安装配置 详见: 介绍openLDAP在windows上的安装配置 安装配置,添加部分测试数据如下: 2.CAS的基础安装配置: 见SSO之CAS单点登录

ofbiz SSO 单点登录

 1.ofbiz单点登录介绍 ofbiz点单登录是集成了CAS SSO,LDAP使用的,具体的CAS与LDAP怎么应用,在这里不做介绍. 2.ofbiz点单登录文档 ofbiz 12版本中,有英文的简单的ofbiz单点登录的问题. 路径在:apache-ofbiz-12.04.01\framework\documents\SingleSignOn.xml 3.ofbiz单点登录目录 ofbiz  单点登录集成的目录在:apache-ofbiz-12.04.01\specialpurpose\

[转]使用 LDAP 组或角色限制访问,包含部分单点登录SSO说明

参考:http://www-01.ibm.com/support/knowledgecenter/api/content/SSEP7J_10.2.2/com.ibm.swg.ba.cognos.crn_arch.10.2.2.doc/c_restrict_access_using_ldap_groups_or_roles.html#Restrict_Access_Using_LDAP_Groups_or_Roles?locale=zh 使用 LDAP 组或角色限制访问 LDAP 目录中并非所有用

CAS服务器集群和客户端集群环境下的单点登录和单点注销解决方案

CAS的集群环境,包括CAS的客户应用是集群环境,以及CAS服务本身是集群环境这两种情况.在集群环境下使用CAS,要解决两个问题,一是单点退出(注销)时,CAS如何将退出请求正确转发到用户session所在的具体客户应用服务器,而不是转发到其他集群服务器上,二是解决CAS服务端集群环境下各种Ticket信息的共享. CAS集群部署 由于CAS Server是一个Web应用,因此可部署在Tomcat等容器中.直接部署CAS集群并使用负载均衡配置后,由于每次访问的CAS Server不固定,会发生通