[TOC]
0x00 基础加深 描述:通过上一篇笔记的学习以及操作,我们已经完成吧账号属性导入了OpenLDAP中,然后通过OpenLDAP用户进行验证登陆所以我们还需对客户端进行配置; 除此之外我们还将常见的开源应用进行接入OpenLDAP之中进行应用;
(1) 用户与用户组的对应有如何关系?
Posixgroup用户组属性
: OpenLDAP默认属性,该Posixgroup用户组属性和用户没有实际的对应关系,如果需要进行对应就需要把用户设置到Posixgroup中,且成员属性为memberUid
,然后再把Dev该用户的gidNumber设置为上述用户组的gidNumber;
以上设置基本可以满足大部分业务场景的需要,但是如果我们需要根据用户组来过滤用户的话,Posixgroup用户组属性,是无法满足需要的,比如:nginx与openldap集成过滤用户组时、proftpd与openldap集成过滤用户组时、openvpn与openldap集成过滤用户组时、gitlab与openldap集成过滤用户组时,Posixgroup用户组属性是无法满足的
,此时我们就需要使用groupOfUniqueNames用户组属性。
weiyigeek.top-
groupOfUniqueNames用户组属性
:可以根据用户组过滤用户(过滤唯一),roupOfUniqueNames用户组属性的成员属性为uniqueMember
,可以看到groupOfUniqueNames用户组属性配置如下:
weiyigeek.top-
0x01 认证配置 多组平台认证 描述:通过前面对LDAP Account Manager的管理配置,默认情况下创建的用户会在People而创建的组会保存在Group之中;
本段文章主要实践在Ldap中通过memberof的一个功能来实现添加多组用于不同的平台认证
,首先需要查看我采用Docker搭建的openldap是支持memberof的功能。
[TOC]
0x00 基础加深 描述:通过上一篇笔记的学习以及操作,我们已经完成吧账号属性导入了OpenLDAP中,然后通过OpenLDAP用户进行验证登陆所以我们还需对客户端进行配置; 除此之外我们还将常见的开源应用进行接入OpenLDAP之中进行应用;
(1) 用户与用户组的对应有如何关系?
Posixgroup用户组属性
: OpenLDAP默认属性,该Posixgroup用户组属性和用户没有实际的对应关系,如果需要进行对应就需要把用户设置到Posixgroup中,且成员属性为memberUid
,然后再把Dev该用户的gidNumber设置为上述用户组的gidNumber;
以上设置基本可以满足大部分业务场景的需要,但是如果我们需要根据用户组来过滤用户的话,Posixgroup用户组属性,是无法满足需要的,比如:nginx与openldap集成过滤用户组时、proftpd与openldap集成过滤用户组时、openvpn与openldap集成过滤用户组时、gitlab与openldap集成过滤用户组时,Posixgroup用户组属性是无法满足的
,此时我们就需要使用groupOfUniqueNames用户组属性。
weiyigeek.top-
groupOfUniqueNames用户组属性
:可以根据用户组过滤用户(过滤唯一),roupOfUniqueNames用户组属性的成员属性为uniqueMember
,可以看到groupOfUniqueNames用户组属性配置如下:
weiyigeek.top-
0x01 认证配置 多组平台认证 描述:通过前面对LDAP Account Manager的管理配置,默认情况下创建的用户会在People而创建的组会保存在Group之中;
本段文章主要实践在Ldap中通过memberof的一个功能来实现添加多组用于不同的平台认证
,首先需要查看我采用Docker搭建的openldap是支持memberof的功能。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 $docker exec -it openldap slapcat -n 0 | grep olcModuleLoadolcModuleLoad: {0}back_mdb olcModuleLoad: {1}memberof olcModuleLoad: {2}refint docker exec openldap ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn dn: cn=config dn: cn=module{0},cn=config dn: cn=schema,cn=config dn: cn={0}core,cn=schema,cn=config dn: cn={1}cosine,cn=schema,cn=config dn: cn={2}nis,cn=schema,cn=config dn: cn={3}inetorgperson,cn=schema,cn=config dn: cn={4}ppolicy,cn=schema,cn=config dn: cn={5}dhcp,cn=schema,cn=config dn: cn={6}dnszone,cn=schema,cn=config dn: cn={7}mail,cn=schema,cn=config dn: cn={8}mmc,cn=schema,cn=config dn: cn={9}openssh-lpk,cn=schema,cn=config dn: cn={10}quota,cn=schema,cn=config dn: cn={11}radius,cn=schema,cn=config dn: cn={12}samba,cn=schema,cn=config dn: cn={13}zarafa,cn=schema,cn=config dn: olcBackend={0}mdb,cn=config dn: olcDatabase={-1}frontend,cn=config dn: olcDatabase={0}config,cn=config dn: olcDatabase={1}mdb,cn=config dn: olcOverlay={0}memberof,olcDatabase={1}mdb,cn=config dn: olcOverlay={1}refint,olcDatabase={1}mdb,cn=config
操作流程:
Step1.登录LAM新建立一个组选择Groups选项卡
->New Group
,然后Tree View
->ou=Group
查看新建立的组;
weiyigeek.top-
Step2.此处以Gitlab ,Jenkins ,SonarQube以及Harbor为例创建四个用户,先创建一个gituser为例其账号密码相同Users
->New User
->last Name
(其他属性按需求添加)->set Password
,建议在建立用户的时候将RDN identifier
设置为uid,其他三个用户类似创建即可;
weiyigeek.top-
Step3.创建四个Object属性为 groupOfUniqueNames 的组(作用:根据用户组过滤用户该过滤是唯一的
) 分别对应上面四个平台,选择组ou=Group
->Create new entry here
->Default
->Object classes:groupOfUniqueNames
->Proceed
->添加基础信息然后commit;
weiyigeek.top-
最终创建结果如下:
weiyigeek.top-
采用ldapsearch输出LDAP.ldif格式的文件来看我们创建的组与用户;1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 $ldapsearch -LLL -x -H ldap://127.0.0.1:389/ -D "cn=admin,dc=WeiyiGeek,dc=com,dc=cn" -b "dc=WeiyiGeek,dc=com,dc=cn" dn uniqueMember -w WeiyiGeekdn: cn=gitlab,ou=Group,dc=WeiyiGeek,dc=com,dc=cn uniqueMember: uid=gituser,ou=People,dc=WeiyiGeek,dc=com,dc=cn dn: cn=harbor,ou=Group,dc=WeiyiGeek,dc=com,dc=cn uniqueMember: uid=haruser,ou=People,dc=WeiyiGeek,dc=com,dc=cn dn: cn=jenkins,ou=Group,dc=WeiyiGeek,dc=com,dc=cn uniqueMember: cn=jenkuser,ou=People,dc=WeiyiGeek,dc=com,dc=cn dn: cn=sonarqube,ou=Group,dc=WeiyiGeek,dc=com,dc=cn uniqueMember: uid=sonaruser,ou=People,dc=WeiyiGeek,dc=com,dc=cn $ldapsearch -LLL -x -H ldap://127.0.0.1:389/ -D "cn=admin,dc=WeiyiGeek,dc=com,dc=cn" -b "dc=WeiyiGeek,dc=com,dc=cn" "(|(objectClass=inetOrgPerson)(objectClass=groupOfUniqueNames))" -w WeiyiGeekdn: uid=gituser,ou=People,dc=WeiyiGeek,dc=com,dc=cn objectClass: posixAccount objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person loginShell: /bin/bash homeDirectory: /home/gituser userPassword:: e1NTSEF9UGVyM21xc1dJcnV3K1d2bWRiVmVpd3RWZHVVeVN6Tks= uid: gituser cn: gituser uidNumber: 10000 gidNumber: 10000 sn: gituser mail: gituser@weiyigeek.top dn: cn=jenkuser,ou=People,dc=WeiyiGeek,dc=com,dc=cn objectClass: posixAccount objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person loginShell: /bin/bash homeDirectory: /home/jenkuser uid: jenkuser cn: jenkuser uidNumber: 10001 gidNumber: 10000 userPassword:: e1NTSEF9UlpQM0VCOE5qSW92bzVvL3NlTUVvVEVOSlZoc1NFcFI= sn: jenkuser mail: jenkuser@weiyigeek.top dn: uid=sonaruser,ou=People,dc=WeiyiGeek,dc=com,dc=cn objectClass: posixAccount objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person loginShell: /bin/bash homeDirectory: /home/sonaruser uid: sonaruser cn: sonaruser uidNumber: 10002 gidNumber: 10000 userPassword:: e1NTSEF9SVRMTjJ4SGc1YS85bmNwQzlsU2NXcUhuYWNSWFdUTlo= sn: sonaruser mail: sonaruser@weiyigeek.top dn: uid=haruser,ou=People,dc=WeiyiGeek,dc=com,dc=cn objectClass: posixAccount objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person loginShell: /bin/bash homeDirectory: /home/haruser uid: haruser cn: haruser uidNumber: 10003 gidNumber: 10000 userPassword:: e1NTSEF9QVp4SXV2VnlDWmR1MVpsZEQ1SEpHUW9NUDh4dlJUQXc= sn: haruser mail: haruser@weiyigeek.top dn: cn=gitlab,ou=Group,dc=WeiyiGeek,dc=com,dc=cn cn: gitlab description:: Z2l0bGFiIOW5s+WPsOS7k+W6k+iupOivgee7hA== objectClass: groupOfUniqueNames objectClass: top ou: Group uniqueMember: uid=gituser,ou=People,dc=WeiyiGeek,dc=com,dc=cn dn: cn=jenkins,ou=Group,dc=WeiyiGeek,dc=com,dc=cn cn: jenkins description:: amVua2lucyDmjIHnu63pm4bmiJDkuI7lj5HluIPlubPlj7DorqTor4E= objectClass: groupOfUniqueNames objectClass: top ou: Group uniqueMember: cn=jenkuser,ou=People,dc=WeiyiGeek,dc=com,dc=cn dn: cn=sonarqube,ou=Group,dc=WeiyiGeek,dc=com,dc=cn cn: sonarqube description:: c29uYXJxdWJlIOS7o+eggei0qOmHj+a1i+ivleW5s+WPsA== objectClass: groupOfUniqueNames objectClass: top ou: Group uniqueMember: uid=sonaruser,ou=People,dc=WeiyiGeek,dc=com,dc=cn dn: cn=harbor,ou=Group,dc=WeiyiGeek,dc=com,dc=cn cn: harbor description:: aGFyYm9yIOW5s+WPsOiupOivgeS7k+W6kw== objectClass: groupOfUniqueNames objectClass: top ou: Group uniqueMember: uid=haruser,ou=People,dc=WeiyiGeek,dc=com,dc=cn
至此,LDAP Account Manager平台上的操作就暂告一段落了,接下来我们就靠这个uniqueMember属性来实现不同分组验证登陆到不同的平台。
0x02 应用服务接入 Ldap与sshd 描述:采用SSH进行远程LDAP用户验证登陆,先查询本地数据库中是否存在该用户如果不存在则从LDAP中请求查看该用户,并使用该用户密码进行验证登陆 ;
基础操作:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 service sssd stop && chkconfig sssd off yum install nss-pam-ldapd $vim /etc/nslcd.confuid nslcd gid ldap uri ldap://10.10.107.254/ base dc=WeiyiGeek,dc=com,dc=cn binddn cn=admin,dc=WeiyiGeek,dc=com,dc=cn bindpw WeiyiGeek ssl no $vim /etc/pam_ldap.confauth required pam_env.so auth required pam_faildelay.so delay=2000000 auth sufficient pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 1000 quiet_success auth required pam_deny.so auth sufficient pam_ldap.so use_first_pass account required pam_unix.so account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 1000 quiet account required pam_permit.so account [default=bad success=ok user_unknown=ignore] pam_ldap.so password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password required pam_deny.so password sufficient pam_ldap.so use_authok session optional pam_keyinit.so revoke session required pam_limits.so -session optional pam_systemd.so session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so session optional pam_ldap.so $vim /etc/pam.d/system-authsession optional pam_mkhomedir.so skel=/etc/skel/ umask =0022 $vim /etc/nsswitch.confpasswd: files ldap shadow: files ldap group: files ldap $vim /etc/sysconfig/authconfigCACHECREDENTIALS=yes FAILLOCKARGS="deny=4 unlock_time=1200" FORCELEGACY=no FORCESMARTCARD=no IPADOMAINJOINED=no IPAV2NONTP=no PASSWDALGORITHM=md5 USEDB=no USEECRYPTFS=no USEFAILLOCK=no USEFPRINTD=no USEHESIOD=no USEIPAV2=no USEKERBEROS=no USELDAP=yes USELDAPAUTH=yes USELOCAUTHORIZE=yes USEMKHOMEDIR=no USENIS=no USEPAMACCESS=no USEPASSWDQC=no USEPWQUALITY=yes USESHADOW=yes USESMARTCARD=no USESSSD=no USESSSDAUTH=no USESYSNETAUTH=no USEWINBIND=no USEWINBINDAUTH=no WINBINDKRB5=no systemctl restart nslcd ldapsearch -H ldap://172.27.1.111 -x -b "cn=admin,dc=WeiyiGeek,dc=com,dc=cn" |grep dn ldapsearch -x -b "cn=admin,dc=WeiyiGeek,dc=com,dc=cn" |grep dn ldapsearch -x -b "uid=ldaptest3,ou=People,dc=WeiyiGeek,dc=com,dc=cn" | grep dn
ssh支持LDAP相关配置:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 $vim /etc/ssh/sshd_configUsePAM yes $vim /etc/pam.d/sshd session required pam_mkhomedir.so account required pam_access.so $vim /etc/pam.d/password-auth $vim /etc/security/access.conf -:ldaptest3:ALL systemctl restart sshd
测试结果:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 [ldaptest1@localhost ~]$ getent passwd | grep -E "ldap|ns" nscd:x:28:28:NSCD Daemon:/:/sbin/nologin nslcd:x:65:55:LDAP Client User:/:/sbin/nologin ldaptest1:x:1001:1001:ldaptest1:/home/ldaptest1:/bin/bash ldaptest2:x:1002:1002:ldaptest2:/home/ldaptest2:/bin/bash ldaptest3:x:1003:1003:ldaptest3:/home/ldaptest3:/bin/bash [ldaptest2@localhost ~]$ passwd 更改用户 ldaptest2 的密码 。 (current) LDAP Password: 新的 密码: 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 [root@localhost ~] root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin dhcpd:x:177:177:DHCP server:/:/sbin/nologin nscd:x:28:28:NSCD Daemon:/:/sbin/nologin nslcd:x:65:55:LDAP Client User:/:/sbin/nologin [root@localhost ~] ldaptest1:x:1001:1001:ldaptest1:/home/ldaptest1:/bin/bash ldaptest2:x:1002:1002:ldaptest2:/home/ldaptest2:/bin/bash ldaptest3:x:1003:1003:ldaptest3:/home/ldaptest3:/bin/bash [root@localhost ~] uid=1001(ldaptest1) gid=1001(ldaptest1) 组=1001(ldaptest1) [root@localhost ~] ldaptest1:*:18363:0:99999:7:::0 $tail -n 5 -f messagesApr 12 01:16:30 localhost nslcd[6617]: [f37e85] <authc="ldaptest2" > uid=ldaptest2,ou=People,dc=WeiyiGeek,dc=com,dc=cn: lookup failed: Invalid credentials Apr 12 01:16:33 localhost nslcd[6617]: [10b4e8] <authc="ldaptest2" > uid=ldaptest2,ou=People,dc=WeiyiGeek,dc=com,dc=cn: lookup failed: Invalid credentials
登录结果:
weiyigeek.top-
图形化简化部署 描述:采用setup工具进行图形化部署OpenLDAP客户端(新手推荐)1 2 3 4 5 6 7 8 9 yum install setuptool -y cp /etc/nsswitch.conf /etc/nsswitch.conf.bak cp /etc/pam.d/system-auth-ac /etc/pam.d/system-auth-ac.bak vimdiff /etc/nsswitch.conf /etc/nsswitch.conf.bak vimdiff /etc/pam.d/system-auth-ac /etc/pam.d/system-auth-ac.bak
图形化部署OpenLDAP客户端之采用LDAP认证
weiyigeek.top-