zoukankan      html  css  js  c++  java
  • LDAP部署及实践

    1、安装ldap

    yum -y install openldap openldap-servers  openldap-clients  compat-openldap migrationtools  openldap-servers-sql

     migrationtools 实现OpenLDAP 用户及用户组的添加,migrationtools 开源工具通过查找/etc/passwd、/etc/shadow、/etc/groups 生成LDIF 文件,并通过ldapadd 命令更新数据库数据,完成用户添加

    2、查看版本

    [root@192 ~]# slapd -V
    @(#) $OpenLDAP: slapd 2.4.44 (Jan 29 2019 17:42:45) $
            mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd
    
    [root@192 ~]# 

    从OpenLDAP2.4.23版本开始所有配置数据都保存在/etc/openldap/slapd.d/中,不再使用slapd.conf作为配置文件。

    3、设置openldap的管理员密码:

    [root@192 ~]# slappasswd -s 123
    {SSHA}FbSX+pFZE9V9+zxG/FyZWX8XtzRBDwJl
    [root@192 ~]# 

    上述加密后的字段保存下,等会我们在配置文件中会使用到。

    4、修改olcDatabase={2}hdb.ldif文件

    [root@192 ~]# cd /etc/openldap/slapd.d/cn=config
    [root@192 cn=config]# ll
    total 24
    drwxr-x---. 2 ldap ldap 4096 May  1 19:49 cn=schema
    -rw-------. 1 ldap ldap  378 May  1 19:33 cn=schema.ldif
    -rw-------  1 ldap ldap  624 May  1 19:48 olcDatabase={0}config.ldif
    -rw-------. 1 ldap ldap  443 May  1 19:33 olcDatabase={-1}frontend.ldif
    -rw-------. 1 ldap ldap  562 May  1 19:33 olcDatabase={1}monitor.ldif
    -rw-------. 1 ldap ldap  609 May  1 19:33 olcDatabase={2}hdb.ldif
    [root@192 cn=config]# vi olcDatabase={2}hdb.ldif 

    # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
    # CRC32 2b91b3bd
    dn: olcDatabase={2}hdb
    objectClass: olcDatabaseConfig
    objectClass: olcHdbConfig
    olcDatabase: {2}hdb
    olcDbDirectory: /var/lib/ldap
    olcSuffix: dc=my-domain,dc=com
    olcRootDN: cn=Manager,dc=my-domain,dc=com
    olcDbIndex: objectClass eq,pres
    olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
    structuralObjectClass: olcHdbConfig
    entryUUID: 5f5347b6-1feb-103a-867d-35e9e57544e1
    creatorsName: cn=config
    createTimestamp: 20200501113350Z
    entryCSN: 20200501113350.128694Z#000000#000#000000
    modifiersName: cn=config
    modifyTimestamp: 20200501113350Z

    修改域信息

    olcSuffix: dc=asiainfo,dc=com
    olcRootDN: cn=root,dc=asiainfo,dc=com
    olcRootPW: {SSHA}FbSX+pFZE9V9+zxG/FyZWX8XtzRBDwJl

    注意:冒号后面一定加空格,其中cn=root中的root表示OpenLDAP管理员的用户名,而olcRootPW表示OpenLDAP管理员的密码,即上面生成的密码。

    LDAP是一种通讯协议,如同HTTP是一种协议一样的!

    LDAP连接服务器的连接字串格式为:ldap://servername/DN

    其中DN有三个属性,分别是CN,OU,DC 

    CN, OU, DC 都是 LDAP 连接服务器的端字符串中的区别名称(DN, distinguished   name)

    CN:Common Name 为用户名或服务器名,最长可以到80个字符,可以为中文;

    DC:Domain Component   domain component一般为公司名,例如:dc=163,dc=com

    DN:Distinguished Name  distinguished name为一条LDAP记录项的名字,有唯一性,例如:dc:"cn=admin,ou=developer,dc=163,dc=com"

    DN可以表示为ldap的某个目录,也可以表示成目录中的某个对象,这个对象可以是用户等。 

    上边来了一堆的名词解释,看的云里雾里,还不是很明白,怎么跟自己的组织架构对应起来呢?看看下边的图是不是清晰明了

    5、修改完可以测试配置信息是否正确

    [root@192 cn=config]# slaptest -u
    5eac4b21 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif"
    config file testing succeeded
    [root@192 cn=config]# 

    6、启动ldap

    systemctl start slapd

    7、配置ldap数据库

    OpenLDAP默认以Berkeley DB作为后端数据库,BerkeleyDB数据库主要以散列的数据类型进行数据存储,如以键值对的方式进行存储。

    BerkeleyDB是一类特殊的面向查询进行优化、面向读取进行优化的数据库,主要用于搜索、浏览、更新查询操作,一般对于一次写入数据、多次查询和搜索有很好的效果。BerkeleyDB不支持事务型数据库(MySQL、MariDB、Oracle等)所支持的高并发的吞吐量以及复杂的事务操作。

    现在来开始配置OpenLDAP数据库,使用如下命令:

    [root@192 cn=config]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
    [root@192 cn=config]# chown ldap:ldap -R /var/lib/ldap
    [root@192 cn=config]# chmod 700 -R /var/lib/ldap
    [root@192 cn=config]# 

    注意:/var/lib/ldap/就是BerkeleyDB数据库默认存储的路径。

    8、导入基本Schema

    [root@192 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    adding new entry "cn=cosine,cn=schema,cn=config"
    
    [root@192 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    adding new entry "cn=nis,cn=schema,cn=config"
    
    [root@192 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    adding new entry "cn=inetorgperson,cn=schema,cn=config"
    
    [root@192 ~]# 

    9、修改migrate_common.ph文件

    migrate_common.ph文件主要是用于生成ldif文件使用,修改migrate_common.ph文件,

     修改下面三个值

    $DEFAULT_MAIL_DOMAIN = “asiainfo.com”; #与上面配置的对应
    
    $DEFAULT_BASE = “dc=asiainfo,dc=com”;  #与上面配置的对应
    
    $EXTENDED_SCHEMA = 1;        #开启扩展模式

    到此OpenLDAP的配置就已经全部完毕,下面我们来开始添加用户到OpenLDAP中。

    10、默认情况下OpenLDAP是没有普通用户的,但是有一个管理员用户。管理用户就是前面我们刚刚配置的root。

    现在我们把系统中的用户,添加到OpenLDAP中。为了进行区分,我们现在新加两个用户ldapuser1和ldapuser2,和两个用户组ldapgroup1和ldapgroup2,如下:

    groupadd ldapgroup1
    groupadd ldapgroup2
    
    useradd -g ldapgroup1 ldapuser1
    useradd -g ldapgroup2 ldapuser2
    
    echo ldapuser1:123 | chpasswd 
    echo ldapuser2:123 | chpasswd 

    把刚刚添加的用户和用户组提取出来,这包括该用户的密码和其他相关属性

    grep ":10[0-9][0-9]" /etc/passwd > /root/users   
    grep ":10[0-9][0-9]" /etc/group > /root/groups

    根据上述生成的用户和用户组属性,使用migrate_passwd.pl文件生成要添加用户和用户组的ldif,如下:

    [root@192 ~]# /usr/share/migrationtools/migrate_passwd.pl /root/users > /root/users.ldif
    [root@192 ~]# /usr/share/migrationtools/migrate_group.pl /root/groups > /root/groups.ldif

    注意:后续如果要新加用户到OpenLDAP中的话,我们可以直接修改users.ldif文件即可。

    导入用户及用户组到OpenLDAP数据库

    配置openldap基础的数据库,如下:

    vi base.ldif

    dn: dc=asiainfo,dc=com
    o: asiainfo com
    dc: asiainfo
    objectClass: top
    objectClass: dcObject
    objectclass: organization
    
    dn: cn=root,dc=asiainfo,dc=com
    cn: root
    objectClass: organizationalRole
    description: Directory Manager
    
    dn: ou=People,dc=asiainfo,dc=com
    ou: People
    objectClass: top
    objectClass: organizationalUnit
    
    dn: ou=Group,dc=asiainfo,dc=com
    ou: Group
    objectClass: top
    objectClass: organizationalUnit

    导入基础数据库

    [root@192 ~]# ldapadd -x -w "123" -D "cn=root,dc=asiainfo,dc=com" -f /root/base.ldif
    adding new entry "dc=asiainfo,dc=com"

    adding new entry "cn=root,dc=asiainfo,dc=com"

    adding new entry "ou=People,dc=asiainfo,dc=com"

    adding new entry "ou=Group,dc=asiainfo,dc=com"

    [root@192 ~]#

    此密码是之前创建的root管理员密码,如果密码错误,会报错:

    spacer.gif

    [root@192 ~]# ldapadd -x -w "123" -D "cn=root,dc=asiainfo,dc=com" -f /root/base.ldif
    ldapadd: attributeDescription "dn": (possible missing newline after line 11, entry "dc=asiainfo,dc=com"?)
    ldapadd: attributeDescription "dn": (possible missing newline after line 12, entry "dc=asiainfo,dc=com"?)
    ldapadd: attributeDescription "dn": (possible missing newline after line 13, entry "dc=asiainfo,dc=com"?)
    adding new entry "dc=asiainfo,dc=com"
    ldap_add: Type or value exists (20)
            additional info: objectClass: value #0 provided more than once
    
    [root@192 ~]# 

    这是因为密码错误 或者dn前没有空一行,或者每行结尾有多余空格

    将之前创建的俩个用户导入到数据库

    [root@192 ~]# ldapadd -x -w "123" -D "cn=root,dc=asiainfo,dc=com" -f /root/users.ldif
    adding new entry "uid=ldapuser1,ou=People,dc=asiainfo,dc=com"

    adding new entry "uid=ldapuser2,ou=People,dc=asiainfo,dc=com"

    [root@192 ~]#

    导入用户组到数据库

    [root@192 ~]# ldapadd -x -w "123" -D "cn=root,dc=asiainfo,dc=com" -f /root/groups.ldif
    adding new entry "cn=ldapgroup1,ou=Group,dc=asiainfo,dc=com"

    adding new entry "cn=ldapgroup2,ou=Group,dc=asiainfo,dc=com"

    [root@192 ~]#

    验证:

    查看BerkeleyDB数据库文件,使用如下命令:

    [root@192 ~]# ll /var/lib/ldap/
    total 492
    -rwx------ 1 ldap ldap     2048 May  2 17:47 alock
    -rw------- 1 ldap ldap     8192 May  2 18:28 cn.bdb
    -rwx------ 1 ldap ldap   262144 May  2 18:32 __db.001
    -rwx------ 1 ldap ldap    32768 May  2 18:32 __db.002
    -rwx------ 1 ldap ldap    93592 May  2 18:32 __db.003
    -rwx------ 1 ldap ldap      845 May  2 17:47 DB_CONFIG
    -rwx------ 1 ldap ldap     8192 May  2 17:47 dn2id.bdb
    -rwx------ 1 ldap ldap    32768 May  2 17:47 id2entry.bdb
    -rwx------ 1 ldap ldap 10485760 May  2 18:32 log.0000000001
    -rw------- 1 ldap ldap     8192 May  2 18:32 mail.bdb
    -rw------- 1 ldap ldap     8192 May  2 18:28 objectClass.bdb
    -rw------- 1 ldap ldap     8192 May  2 18:28 ou.bdb
    -rw------- 1 ldap ldap     8192 May  2 18:32 sn.bdb
    [root@192 ~]# 

    此时BerkeleyDB数据库文件中多了cn.bdb、sn.bdb、ou.bdb等数据库文件

    查询OpenLDAP的相关信息

    用户和用户组全部导入完毕后,我们就可以查询OpenLDAP的相关信息。

    查询OpenLDAP全部信息,使用如下命令:

    [root@192 ~]# ldapsearch -x -b "dc=asiainfo,dc=com" -H ldap://127.0.0.1       
    # extended LDIF
    #
    # LDAPv3
    # base <dc=asiainfo,dc=com> with scope subtree
    # filter: (objectclass=*)
    # requesting: ALL
    #
    
    # asiainfo.com
    dn: dc=asiainfo,dc=com
    o: asiainfo com
    dc: asiainfo
    objectClass: top
    objectClass: dcObject
    objectClass: organization
    
    # root, asiainfo.com
    dn: cn=root,dc=asiainfo,dc=com
    cn: root
    objectClass: organizationalRole
    description: Directory Manager

    查询添加的OpenLDAP用户信息,使用如下命令:

    [root@192 ~]# ldapsearch -LLL -x -D "cn=root,dc=asiainfo,dc=com" -w "123" -b "dc=asiainfo,dc=com" "uid=ldapuser1"                     
    dn: uid=ldapuser1,ou=People,dc=asiainfo,dc=com
    uid: ldapuser1
    cn: ldapuser1
    sn: ldapuser1
    mail: ldapuser1@asiainfo.com
    objectClass: person
    objectClass: organizationalPerson
    objectClass: inetOrgPerson
    objectClass: posixAccount
    objectClass: top
    objectClass: shadowAccount
    userPassword:: e2NyeXB0fSQ2JENGRmZsL05kNDI4RUhYeSRoTFhsbHhRR1pOeTNVQXVNSDlzR2h
     mdC8ua3JjSjg3eU96Njg1SjBvWEEvT1EybWxDaERFZFo0QUdieC9HSXk2c3FnM1E3eVlxMnVoNzNj
     ckJISy82Lw==
    shadowLastChange: 18384
    shadowMin: 0
    shadowMax: 99999
    shadowWarning: 7
    loginShell: /bin/bash
    uidNumber: 1000
    gidNumber: 1000
    homeDirectory: /home/ldapuser1
    
    [root@192 ~]# 

    查询添加的OpenLDAP用户组信息,使用如下命令:

    [root@192 ~]# ldapsearch -LLL -x -D "cn=root,dc=asiainfo,dc=com" -w "123" -b "dc=asiainfo,dc=com" "cn=ldapgroup1"                     
    dn: cn=ldapgroup1,ou=Group,dc=asiainfo,dc=com
    objectClass: posixGroup
    objectClass: top
    cn: ldapgroup1
    userPassword:: e2NyeXB0fXg=
    gidNumber: 1000
    
    [root@192 ~]# 

    把OpenLDAP用户加入到用户组

    尽管我们已经把用户和用户组信息,导入到OpenLDAP数据库中了。但实际上目前OpenLDAP用户和用户组之间是没有任何关联的。

    如果我们要把OpenLDAP数据库中的用户和用户组关联起来的话,我们还需要做另外单独的配置。

    现在我们要把ldapuser1用户加入到ldapgroup1用户组,需要新建添加用户到用户组的ldif文件,如下:

    cat > add_user_to_groups.ldif <<  EOF
    
    dn: cn=ldapgroup1,ou=Group,dc=asiainfo,dc=com
    changetype: modify
    add: memberuid
    memberuid: ldapuser1
    EOF

    然后执行

    ldapadd -x -w "123" -D "cn=root,dc=asiainfo,dc=com" -f /root/add_user_to_groups.ldif

    查询添加的OpenLDAP用户组信息,如下:

    [root@192 ~]# ldapsearch -LLL -x -D "cn=root,dc=asiainfo,dc=com" -w "123" -b "dc=asiainfo,dc=com" "cn=ldapgroup1"                     
    dn: cn=ldapgroup1,ou=Group,dc=asiainfo,dc=com
    objectClass: posixGroup
    objectClass: top
    cn: ldapgroup1
    userPassword:: e2NyeXB0fXg=
    gidNumber: 1000
    memberUid: ldapuser1
    
    [root@192 ~]# 

    可以很明显的看出ldapuser1用户已经加入到ldapgroup1用户组了。

    开启OpenLDAP日志访问功能

    默认情况下OpenLDAP是没有启用日志记录功能的,但是在实际使用过程中,我们为了定位问题需要使用到OpenLDAP日志。

    新建日志配置ldif文件,如下:

    cat > /root/loglevel.ldif << EOF
    
    dn: cn=config
    changetype: modify
    replace: olcLogLevel
    olcLogLevel: stats
    
    EOF

    导入到OpenLDAP中,并重启OpenLDAP服务,如下:

    [root@192 ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/loglevel.ldif
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    modifying entry "cn=config"
    
    
    [root@192 ~]# systemctl restart slapd
    [root@192 ~]# 

    修改rsyslog配置文件,并重启rsyslog服务,如下:

    cat >> /etc/rsyslog.conf << EOF
    
    local4.* /var/log/slapd.log
    
    EOF
    
    systemctl restart rsyslog

    查看OpenLDAP日志

    tail -f /var/log/slapd.log

    修改OpenLDAP默认监听端口

    OpenLDAP默认监听的端口是389.如果我们现在要修改OpenLDAP监听端口的话,我们可以修改/etc/sysconfig/slapd文件。例如我们现在把OpenLDAP监听的端口修改为4567,可以进行如下操作:

    vim /etc/sysconfig/slapd
    
    SLAPD_URLS=”ldapi://0.0.0.0:4567/ldap://0.0.0.0:4567/”
    
    重启OpenLDAP服务,如下:
    
    systemctl restart slapd.service

    -x   进行简单认证

    -D   用来绑定服务器的DN

    -h   目录服务的地址

    -w   绑定DN的密码(ldap管理员密码)

    -f    使用ldif文件进行条目添加的文件

    -Y    指定用于身份验证的SASL机制。如果没有指定,程序将选择服务器知道的最佳机制

    -H   指定引用ldap服务器的URI;只允许协议/主机/端口字段;一个用空格或逗号分隔的URI列表。

    例子 

    ldapadd -x -D "cn=root,dc=starxing,dc=com" -w secret -f /root/test.ldif 

    ldapadd -x -D "cn=root,dc=starxing,dc=com" -w secret (这样写就是在命令行添加条目)

    ldapsearch 

    -x    进行简单认证

    -D   用来绑定服务器的DN

    -w   绑定DN的密码

    -b   指定要查询的根节点

    -H   指定要查询的服务器

    -LLL  禁用打印无关信息

    ldapsearch -x -D "cn=root,dc=starxing,dc=com" -w secret -b "dc=starxing,dc=com" 

    使用简单认证,用 "cn=root,dc=starxing,dc=com" 进行绑定,

    要查询的根是 "dc=starxing,dc=com"。这样会把绑定的用户能访问"dc=starxing,dc=com"下的

    所有数据显示出来。

    ldapsearch -x -W -D "cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn" -b "cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn" -h troy.osdn.zzti.edu.cn 

    ldapsearch -b "dc=canon-is,dc=jp" -H ldaps://192.168.0.92:636 

    ldapdelete 

    ldapdelete -x -D "cn=Manager,dc=test,dc=com" -w secret "uid=test1,ou=People,dc=test,dc=com" 

    ldapdelete -x -D 'cn=root,dc=it,dc=com' -w secert 'uid=zyx,dc=it,dc=com' 

    这样就可以删除'uid=zyx,dc=it,dc=com'记录了,应该注意一点,如果o或ou中有成员是不能删除的。

    ldappasswd 

    -x   进行简单认证

    -D   用来绑定服务器的DN

    -w   绑定DN的密码

    -S   提示的输入密码

    -s pass 把密码设置为pass

    -a pass 设置old passwd为pass

    -A   提示的设置old passwd

    -H   是指要绑定的服务器

    -I   使用sasl会话方式

    #ldappasswd -x -D 'cm=root,dc=it,dc=com' -w secret 'uid=zyx,dc=it,dc=com' -S

    New password:

    Re-enter new password: 

    就可以更改密码了,如果原来记录中没有密码,将会自动生成一个userPassword

    创建ldap账号

    https://blog.51cto.com/ljl2013/1359441

    Linux基于LDAP进行用户认证

    有三种方法:

    一、使用authconfig-tui  图形界面配置

    二、使用authconfig启动

    1、准备工作

    关闭防火墙

    关闭selinux

    2、安装ldap客户端

    yum install -y nss-pam-ldapd pam_ldap openldap-clients

    3、备份配置文件

    #备份
    authconfig --savebackup=openldap.bak
    
    #恢复
    authconfig --restorebackup=openldap.bak

    4、authconfig启动即可

    authconfig --enableldap --enableldapauth --ldapserver=192.168.7.6 --ldapbasedn="dc=asiainfo,dc=com" --enablemkhomedir --update

    如果执行上述命令没效果,可以执行authconfig --restorebackup=openldap.bak恢复初始配置,再执行“authconfig 命令,操作如下:

    [root@slave-02 ~]# authconfig --enableldap --enableldapauth --ldapserver=192.168.7.6 --ldapbasedn="dc=asiainfo,dc=com" --enablemkhomedir --update
    [root@slave-02 ~]# ps -ef | grep nslcd  #可以看到上面没有启动成功
    root       2436   1912  0 21:57 pts/0    00:00:00 grep --color=auto nslcd
    [root@slave-02 ~]# 
    [root@slave-02 ~]# authconfig  --restorebackup=openldap.bak #恢复
    [root@slave-02 ~]# 
    [root@slave-02 ~]# authconfig --enableldap --enableldapauth --ldapserver=192.168.7.6 --ldapbasedn="dc=asiainfo,dc=com" --enablemkhomedir --update
    [root@slave-02 ~]# ps -ef | grep nslcd       #启动成功了              
    nslcd      2569      1  0 21:58 ?        00:00:00 /usr/sbin/nslcd
    root       2579   1912  0 21:58 pts/0    00:00:00 grep --color=auto nslcd
    [root@slave-02 ~]# 

    三、主机配置(略复杂)

    1-3 与authconfig一样

    4、配置 /etc/sysconfig/authconfig

    /etc/sysconfig/authconfig 文件由 authconfig 包自动创建。 配置该文件的目的是用来跟踪 LDAP 身份认证机制是否正确启用。

    [root@slave-02 ~]# cp /etc/sysconfig/authconfig /etc/sysconfig/authconfig.$(date +%F)
    [root@slave-02 ~]# sed -i '/USESYSNETAUTH/s/no/yes/' /etc/sysconfig/authconfig
    [root@slave-02 ~]# sed -i '/USELDAPAUTH/s/no/yes/' /etc/sysconfig/authconfig
    [root@slave-02 ~]# sed -i '/USEMKHOMEDIR/s/no/yes/' /etc/sysconfig/authconfig
    [root@slave-02 ~]# sed -i '/PASSWDALGORITHM/s/md5/yes/' /etc/sysconfig/authconfig
    [root@slave-02 ~]# sed -i '/USELDAP/s/no/yes/' /etc/sysconfig/authconfig
    [root@slave-02 ~]# cat /etc/sysconfig/authconfig | grep yes
    CACHECREDENTIALS=yes
    PASSWDALGORITHM=yes
    USELDAP=yes
    USELDAPAUTH=yes
    USELOCAUTHORIZE=yes
    USEMKHOMEDIR=yes
    USEPWQUALITY=yes
    USESHADOW=yes
    USESSSD=yes
    USESYSNETAUTH=yes
    [root@slave-02 ~]# 

    5、配置 /etc/nsswith.conf

    /etc/nsswith.conf 文件由glibc包自动创建, 该文件用于名称转换服务。通常LINUX系统身份验证读取本地文件,要使身份验证查询通过LDAP服务器必须在该文件中找到passwd; shadow; group;三行在files后空格添加“ldap”

    [root@slave-02 ~]# cp /etc/nsswitch.conf /etc/nsswitch.conf.$(date +%F)
    [root@slave-02 ~]# sed -i '/^passwd:/s/files/files   ldap/' /etc/nsswitch.conf
    [root@slave-02 ~]# sed -i '/^shadow:/s/files/files   ldap/' /etc/nsswitch.conf
    [root@slave-02 ~]# sed -i '/^group:/s/files/files ldap/' /etc/nsswitch.conf
    [root@slave
    -02 ~]# sed -i '/^group:/s/files/files ldap/' /etc/nsswitch.conf
    [root@slave
    -02 ~]#
    [root@slave
    -02 ~]# egrep "^passwd|^shadow|^group" /etc/nsswitch.conf
    passwd: files ldap sss
    shadow: files ldap sss
    group: files ldap sss
    [root@slave
    -02 ~]#

    6、配置 /etc/pam.d/system-auth

     身份验证服务是实际向LDAP验证用户身份的服务。可插入身份验证模块(PAM)提供了本地Linux身份验证服务。pam_unix.so模块是通用模块,使用PAM机制对本地的/etc/passwd文件检查用户帐号。PAMLDAP模块可以用来将身份验证重定向到LDAP目录上。身份验证本身是由PAM程序执行的,它从身份验证候选机制中获取用户名,将其绑定到openLDAP 服务器上。如果绑定成功,PAM会报告说这个用户已经成功通过了pam_ldap.so提供的身份验证测试。根据PAM的配置不同,在用户看到命令提示符之前可能会执行其它测试。

        /etc/pam.d/system-auth文件是CentOS的系统认证PAM文件。在该文件的auth,account,password,session四段中pam_unix.so模块后添加pam_ldap.so模块使身份验证先对本地的/etc/passwd文件检查用户帐号,然后再对LDAP服务器进行检查。同时因为是LDAP认证需要为用户创建根目录,所以还必须在会话(SESSION)阶段增加pam_mkhomedir.so模块,为用户登录自动创建宿主目录。

    [root@slave-02 ~]# vi /etc/pam.d/system-auth

    #%PAM-1.0
    # This file is auto-generated.
    # User changes will be destroyed the next time authconfig is run.
    auth required pam_env.so
    auth sufficient pam_unix.so nullok try_first_pass
    auth requisite pam_succeed_if.so uid >= 1000 quiet_success
    auth sufficient pam_ldap.so use_first_pass
    auth required pam_deny.so

    
    

    account required pam_unix.so broken_shadow
    account sufficient pam_localuser.so
    account sufficient pam_succeed_if.so uid < 1000 quiet
    account [default=bad success=ok user_unknown=ignore] pam_ldap.so
    account required pam_permit.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 sufficient pam_ldap.so use_authtok
    password required pam_deny.so

    
    

    session optional pam_keyinit.so revoke
    session required pam_limits.so
    -session optional pam_systemd.so
    session optional pam_mkhomedir.so umask=0077
    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

     
    [root@slave-02 ~]#  vi /etc/pam.d/password-auth

    #%PAM-1.0
    # This file is auto-generated.
    # User changes will be destroyed the next time authconfig is run.
    auth required pam_env.so
    auth sufficient pam_unix.so nullok try_first_pass
    auth requisite pam_succeed_if.so uid >= 1000 quiet_success
    auth sufficient pam_ldap.so use_first_pass
    auth required pam_deny.so

    
    

    account required pam_unix.so broken_shadow
    account sufficient pam_localuser.so
    account sufficient pam_succeed_if.so uid < 1000 quiet
    account [default=bad success=ok user_unknown=ignore] pam_ldap.so
    account required pam_permit.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 sufficient pam_ldap.so use_authtok
    password required pam_deny.so

    
    

    session optional pam_keyinit.so revoke
    session required pam_limits.so
    -session optional pam_systemd.so
    session optional pam_mkhomedir.so umask=0077
    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

     

    7、配置 /etc/openldap/ldap.conf

    [root@slave-02 ~]# cp /etc/openldap/ldap.conf /etc/openldap/ldap.conf.$(date +%F)
    [root@slave-02 ~]# echo "BASE dc=asiainfo,dc=com" >>/etc/openldap/ldap.conf
    [root@slave-02 ~]# echo "URI ldap://192.168.7.6" >>/etc/openldap/ldap.conf
    [root@slave-02 ~]#

    8、使用 ldapsearch命令测试能否读取 openldap server 中的数据

    [root@slave-02 ~]# ldapsearch -x -b "dc=asiainfo,dc=com"
    # extended LDIF
    #
    # LDAPv3
    # base <dc=asiainfo,dc=com> with scope subtree
    # filter: (objectclass=*)
    # requesting: ALL
    #
    
    # asiainfo.com
    dn: dc=asiainfo,dc=com
    o: asiainfo com
    dc: asiainfo
    objectClass: top
    objectClass: dcObject
    objectClass: organization
    
    # root, asiainfo.com
    dn: cn=root,dc=asiainfo,dc=com
    cn: root
    objectClass: organizationalRole
    description: Directory Manager
    
    # People, asiainfo.com
    dn: ou=People,dc=asiainfo,dc=com
    ou: People
    objectClass: top
    objectClass: organizationalUnit
    
    # Group, asiainfo.com
    dn: ou=Group,dc=asiainfo,dc=com
    ou: Group
    objectClass: top
    objectClass: organizationalUnit

    如果出现下面信息,解决该问题的方法是:

          1)检查/etc/hosts文件,是否有ldapserver的记录,最好能ping一下,看能否解析成功

          2)到openldap server上检查slapd服务是否正在运行,如果没有,启动slapd服务

          3)检查/etc/openldap/ldap.conf文件,查看里面的BASE和URI是否正确

    [root@slave-02 ~]# ldapsearch -x -b "dc=asiainfo,dc=com"
    ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
    [root@slave-02 ~]# 

    9、启动 nslcd

    systemctl start nslcd

    10、测试,可以看到虽然主机上没有ldapuser1这个用户,但启动nslcd后,连接上ldap server,便可以使用这个账号

    [root@slave-02 ~]# id ldapuser1
    id: ldapuser1: no such user
    [root@slave-02 ~]# systemctl start nslcd
    [root@slave-02 ~]# id ldapuser1         
    uid=1000(any) gid=1000(any) groups=1000(any)
    [root@slave-02 ~]# su - ldapuser1 
    Creating directory '/home/ldapuser1'.
    [any@slave-02 ~]$ 

    https://blog.csdn.net/weixin_33713707/article/details/92177797

    https://mp.weixin.qq.com/s/JyH5mqwWFt0N1nGYZqBCBQ

  • 相关阅读:
    Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
    DHCP "No subnet declaration for xxx (no IPv4 addresses)" 报错
    Centos安装前端开发常用软件
    kubernetes学习笔记之十:RBAC(二)
    k8s学习笔记之StorageClass+NFS
    k8s学习笔记之ConfigMap和Secret
    k8s笔记之chartmuseum搭建
    K8S集群集成harbor(1.9.3)服务并配置HTTPS
    Docker镜像仓库Harbor1.7.0搭建及配置
    Nginx自建SSL证书部署HTTPS网站
  • 原文地址:https://www.cnblogs.com/zphqq/p/12815542.html
Copyright © 2011-2022 走看看