加载中...

centos7部署LDAP服务

一、安装相关openldap软件

~]# yum -y install openldap openldap-clients openldap-servers

Ldapscripts下载 链接:https://pan.baidu.com/s/1KspZJGBzjXt0QIm3ITE2QQ?pwd=xofo 提取码:xofo

二、配置openldap server端

2.1配置/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif

将第七行"cn=Manager,dc=my-domain,dc=com"改为自定义登录名和域"cn=admin,dc=wyg,dc=com"

# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 2edcec64
dn: olcDatabase={1}monitor
objectClass: olcDatabaseConfig
olcDatabase: {1}monitor
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
 al,cn=auth" read by dn.base="cn=admin,dc=wyg,dc=com" read by * none
structuralObjectClass: olcDatabaseConfig
entryUUID: 2ff88a86-9896-103d-86b3-37eed3a58fb9
creatorsName: cn=config
createTimestamp: 20230606091347Z
entryCSN: 20230606091347.168387Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20230606091347Z

如下将

改为

2.2配置 /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif

修改以下内容,并添加一行密码配置olcRootPW: 123456

# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 32eece98
dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=wyg,dc=com
olcRootDN: cn=admin,dc=wyg,dc=com
olcRootPW: 123456
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: 2ff89986-9896-103d-86b4-37eed3a58fb9
creatorsName: cn=config
createTimestamp: 20230606091347Z
entryCSN: 20230606091347.168770Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20230606091347Z

如下:将

改为

2.3拷贝DB文件

~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
##赋权
~]# chown -R ldap:ldap /var/lib/ldap/

2.4测试配置文件是否正确

~]# slaptest -u
6641e006 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif"
6641e006 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif"
config file testing succeeded
##可以忽略error,只要出现 succeeded 即表示成功。

2.5启动服务

~]# systemctl start slapd
~]# systemctl enable slapd
Created symlink from /etc/systemd/system/multi-user.target.wants/slapd.service to /usr/lib/systemd/system/slapd.service.

2.6添加scheme表

~]# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/nis.ldif
~]# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/cosine.ldif
~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

##有报错不用管

三、创建base.ldif文件

3.1创建 base.ldif 文件

##注意修改wyg部分为自己自定义的账户
~]# vim /etc/openldap/base.ldif
dn: dc=wyg,dc=com
objectClass: dcObject
objectClass: organization
o: wyg.com
dc: wyg

dn: ou=users,dc=wyg,dc=com
objectClass: organizationalUnit
objectClass: top
ou: users

dn: ou=groups,dc=wyg,dc=com
objectClass: organizationalUnit
objectClass: top
ou: groups

3.2建立最基础的目录结构

  • -x 进行简单认证
  • -D 用来绑定服务器的DN
  • -h 目录服务的地址
  • -w 绑定DN的密码
  • -f 使用ldif文件进行条目添加的文件
  • 注意-W:表示互动输入密码,-w后面跟密码
~]# vim base.ldif
~]#  ldapadd -x -W -D "cn=admin,dc=wyg,dc=com" -f /etc/openldap/base.ldif
Enter LDAP Password:
adding new entry "dc=wyg,dc=com"
adding new entry "ou=users,dc=wyg,dc=com"
adding new entry "ou=groups,dc=wyg,dc=com"

3.3配置 ldap.conf

BASEURL 的注释去除,更换为下述,BASE 中的第一个 dc 更换为wyg,URL 中的IP 地址更换为自己服务器的IP。

~]# vim /etc/openldap/ldap.conf
#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

#BASE   dc=example,dc=com
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666
BASE    dc=wyg,dc=com
URI     ldap://192.168.100.102 ldap://192.168.100.102:666

#SIZELIMIT      12
#TIMELIMIT      15
#DEREF          never

TLS_CACERTDIR   /etc/openldap/certs

# Turning this off breaks GSSAPI used with krb5 when rdns = false
SASL_NOCANON    on

四、管理用户与组

4.1安装依赖包 sharutils

~]# yum install sharutils

4.2手动安装资源包 Ldapscripts

~]# tar zxf ldapscripts-2.0.8.tgz
~]# cd  ldapscripts-2.0.8
~]# make install PREFIX=/

4.3配置dapscripts

a. 更换公网IP,将 `SERVER="ldap://localhost"` 改成 `SERVER="ldap://192.168.100.102"`
b. 将 `SUFFIX="dc=example,dc=com"` 改成 `SUFFIX="dc=wyg,dc=com"`
c. 将 `BINDDN="cn=Manager,dc=example,dc=com"` 改成 `BINDDN="cn=admin,dc=wyg,dc=com"`
d. 去掉 `#ICONVCHAR="ISO-8859-15" `的注释

4.4修改 /etc/ldapscripts/ldapscripts.passwd 文件

~]# sh -c "echo -n '123456' > /etc/ldapscripts/ldapscripts.passwd"

4.5管理group,user

这一节可以忽略,这是介绍如何在终端中配置ldap中的用户和组的,后面可以在web中创建。

  1. 创建group

    ~]# ldapaddgroup openstack 
    
  2. 创建用户

    ~]# ldapadduser user1 openstack
    
  3. 设置用户密码

    ~]# ldapsetpasswd user1 
    

五、安装phpldapadmin

前面章节已经将ldap本地环境安装好,下面安装 web 界面 phpldapadmin

5.1安装 phpldapadmin

~]# yum install -y phpldapadmin
~]# php -v
PHP 5.4.16 (cli) (built: Apr  1 2020 04:07:17)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

yum安装时,会自动安装apache和php的依赖。注意: phpldapadmin很多没更新了,只支持php5,如果你服务器的环境是php7,则会有问题,页面会有各种报错。 可以使用php -v来查看php版本。

5.2修改apache的phpldapadmin配置文件

~]# vim /etc/httpd/conf.d/phpldapadmin.conf

修改 <IfModule mod_authz_core.c> 中的内容,放开外网访问,这里只改了 2.4 版本的配置,因为 centos7 默认安装的 apache 为 2.4 版本。所以只需要改 2.4 版本的配置就可以了. 如果不知道自己apache版本,执行 rpm -qa|grep httpd 查看 apache 版本。

5.3修改配置用DN登录ldap

~]# vim /etc/phpldapadmin/config.php

a. 398行,默认是使用uid进行登录,我这里改为dn,也就是用户名

$servers->setValue('login','attr','dn');

b. 460行,关闭匿名登录,否则任何人都可以直接匿名登录查看所有人的信息

$servers->setValue('login','anon_bind',false);

c. 519行,设置用户属性的唯一性,这里我将cn,sn加上了,以确保用户名的唯一性

$servers->setValue('unique','attrs',array('mail','uid','uidNumber','cn','sn'));

5.4启动apache

~]# systemctl start httpd
~]# systemctl enable httpd

登录web端

http://192.168.100.102/ldapadmin/

账户:cn=admin,dc=wyg,dc=com 密码:123456

六、添加UID的账户(可被识别)

6.1创建一个test的ou

~]# vim /etc/openldap/ouadd.ldif
dn: ou=test,dc=wyg,dc=com
objectClass: organizationalUnit
objectClass: top
ou: test

##创建
~]# ldapadd -x -D 'cn=admin,dc=wyg,dc=com' -f /etc/openldap/ouadd.ldif  -H ldap://192.168.100.102:389 -w 123456

6.2创建uidtest的uid用户

名为uidtest,密码为123456,ou未test

~]# vim /etc/openldap/useradd.ldif
dn: uid=uidtest,ou=test,dc=wyg,dc=com
ou: test
uid: uidtest
sn: uidtest
cn: uidtest
givenName: uidtest
displayName: uidtest
mail: readafa@esgyn.local
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
userpassword: 123456

##创建
~]# ldapadd -x -D 'cn=admin,dc=wyg,dc=com' -f /etc/openldap/useradd.ldif  -H ldap://192.168.100.102:389 -w 123456

先清空缓存,刷新web界面


使用uid=uidtest的用户登录,账户:uid=uidtest,ou=test,dc=wyg,dc=com 密码:123456

七、常用命令及域说明

查询ldapsearch

  • -x 进行简单认证
  • -D 用来绑定服务器的DN
  • -w 绑定DN的密码
  • -b 指定要查询的根节点
  • -H 制定要查询的服务器
~]# ldapsearch -x -b 'dc=wyg,dc=com' 'cn=admin'
# extended LDIF
#
# LDAPv3
# base <dc=wyg,dc=com> with scope subtree
# filter: cn=admin
# requesting: ALL
#

# search result
search: 2
result: 0 Success

# numResponses: 1
~]# ldapsearch -x -D "uid=uidtest,ou=test,dc=wyg,dc=com" -w 123456 -b 'ou=test,dc=wyg,dc=com' 'uid=uidtest'
# extended LDIF
#
# LDAPv3
# base <ou=test,dc=wyg,dc=com> with scope subtree
# filter: uid=uidtest
# requesting: ALL
#

# uidtest, test, wyg.com
dn: uid=uidtest,ou=test,dc=wyg,dc=com
ou: test
uid: uidtest
sn: uidtest
cn: uidtest
givenName: uidtest
displayName: uidtest
mail: readafa@esgyn.local
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
userPassword:: MTIzNDU2

# search result
search: 2
result: 0 Success

删除

~]# ldapdelete -x -w 123456 -D "cn=admin,dc=wyg,dc=com" 'ou=users,dc=wyg,dc=com'
~]# ldapdelete -x -w 123456 -D "cn=admin,dc=wyg,dc=com" 'ou=groups,dc=wyg,dc=com'
~]# ldapdelete -x -w 123456 -D "cn=admin,dc=wyg,dc=com" 'dc=wyg,dc=com'
  • cn:common name 通用名
    对象的属性为CN,例如一个用户的名字为:张三,那么“张三”就是一个CN。
  • ou : OrganizationUnit 组织单位
    o和ou都是ldap目录结构的一个属性,建立目录的时候可选新建o,ou 等。在配置我司交换设备ldap的时候具体是配置ou,o还是cn等,要具体看ldap服务器的相应目录是什么属性。
    o:organizationName 组织名
  • uid: userid
    对象的属性为uid,例如我司一个员工的名字为:zsq,他的UID为:z02691,ldap查询的时候可以根据cn,也可以根据uid。配置ldap查询的时候需要考虑用何种查询方式。我司两种方式都支持,具体我司设备配置根据何种方式查询需要有ldap服务器的相关配置来决定。
  • dc:Domain Component
    DC类似于dns中的每个元素,例如h3c.com,“.”符号分开的两个单词可以看成两个DC,
  • dn:Distinguished Name
    类似于DNS,DN与DNS的区别是:组成DN的每个值都有一个属性类型,例如:
    H3c.com是一个dns,那么用dn表示为:dc=h3c,dc=com 级别越高越靠后。H3c和com的属性都是DC。
    DN可以表示为ldap的某个目录,也可以表示成目录中的某个对象,这个对象可以是用户等。

注意

1.使用uid作为唯一识别时请注意(不要用费uid的账户,切不要创建相同uid的账户)如下:

  • 非uid的账户,如user3 3,无法被嵌入LDAP的服务(jenkins、Nginx等)获取,
  • 在不同组织出现同一个uid的账户,如user1 user2,虽然可以创建,但是会有冲突,登录时会报错

2.如下displayName是登录后显示出来的账户名称,uid是登录时使用的账户名称

八、参考

搭建LDAP服务器详细流程_ldap服务器搭建-CSDN博客

posted @ 2024-05-13 19:56  沾沾自喜的混子  阅读(64)  评论(0编辑  收藏  举报