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

  • 相关阅读:
    Flask:flask-script;多app应用;wtforms
    Flask:Locla;偏函数;请求上下文;蓝图;g对象;信号;flask-session
    Flask:闪现; 请求扩展;自定义中间件
    Flask:cookie和session
    Flask:请求与响应
    Flask:重定向;模板语法,
    Flask:路由系统;CBV的代码案例
    软件质量模型
    Selenium with Python 002
    Selenium with Python 001
  • 原文地址:https://www.cnblogs.com/zphqq/p/12815542.html
Copyright © 2011-2022 走看看