• 红帽学习笔记[RHCE]OpenLDAP 服务端与客户端配置


    OpenLDAP 服务端与客户端配置

    OpenLDAP轻型目录访问协议,利用它可以进行统一的认证服务。如果需求需要配置多个服务器,并且多账号的话,可以考虑用OpenLDAP进行统一配置,来完成一组计算机之间的认证。

    关于LDIF

    一个LDIF基本结构一个条目

    注:解释的不完整。

    dn: ou=People,dc=example,dc=com
    ou: People
    objectClass: top
    objectClass: organizationalUnit
    
    1. dn就是数据库中的唯一主键,在LDAP中唯一标识一个条目

    2. ou就是organizationalUnit该条目需要有organizationalUnitou这一行就是设置具体值得

    3. objectClass表示属性,类似于代码中的类的属性

    属性

     cn:common name,指一个对象的名字。如果指人,需要使用其全名。
     o:organizationName,指一个组织的名字。
     ou:organizationalUnitName,指一个组织单元的名字。
     uid: user id ,唯一的用户id
     userPassword:用户密码
     uidNumber: 用户ID
     gidNumber: 用户组ID
     homeDirectory: 用户目录
    

    Object的类型

    objectClass: account
    objectClass: posixAccount
    objectClass: top
    objectClass: shadowAccount
    

    服务端

    安装

    [root@rhel2 ~]# yum install openldap openldap-servers migrationtools
    

    生成证书

    # 分别生成一个公钥与私钥
    openssl req -new -X509 -nodes -out /etc/openldap/certs/cert.pem -keyout /etc/openldap/certs/private.pem -days 365
    
    
    # 更改两个文件的权限 为ldap
    cd /etc/openldap/certs
    chown ldap:ldap *.pem
    # 查看
    ll
    total 8
    -rw-r--r-- 1 ldap ldap 1273 Nov 14 20:10 cert.pem
    -rw-r--r-- 1 ldap ldap 1704 Nov 14 20:10 private.pem
    # 将私钥改成只有ldap用户可读写
    chmod 600 private.pem 
    ll
    total 8
    -rw-r--r-- 1 ldap ldap 1273 Nov 14 20:10 cert.pem
    -rw------- 1 ldap ldap 1704 Nov 14 20:10 private.pem
    

    注:生成证书时 Common Name (eg, your name or your server's hostname) []:这个东西一定要写当前服务器的hostname,否则证书没法验证

    生成默认数据

    # 将 示例DB_CONFIG.example复制出来
    cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/DB_CONFIG
    # 到目录下
    cd /var/lib/ldap/
    # 更改权限
    chown ldap:ldap *
    # 执行一次 slaptest
    

    修改基本的配置

    # 在任意位置增加如下文件,内容如下
    # 关于ldif的格式
    # 1. 每一个dn都需要有空行
    # 2. 每一行末尾都`不能`有空格
    # 3. 每一个: 后面都要跟着一个空格
    [root@rhel2 openldap]# vim changes.ldif
    # 修改 主dn 为  dc=example,dc=com 可以替换成自己的
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcSuffix
    olcSuffix: dc=example,dc=com
    
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcRootDN
    olcRootDN: cn=Manager,dc=example,dc=com
    # 修改管理员密码
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcRootPW
    olcRootPW: {SSHA}zcesbHdBiGMQbVBCa7W2ZxjWxXGVHeG2
    
    # 指定公钥位置
    dn: cn=config
    changetype: modify
    replace: olcTLSCertificateFile
    olcTLSCertificateFIle: /etc/openldap/certs/cert.pem
    
    # 指定私钥位置
    dn: cn=config
    changetype: modify
    replace: olcTLSCertificateKeyFile
    olcTLSCertificateKeyFIle: /etc/openldap/certs/private.pem
    
    dn: olcDatabase={1}monitor,cn=config
    changetype: modify
    replace: olcAccess
    olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=example,dc=com" read by * none
    # 以上修改的其实就是在修改 /etc/openldap/slapd.d 下的文件,但是文件汇总有提示不让手动更改,通过ldapmodify 更改
    # 执行修改
    [root@rhel2 openldap]# ldapmodify -Y EXTERNAL -H ldapi:/// -f changes.ldif 
    ###########################结果#########################
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    modifying entry "olcDatabase={2}hdb,cn=config"
    
    modifying entry "olcDatabase={2}hdb,cn=config"
    
    modifying entry "olcDatabase={2}hdb,cn=config"
    
    modifying entry "cn=config"
    
    modifying entry "cn=config"
    
    modifying entry "olcDatabase={1}monitor,cn=config"
    ##########################结果#########################
    # 测试密码
    [root@rhel2 openldap]# ldapwhoami -x  -W -D "cn=config"
    Enter LDAP Password: 
    dn:cn=config
    

    导入基础数据

    # 增加文件 base.ldif
    # 关于ldif的格式
    # 1. 每一个dn都需要有空行
    # 2. 每一行末尾都`不能`有空格
    # 3. 每一个: 后面都要跟着一个空格
    [root@rhel2 openldap]# vim base.ldif 
    dn: dc=example,dc=com
    dc: example
    objectClass: top
    objectClass: domain
    
    dn: ou=People,dc=example,dc=com
    ou: People
    objectClass: top
    objectClass: organizationalUnit
    
    dn: ou=Group,dc=example,dc=com
    ou: Group
    objectClass: top
    objectClass: organizationalUnit
    
    
    # 实际上市增加了两个ou People 与 Group 及 用户 与 用户组
    # 执行新增
    [root@rhel2 openldap]# ldapadd -Y EXTERNAL -H ldapi:/// -f base.ldif 
    #######################结果###########################
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    adding new entry "ou=People,dc=example,dc=com"
    
    adding new entry "ou=Group,dc=example,dc=com"
    ########################结果##########################
    
    # 查询数据
    [root@rhel2 openldap]# ldapsearch -x ou=Group -b dc=example,dc=com
    ########################结果##########################
    # extended LDIF
    #
    # LDAPv3
    # base <dc=example,dc=com> with scope subtree
    # filter: ou=Group
    # requesting: ALL
    #
    
    # Group, example.com
    dn: ou=Group,dc=example,dc=com
    ou: Group
    objectClass: top
    objectClass: organizationalUnit
    
    # search result
    search: 2
    result: 0 Success
    
    # numResponses: 2
    # numEntries: 1
    ########################结果##########################
    

    关于ldif的格式

    1. 每一个dn都需要有空行

    2. 每一行末尾都不能有空格

    3. 每一个: 后面都要跟着一个空格

    批量创建用户

    # 创建一个本地目录存放用户
    [root@rhel2 openldap]# mkdir /home/guests
    # 使用for 创建20个用户
    [root@rhel2 guests]# for i in $(seq 1 20); do useradd -d /home/guests/ldapuser$i ldapuser$i; done
    # 利用for设置20个用户的密码
    [root@rhel2 guests]# for i in $(seq 1 20); do echo ldapuser$i | passwd --stdin ldapuser$i; done
    

    批量导入用户到LDAP

    1. 更改migrationtoolsbaseDN
    [root@rhel2 openldap] cd /usr/share/migrationtools
    [root@rhel2 migrationtools]# vi migrate_common.ph
    # 更改下面两行为自己的 base dn
    # Default DNS domain
    $DEFAULT_MAIL_DOMAIN = "example.com";
    
    # Default base 
    $DEFAULT_BASE = "dc=example,dc=com";
    
    1. 导入用户
    # 查询所有用户并输出到一个文件
    [root@rhel2 migrationtools]# grep ":10[0-9][0-9]" /etc/passwd > > /etc/openldap/passwd
    
    # 如果用户中有部分不想加入的用户直接删除即可
    
    # 将 /etc/openldap/passwd 文件 转成 ldif文件
    [root@rhel2 migrationtools]# ./migrate_passwd.pl /etc/openldap/passwd /etc/openldap/passwd.ldif
    
    # 下面是用户ldapuser1 的数据样式
    [root@rhel2 migrationtools]# cat /etc/openldap/passwd.ldif 
    dn: uid=ldapuser1,ou=People,dc=example,dc=com
    uid: ldapuser1
    cn: ldapuser1
    objectClass: account
    objectClass: posixAccount
    objectClass: top
    objectClass: shadowAccount
    userPassword: {crypt}$1$V1vroanf$NTVsrHIwOTQUpY0Q2CXHM/
    shadowLastChange: 18215
    shadowMin: 0
    shadowMax: 99999
    shadowWarning: 7
    loginShell: /bin/bash
    uidNumber: 1001
    gidNumber: 1001
    homeDirectory: /home/guests/ldapuser1
    
    
    1. 导入用户组
    # 查询所有用户组并输出到一个文件
    [root@rhel2 migrationtools]# grep ":10[0-9][0-9]" /etc/group > > /etc/openldap/group
    
    # 如果用户中有部分不想加入的用户直接删除即可
    
    # 将 /etc/openldap/group 文件 转成 ldif文件
    [root@rhel2 migrationtools]# ./migrate_group.pl /etc/openldap/group /etc/openldap/group.ldif
    
    # 下面是用户组ldapuser1 的数据样式
    [root@rhel2 migrationtools]# cat /etc/openldap/group.ldif 
    dn: cn=ldapuser1,ou=Group,dc=example,dc=com
    objectClass: posixGroup
    objectClass: top
    cn: ldapuser1
    userPassword: {crypt}x
    gidNumber: 1001
    
    1. 查询刚才添加的用户与组
    # 会发现用户与用户组都查询出来了
    [root@rhel2 migrationtools]# ldapsearch -x cn=ldapuser1 -b dc=example,dc=com
    # extended LDIF
    #
    # LDAPv3
    # base <dc=example,dc=com> with scope subtree
    # filter: cn=ldapuser1
    # requesting: ALL
    #
    
    # ldapuser1, People, example.com
    dn: uid=ldapuser1,ou=People,dc=example,dc=com
    uid: ldapuser1
    cn: ldapuser1
    objectClass: account
    objectClass: posixAccount
    objectClass: top
    objectClass: shadowAccount
    userPassword:: e2NyeXB0fSQxJFYxdnJvYW5mJE5UVnNySEl3T1RRVXBZMFEyQ1hITS8=
    shadowLastChange: 18215
    shadowMin: 0
    shadowMax: 99999
    shadowWarning: 7
    loginShell: /bin/bash
    uidNumber: 1001
    gidNumber: 1001
    homeDirectory: /home/guests/ldapuser1
    
    # ldapuser1, Group, example.com
    dn: cn=ldapuser1,ou=Group,dc=example,dc=com
    objectClass: posixGroup
    objectClass: top
    cn: ldapuser1
    userPassword:: e2NyeXB0fXg=
    gidNumber: 1001
    
    # search result
    search: 2
    result: 0 Success
    
    # numResponses: 3
    # numEntries: 2
    

    客户端

    安装

    [root@rhel1 ~]# yum install openldap-clients nss-pam-ldapd authconfig-gtk
    

    配置ldap[有问题]

    # 图形化配置工具
    [root@rhel1 ~]# authconfig-gtk
    # 如果使用xshell 时输入上面的命令,需要下载不免费的 Xmanager
    # 所以想使用  authconfig-gtk 必须保证客户端安装了图形化界面。
    
    1. 将服务端的公钥cert.pem复制到 客户端。
    scp cert.pem ip:/root/
    
    1. 激活图形化配置后按如下进行选择
    User Account Database	 	 ------- LDAP
    LDAP Search Base DN  	 	 ------- dc=example,dc=com
    LDAP Server           		 ------- ldap://ip/
    Use TLS to encrypt connnects ------- check
    # 此处必须check上否则不让通过
    Authentication Method		 ------- LDAP password
    # 点击 Download CA Certificate 输入本地目录
    file:///root/cert.pem
    
    1. 查看用户
    [root@rhel1 ~]# getent passwd ldapuser1
    
    1. 问题

    此处进行多次尝试还是有问题,一直连接不到LDAP的Server。最终可以用nslcd的log中获得如下错误

    Nov 18 16:24:30 rhel1.node.com nslcd[35848]: [8b4567] <passwd="ldapuser1"> ldap_start_tls_s() failed (uri=ldap://192.168.245.11/): Connect error: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user.
    

    记录下我尝试的方法:

    1. 在文件 /etc/openldap/ldap.conf 增加 `TLS_REQCERT never` 
    2. 在文件 /etc/openldap/ldap.conf 增加 `TLS_REQCERT allow` 
    3. 在服务的使用公钥、私钥获得自签名证书,复制到客户端使用
    4. 在服务端 /etc/sysconfig/slap 文件中 增加`ldaps:///`,监控端口`636`已经在使用了,但是客户端配置ldaps的时候还是不能够正确访问
    

    要是有人尝试成功了麻烦告知一下

    不使用SSL进行客户端配置

    图形化界面authconfig-gtk 要求必须使用SSL证书,或者使用ldaps进行连接

    authconfig-tui对此没有要求

    [root@rhel1 ~]# authconfig-tui
    # 进入一个简易的画面,
    # 1. 使用tab 进行切换选择项
    # 2. 使用space 进行选择
    # 3. 使用F12 直接到下一步
    
    1. 第一个页面左边选中 `Use LDAP`,右边选中 `Use LDAP AUthertication`
    2.  第二个页面,不选中 `Use TLS`
    	Server: `ldap://192.168.245.11/`
    	Base DN: `dc=example,dc=com`
    注: 在这里也尝试了选中 `Use TLS` 还是会报证书那个问题
    3. 等待一段时间
    4. 验证结果
    [root@rhel1 ~]# getent passwd ldapuser1
    ldapuser1:x:1001:1001:ldapuser1:/home/guests/ldapuser1:/bin/bash
    [root@rhel1 ~]# getent passwd ldapuser20
    ldapuser20:x:1020:1020:ldapuser20:/home/guests/ldapuser20:/bin/bash
    5. 用户已经同步到改客户端上了。并且认证通过
    

    NFS共享用户家目录

    不配置家目录共享用户无法正常使用

    # 认证通过后我们使用用户会报错 
    [root@rhel1 ~]# su - ldapuser1
    su: warning: cannot change directory to /home/guests/ldapuser1: No such file or directory
    mkdir: cannot create directory '/home/guests': Permission denied
    -bash-4.2$ 
    # 只能完成登录,但是做不了任何操作
    

    配置服务端的NFS

    [root@rhel2 ~]# yum install nfs-utils
    [root@rhel2 ~]# systemctl enable nfs-server
    [root@rhel2 ~]# systemctl start nfs-server
    [root@rhel2 ~]# vim /etc/exports
    [root@rhel2 ~]# cat /etc/exports
    /home/guests	192.168.245.0/24(rw,sync)
    # 配置 共享/home/guests 目录 共享读写到网段 192.168.245.0
    [root@rhel2 ~]# exportfs -rv
    exporting 192.168.245.0/24:/home/guests
    [root@rhel2 ~]# exportfs -v
    /home/guests  	192.168.245.0/24(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
    # 添加防火墙开放
    [root@rhel2 ~]# firewall-cmd --add-service=nfs --permanent
    [root@rhel2 ~]# firewall-cmd --reload
    

    配置客户端的autofs

    [root@rhel1 ~]# yum install autofs nfs-utils
    # 添加自定义配置的auto.guests
    [root@rhel1 ~]# vim /etc/auto.guests 
    [root@rhel1 ~]# cat /etc/auto.guests 
    *	-rw,nfs4 rhel2.node.com:/home/guests/&
    # 编写主文件
    [root@rhel1 ~]# vim /etc/auto.master
    /home/guests	/etc/auto.guests
    # 行末加入
    [root@rhel1 ~]# systemctl enable autofs
    [root@rhel1 ~]# systemctl start autofs
    # 再次切换用户
    [root@rhel1 ~]# su - ldapuser1
    Last login: Tue Nov 19 10:07:36 CST 2019 on pts/2
    [ldapuser1@rhel1 ~]$ pwd
    /home/guests/ldapuser1
    [ldapuser1@rhel1 ~]$ touch test.txt
    [ldapuser1@rhel1 ~]$ ll
    total 4
    -rw-rw-r--. 1 ldapuser1 ldapuser1 5 Nov 19 10:22 test.txt
    

    查看客户端挂载情况

    [ldapuser1@rhel1 ~]$ df -Th
    df: ‘/run/user/0/gvfs’: Permission denied
    Filesystem                            Type      Size  Used Avail Use% Mounted on
    /dev/mapper/rhel-root                 xfs        18G  3.0G   15G  17% /
    devtmpfs                              devtmpfs  905M     0  905M   0% /dev
    tmpfs                                 tmpfs     914M  140K  914M   1% /dev/shm
    tmpfs                                 tmpfs     914M   21M  894M   3% /run
    tmpfs                                 tmpfs     914M     0  914M   0% /sys/fs/cgroup
    /dev/sdb5                             ext4      190M  1.6M  175M   1% /third
    /dev/sda1                             xfs       497M  119M  379M  24% /boot
    /dev/sr0                              iso9660   3.5G  3.5G     0 100% /mnt
    rhel2.node.com:/home/guests/ldapuser1 nfs4       18G  1.3G   17G   8% /home/guests/ldapuser1
    [ldapuser1@rhel1 ~]$ 
    
  • 相关阅读:
    watir简单使用
    一些简单的Linux网络配置命令
    Watir识别HTML元素的方法及watir api补充
    web系统测试
    测试方法
    内存泄漏检测工具
    跟我一起学Oracle 11g【10】Oracle 中的那些函数
    限制textarea 文本框的长度(收集了几个办法)
    跟我一起学Oracle 11g【9】SQL 基础学习[嵌套查询]
    通过程序启用/禁用 网络连接(提供4种思路 你值得拥有)
  • 原文地址:https://www.cnblogs.com/primadonna/p/11887626.html
Copyright © 2020-2023  润新知