LDAP学习笔记之五:LDAP客户端实现系统帐号验证
一、创建LDAP认证用户及权限
1.控制台修改密码的存储格式(因为从NIS迁移来的账号密码是cyrpt,ldap默认SSHA格式)
2.控制台创建一个用户,并给该用户指定ACI权限,用于linux客户端连接ldap server(默认使用匿名用户)
3.给client-root用户添加权限
设置ACI名称及选择需要绑定的用户
取消默认权限并按权限名称排序
点击ok保存即可,再点击OK退出
修改匿名用户的权限,确保是从新打开权限设置(退出再打开,否则报语法错误)
二、迁移NIS数据
1.配置NIS客户端
1 2 3 4 5 6 | [root@ldap-server1 ~]# nisdomainname ldap-server1.example.com [root@ldap-server1 ~]# vim /etc/yp.conf domain ldap-server1.example.com server ldap-server1.example.com [root@ldap-server1 ~]# systemctl restart rpcbind [root@ldap-server1 ~]# systemctl restart ypbind [root@ldap-server1 ~]# yptest #确保可以成功,NIS服务可以参考 https: //www.cnblogs.com/panwenbin-logs/p/16055480.html |
2.生成导入的ldif文件
1 2 3 4 5 6 7 8 9 | [root@ldap-server1 ~]# ypcat group > /tmp/ group -file # /usr/share/dirsrv/schema/10rfc2307.ldif包含了系统想用的NIS map [root@ldap-server1 ~]# ypcat passwd > /tmp/passwd-file [root@ldap-server1 ~]# for i in `cut -d : -f 1,2 /tmp/passwd-file`; do echo ${i}:$[$(date +%s)/866400]:0:99999:7:::;done > /tmp/shadow-file #修改错shodow文件的格式 [root@ldap-server1 ~]# for i in `awk -F ':' '{print $2}' /tmp/passwd-file`; do sed -i 's/$6$.\{95\}/x/g' /tmp/passwd-file;done #即将密码内容替换为x,即passwod文件的格式 [root@ldap-server1 ~]# vim /etc/yp.conf #删除nis配置 [root@ldap-server1 ~]# systemctl stop ypbind [root@ldap-server1 ~]# yum install -y migrationtools #安装迁移脚本 [root@ldap-server1 ~]# cd /usr/share/migrationtools/ [root@ldap-server1 migrationtools]# vim migrate_common.ph #修改迁移脚本 |
修改61行: Group为 Groups(openladp无需修改,RHDS 389-ds需要修改)
修改71、74行:设置LDAP DN及邮件域名
修改90行:1表示使用inetOrgPerson辅助类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@ldap-server1 migrationtools]# ./migrate_base.pl > /tmp/ base .ldif [root@ldap-server1 migrationtools]# vim /tmp/ base .ldif #删除以下三个条目 dn: dc=server1,dc=example,dc=com dn: ou=People,dc=server1,dc=example,dc=com dn: ou=Groups,dc=server1,dc=example,dc=com [root@ldap-server1 migrationtools]# vim migrate_passwd.pl 188 open(SHADOW, "/tmp/shadow-file" ) || return ; #将/etc/shadow修改为/tmp/shadow-file [root@ldap-server1 migrationtools]# ./migrate_passwd.pl /tmp/passwd-file > /tmp/passwd.ldif [root@ldap-server1 migrationtools]# ./migrate_group.pl /tmp/ group -file > /tmp/ group .ldif [root@ldap-server1 migrationtools]# vim ~/.ldaprc #配置LDAP客户端 BINDDN cn:Directory Manager [root@ldap-server1 migrationtools]# cat /etc/openldap/ldap.conf BASE dc=server1,dc=example,dc=com URI ldap: //server1.example.com [root@ldap-server1 migrationtools]# ldapadd -x -W -f /tmp/ base .ldif #导入数据 [root@ldap-server1 migrationtools]# ldapadd -x -W -f /tmp/passwd.ldif -c [root@ldap-server1 migrationtools]# ldapadd -x -W -f /tmp/ group .ldif -c [root@ldap-server1 migrationtools]# scp /etc/openldap/certs/cacert.pem 192.168.1.134:/etc/openldap/certs/cacert.pem #拷贝数据到客户端 |
验证导入结果
三、配置客户端机器
1 2 3 4 | [root@localhost ~]# vim /etc/hosts #确保和服务端网络连通 192.168.1.132 ldap-server1.example.com [root@localhost ~]# yum install -y nss_ldap openldap openldap-servers openldap-clients nss-pam-ldapd sssd #安装必要的包 [root@localhost ~]# yum install -y authconfig-gtk |
1.配置客户端使用LDAP验证,主要有以下几种方式
A.命令行图形界面
B.图形界面配置
C:命令行
1 | authconfig --enableldap --enableldapauth --ldapserver= "ldap-server1.example.com" --ldapbasedn= "dc=ldap-server1,dc=example,dc=com" --enableldaptls -–enablemkhomedir --update |
以上操作会自动生成 /etc/sysconfig/authconfig 及 /etc/nslcd.conf 文件并根据配置内容替换相关配置
2.配置nslcd服务
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 | [root@localhost ~]# vim /etc/nslcd.conf #想使 nss 可以查询ldap,那么首先就需要启用一个叫 nslcd 的服务 [root@localhost ~]# grep "^[a-z]" /etc/nslcd.conf uid nslcd gid ldap uri ldap: //ldap-server1.example.com/ #LDAP服务器地址 base dc=ldap-server1,dc=example,dc=com #LDAP suffix DN binddn uid=client-root,dc=ldap-server1,dc=example,dc=com #链接的用户,之前创建的client-root bindpw secret #client-root的密码 ssl start_tls #启用TLS tls_cacertfile /etc/openldap/certs/cacert.pem #CA证书配置 [root@localhost ~]# vim /etc/nsswitch.conf passwd: files ldap #将nss修改为ldap shadow: files ldap group : files ldap [root@localhost ~]# sed -i 's/pam_sss.so/pam_ldap.so/g' /etc/pam.d/system-auth #将系统和ssh的验证修改为ldap [root@localhost ~]# sed -i 's/pam_sss.so/pam_ldap.so/g' /etc/pam.d/password-auth [root@localhost ~]# cat ~/.ldaprc #配置LDAP客户端, BINDDN cn=Directory Manager [root@localhost ~]# cat /etc/openldap/ldap.conf URI ldap: //ldap-server1.example.com/ BASE dc=ldap-server1,dc=example,dc=com TLS_CACERT /etc/openldap/certs/cacert.pem [root@localhost ~]# ldapsearch -x -ZZ [root@localhost ~]# vim /etc/sysconfig/authconfig [root@localhost ~]# grep -i yes /etc/sysconfig/authconfig #authconfig 文件由 authconfig 包自动创建。 配置该文件的目的是用来跟踪 LDAP 身份认证机制是否正确启用 CACHECREDENTIALS=yes USEFPRINTD=yes USELDAP=yes USELDAPAUTH=yes USELOCAUTHORIZE=yes USEMKHOMEDIR=yes USEPWQUALITY=yes USESHADOW=yes USESSSD=yes [root@localhost pam.d]# getent passwd [root@localhost ~]# grep "^[a-z]" /etc/sssd/sssd.conf autofs_provider = ldap # 配置 autofs 的提供程序为 ldap cache_credentials = True # 开启缓存 ldap_search_base = dc=ldap-server1,dc=example,dc=com # ldap 查询的 base dn id_provider = ldap # id 的提供程序为 ldap auth_provider = ldap # 配置 auth 认证的提供程序为 ldap chpass_provider = ldap # 更改密码 操作时的对用应用 ldap_uri = ldap: //ldap-server1.example.com/ # ldap 的 URL 路径 ldap_id_use_start_tls = True # 开启 ldap 的 tls 加密 ldap_tls_cacert = /etc/openldap/certs/cacert.pem # ldap 服务 tls 加密信任证书(CA根证书)ldap_tls_reqcert = never #如果不想强制启用TLS,可以设置此参数,类似ldapsearch -Z 和-ZZ的区别services = nss, pam, autofs # 提供的服务 domains = default # 设置启用的域 homedir_substring = /home [root@localhost ~]# systemctl restart sssd #启动服务 [root@localhost ~]# systemctl restart nslcd |
3.测试
切换到ldap用户时提示没有用户目录,可以通过以下配置解决
1 2 | [root@localhost ~]# vim /etc/pam.d/sshd session required pam_mkhomedir.so skel=/etc/skel/ umask=0022 #添加该行 |
其他问题:
org.freedesktop.DBus.Error.ServiceUnknown: The name com.redhat.oddjob_mkhomedir was not provided by any .service files
1 2 | 检查一下systemctl status oddjobd 是否启动。 最好再检查一下dbus.socket 和 dbus.service 这两个服务 是否正常 |
四、客户端自动挂载配置
以上配置会出现一个这样的问题,如果用户在不同的客户机上都创建自己的家目录,无法做到在不同的客户机下共享家目录,所以我们将使用NFS服务为每个用户都创建自己自己的共享目录,用户从不同的客户机上登录时,都挂载使用NFS服务器上的共享目录,这样就能保证用户家目录下的文件一致了
1、LDAP服务器上NFS共享配置
NFS服务也可以单独搭建在另外一台服务器。由于我使用的是虚拟机,所以这里我把NFS服务也部属在LDAP服务器上。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [root@ldap-server1 ~]# cd /home/ [root@ldap-server1 home]# mkdir guests [root@ldap-server1 home]# cp -ar nis-user* guests/ #由于默认在/home下,挂载到其他机器会覆盖其他机器用户的家目录,需要换个路径 [root@ldap-server1 ~]# yum install nfs-utils -y # 安装软件包 [root@ldap-server1 ~]# vim /etc/exports /home/guests 192.168.1.0/24(rw) [root@ldap-server1 ~]# exportfs -rv #使配置生效 exporting 192.168.1.0/24:/home [root@ldap-server1 ~]# exportfs -v /home 192.168.1.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,root_squash,no_all_squash) [root@ldap-server1 ~]# systemctl enable rpcbind [root@ldap-server1 ~]# systemctl restart rpcbind [root@ldap-server1 ~]# systemctl enable nfs [root@ldap-server1 ~]# systemctl restart nfs |
如果有防火墙,配置防火墙策略
1 2 3 4 | firewall-cmd --permanent --add-service=nfs firewall-cmd --permanent --add-service=rpc-bind firewall-cmd --permanent --add-service=mountd firewall-cmd --reload |
2.修改LDAP上用户的家目录,以nis-user1为例
到此,服务器端就配置完成了
2、客户端配置
查看服务端共享
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@nis-client ~]# showmount -e 192.168.1.132 #--查看服务端共享,正常显示如下,否则防火墙策略没配置对或服务未正常启动 Export list for 192.168.1.132: /home/guests 192.168.1.0/24 [root@nis-client ~]# yum install autofs nfs-utils -y [root@nis-client ~]# vim /etc/auto.master /home/guests /etc/auto.guests #加入这一行 说明: /home/guests --指定需要把远程服务器上的目录挂载到本地客户端的哪个目录下。 /etc/auto.guests ---指定挂载时用到的子配置文件名,这是一个映射文件,名字可以随便取,路径也可以随便。 启动autofs.service的时候,会自动创建/home/guests目录。并且autofs服务会一直监控这个目录,只要有用户访问这个目录时,它就会触发 /etc/auto.guests 配置文件。然后根据这个配置文件的内容为用户挂载指定目录。 [root@nis-client ~]# vim /etc/auto.guests * -rw,nfs4 192.168.1.132:/home/guests/& 说明: * 表示客户端用户访问 /home/guests 目录下的任意内容。比如,我执行命令:ls /home/guests/abcderfg,那么*号就表示abcdefg & 表示服务器端”192.168.1.132:/home/guests/“目录下的abcderfg。即*和&是一致的 [root@nis-client ~]# systemctl restart autofs |
3.验证
1 2 3 4 5 6 7 8 9 10 11 12 | [root@nis-client home]# ll /home/guests/ 总用量 0 [root@nis-client guests]# su - nis-user1 # 切换到LDAP用户,切换的时候会自动挂载NFS服务器上的用户目录 上一次登录:四 3月 31 15:18:11 CST 2022pts/2 上 [nis-user1@nis-client ~]$ pwd /home/guests/nis-user1 [nis-user1@nis-client ~]$ ls /home/guests/nis-user2 #ls 访问nis-user2时会自动创建nis-user2目录 ls: 无法打开目录/home/guests/nis-user2: 权限不够 [nis-user1@nis-client ~]$ ll /home/guests/ 总用量 0 drwx------ 5 nis-user1 nis-user1 107 3月 31 18:20 nis-user1 drwx------ 3 nis-user2 nis-user2 78 3月 25 18:33 nis-user2 |
五、拓展(openLDAP导入系统用户)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | [root@ldap01 ~]# yum install migrationtools -y #安装数据迁移工具 [root@ldap01 ~]# for i in {1..5}; do adduser ldap${i}; echo 123456|passwd --stdin ldap${i} &> /dev/ null ;done #创建测试用户 [root@ldap01 ~]# id ldap1 [root@ldap01 ~]# vim /usr/share/migrationtools/migrate_common.ph #替换为自己的域名及suffix # Default DNS domain $DEFAULT_MAIL_DOMAIN = "pwb.com" ; # Default base $DEFAULT_BASE = "dc=ldap01,dc=pwb,dc=com" ; [root@ldap01 ~]# /usr/share/migrationtools/migrate_base.pl > base .ldif #创建OpenLDAP根域条目 [root@ldap01 ~]# vim base .ldif #删除以下三个条目 dn: dc=dc=ldap01,dc=pwb,dc=com dn: ou=People,dc=ldap01,dc=pwb,dc=com dn: ou=Groups,dc=ldap01,dc=pwb,dc=com [root@ldap01 ~]# grep ldap[0-9] /etc/passwd > user_list.txt [root@ldap01 ~]# grep ldap[0-9] /etc/ group > group_list.txt [root@ldap01 ~]# /usr/share/migrationtools/migrate_passwd.pl user_list.txt user.ldif [root@ldap01 ~]# /usr/share/migrationtools/migrate_group.pl group_list.txt group .ldif [root@ldap01 ~]# ldapadd -x -W -D "cn=admin,dc=ldap01,dc=pwb,dc=com" -f base .ldif [root@ldap01 ~]# ldapadd -x -W -D "cn=admin,dc=ldap01,dc=pwb,dc=com" -f user.ldif [root@ldap01 ~]# ldapadd -x -W -D "cn=admin,dc=ldap01,dc=pwb,dc=com" -f group .ldif [root@ldap01 ~]# ldapsearch -x #查看数据是否存在 |
控制台查看数据
参考链接:
1 2 3 4 5 6 | https: //www.yuque.com/panwenbin-yzfnx/ukrlas/hbvibl/edit https: //www.cnblogs.com/somata/p/LinuxLDAPUserAuthentication.html https: //www.cnblogs.com/networking/p/14193559.html https: //www.cnblogs.com/rusking/p/8109873.html https: //blog.csdn.net/weixin_34109408/article/details/92310844 https: //www.linuxidc.com/Linux/2016-08/134228.htm |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具