LDAP安装指南

LDAP介绍

轻型目录存取协定(英文:Lightweight Directory Access Protocol,缩写:LDAP,/ˈɛldæp/)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。1 目录服务在开发内部网和与互联网程序共享用户、系统、网络、服务和应用的过程中占据了重要地位。2例如,目录服务可能提供了组织有序的记录集合,通常有层级结构,例如公司电子邮件目录。同理,也可以提供包含了地址和电话号码的电话簿。 https://zh.wikipedia.org/wiki/%E8%BD%BB%E5%9E%8B%E7%9B%AE%E5%BD%95%E8%AE%BF%E9%97%AE%E5%8D%8F%E8%AE%AE

简言之,LDAP提供了一个类似文件系统的树形结构,但是每个节点可以存储信息,也可以包含子节点(类似ZooKeeper)。理论上来说通过LDAP可以存储想要存储的任何信息,例如账号信息,电子邮件目录等等。

一个最常用的场景是分布式系统中,通过LDAP提供一个统一的用户管理平台,只要在LDAP中进行一次用户操作(增加,删除,修改等)就可以反映在所有配置LDAP客户端的机器上,而不需要在每台客户端机器上进行重复的同样的操作,以下就通过配置,实现该功能。

LADAP Server安装

以下安装参照官网的安装步骤,略有不同,官网是通过编译安装的方式,也可以采用yum安装。 官方地址 https://www.openldap.org/doc/admin24/quickstart.html

1、获取LDAP软件

从以下地址下载对应的版本 http://www.openldap.org/software/download/

2、解压LDAP软件

把第一步下载的软件上传到合适的目录,例如/opt/app下,进行解压

gunzip -c openldap-VERSION.tgz | tar xvfB -

进入到解压的目录下

cd openldap-VERSION

VERSION是下载对应的版本号

3、查看详细的文档

查看COPYRIGHT, LICENSE, README and INSTALL 以及 Building and Installing OpenLDAP Software,这个就先略了,与安装没有太大影响,看了会更了解。

4、运行 configure

运行configre,如果出现编译失败,一般是需要安装编译环境,yum install -y gcc-c++,其他缺少的看错误提示进行补充安装

./configure

同时也可以运行

./configure --help

查看一些额外的编译命令,比如添加一些额外的集成功能。

5、构建

运行构建命令

make depend

make

6、构建测试

运行构建测试命令,查看构建是否成功

make test

7、安装LDAP软件

运行安装命令

su root -c 'make install'

至此LDAP已经成功安装完成

8、编辑slapd.ldif配置文件

编辑配置文件

vi /usr/local/etc/openldap/slapd.ldif

以下列出关键项目:

dn: olcDatabase=mdb,cn=config 
objectClass: olcDatabaseConfig 
objectClass: olcMdbConfig 
olcDatabase: mdb 
OlcDbMaxSize: 1073741824 
olcSuffix: dc=<font color=#FF0000>\<MY-DOMAIN></font>,dc=<font color=#FF0000>\<COM></font>
olcRootDN: cn=Manager,dc=<font color=#FF0000>\<MY-DOMAIN></font>,dc=<font color=#FF0000>\<COM></font>
olcRootPW: secret 
olcDbDirectory: /usr/local/var/openldap-data 
olcDbIndex: objectClass eq

其中需要修改的是上面红色部分\ 和 \,一般替换为公司的域名,像maven坐标一样,公司域名一般是唯一的,不会重复。例如公司域名为 whl.com,就可以修改为以下内容

dn: olcDatabase=mdb,cn=config 
objectClass: olcDatabaseConfig 
objectClass: olcMdbConfig 
olcDatabase: mdb 
OlcDbMaxSize: 1073741824 
olcSuffix: dc=whl,dc=com 
olcRootDN: cn=Manager,dc=whl,dc=com 
olcRootPW: secret 
olcDbDirectory: /usr/local/var/openldap-data 
olcDbIndex: objectClass eq

这里需要说明下olcRootDN的cn=Manager中Manager就是管理员的账号名,olcRootPW中的secret就是管理员的密码,如果有需要可以进行修改,同时密码也可以采用加密,这个先不提。

如果公司域名包含多个对象,例如 eng.whl.edu.cn,那可以修改为以下内容

dn: olcDatabase=mdb,cn=config 
objectClass: olcDatabaseConfig 
objectClass: olcMdbConfig 
olcDatabase: mdb 
OlcDbMaxSize: 1073741824 
olcSuffix: dc=eng,dc=whl,dc=edu,dc=cn 
olcRootDN: cn=Manager,dc=eng,dc=whl,dc=edu,dc=eu 
olcRootPW: secret 
olcDbDirectory: /usr/local/var/openldap-data 
olcDbIndex: objectClass eq

9、编辑slapd.conf配置文件

编辑配置文件

vi /usr/local/etc/openldap/slapd.conf

在开始的位置增加两行,引入额外的objectClass对象定义文件

include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/nis.schema

10、启动SLAPD

运行启动命令

/usr/local/libexec/slapd

验证是否启动成功

ldapsearch -H ldap://<font color=#FF0000>YOUR-LDAP-SERVER-HOST-OR-IP</font> -x -b '' -s base '(objectclass=*)' namingContexts

YOUR-LDAP-SERVER-HOST-OR-IP 替换为安装了SLAPD机器的ip或者host 如果出来以下内容就是成功了

dn: 
namingContexts: dc=whl,dc=com

11、初始化根对象

第一步,新建一个LDIF 文件

vi init.ldif

dn: dc=\<MY-DOMAIN>,dc=\<COM> 
objectclass: dcObject 
objectclass: organization 
o: \<MY ORGANIZATION> 
dc: \<MY-DOMAIN> 

dn: cn=Manager,dc=\<MY-DOMAIN>,dc=\<COM> 
objectclass: organizationalRole 
cn: Manager

替换尖括号中的内容,例如:

dn: dc=whl,dc=com 
objectclass: dcObject 
objectclass: organization 
o: Example Company 
dc: example 

dn: cn=Manager,dc=example,dc=com 
objectclass: organizationalRole 
cn: Manager

第二步,导入ldif文件

ldapadd -H ldap://<font color=#FF0000>YOUR-LDAP-SERVER-HOST-OR-IP</font> -x -D "cn=Manager,dc=\<MY-DOMAIN>,dc=\<COM>" -W -f init.ldif

注意替换YOUR-LDAP-SERVER-HOST-OR-IP 这里需要输入密码,密码就是第八步中olcRootPW: secret 的密码

验证是否添加成功

ldapsearch -H ldap://192.168.37.139 -x -b 'dc=\<MY-DOMAIN>,dc=\<COM>' '(objectclass=*)'

出来添加对象就是成功了

至此LDAP Server的安装和初始化就成功了。

从Linux机器上导入用户到LDAP上

以下内容参考了 https://www.ibm.com/developerworks/cn/linux/l-openldap/ http://blog.csdn.net/ztq157677114/article/details/50538176 http://www.linuxidc.com/Linux/2015-04/116536.htm

安装需要的环境

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

安装migrationtools

migrationtools 这个工具可以把Linux格式的用户和组转换成LDAP导入格式的ldif文件 运行以下命令进行安装

yum install migrationtools -y

修改migrationtools配置文件

cd /usr/share/migrationtools/
vi migrate_common.ph  #公共的配置文件都在这里

$DEFAULT_BASE = "dc=whl,dc=com"; #这里要改成LDAP Server配置的相应的dc

使用migrationtools进行导入

注意,migrationtools是非必须的,该工具只是将linux用户格式转换成ldif格式方便转换,如果没有需要从linux中导入的用户,也可以手动编辑ldif文件进行导入。

生成base节点的ldif

./migrate_base.pl > base.ldif

编辑 base.ldif,删除除下面之外的所有条目:

dn: ou=People,dc=whl,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit

dn: ou=Group,dc=whl,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit

导入base节点的ldif

在 LDAP 服务器上,使用 OpenLDAP 客户机工具 ldapadd 将以下条目插入到数据库中。简单身份验证必须要使用 -x 选项指定。在 slapd.conf 中定义的 rootdn 身份验证识别名是 “cn=Manager,dc=ibm,dc=com”。对于简单身份验证来说,必须使用密码。选项 -W 强制提示输入密码。这个密码就是在 slapd.conf 文件中指定的 rootpw 参数的值。包含这些条目的 LDIF 文件是使用 -f 选项指定的:

ldapadd -H ldap://192.168.37.139 -x -D "cn=Manager,dc=whl,dc=com" -W -f base.ldif

注意修改相应的ldap地址和dc

生成linux组ldif

grep ldapuser /etc/group > group.in  #将需要导入ldap的组导出到group.in文件中,这里的组是ldapuser,这里的格式还是linux用户格式
./migrate_group.pl group.in > group.ldif  #转换为ldif格式,这里已经是可以导入的格式了

生成的文件内容如下

dn: cn=ldapuser,ou=Group,dc=whl,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapuser
userPassword: {crypt}x
gidNumber: 500

注意:这里只是做了一下转换,也完全可以手动编辑一个内容跟上面一模一样的文件,从而不需要使用migrationtools工具,以后添加新的用户,也是通过该方式。

导入生成linux组ldif

ldapadd -H ldap://192.168.37.139 -x -D "cn=Manager,dc=ibm,dc=com" -W -f group.ldif

注意修改相应的ldap地址和dc

生成linux用户ldif

grep ldapuser /etc/passwd > passwd.in   #将需要导入ldap的用户导出到group.in文件中,这里的用户是ldapuser,这里的格式还是linux用户格式
./migrate_passwd.pl passwd.in > passwd.ldif   #转换为ldif格式,这里已经是可以导入的格式了

生成的文件内容如下

dn: uid=ldapuser,ou=People,dc=whl,dc=com
uid: ldapuser
cn: ldapuser
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt$1$TeOlOcMc$cpQaa0WpLSFRC1HIHW5bt1
shadowLastChange: 13048
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 500
homeDirectory: /home/ldapuser
gecos: ldapuser

注意:这里只是做了一下转换,也完全可以手动编辑一个内容跟上面一模一样的文件,从而不需要使用migrationtools工具,以后添加新的用户,也是通过该方式。

导入linux用户ldif

ldapadd -H ldap://192.168.37.139 -x -D "cn=Manager,dc=whl,dc=com" -W -f passwd.ldif

注意修改相应的ldap地址和dc

查看是否导入成功

ldapsearch -H ldap://192.168.37.139 -x -b 'dc=whl,dc=com' '(objectclass=*)'

有刚才的ldapuser就是正确的

LDAP Client安装

LDAP 身份验证要想正确地工作,需要配置两个服务:系统命名服务和身份验证服务。 系统命名服务(NSS)需要配置为使用 LDAP 来解析诸如用户和组帐号之类的资源。例如,在运行命令 ls -l 时,如果某个文件 inode 给出文件的所有者是 “user 501”,那么命名服务就需要将 “uid 501” 解析成用户名,并在 ls 命令输出结果中输出。通常来说,这是通过查找 /etc/passwd 文件中的所有用户帐号实现的。由于用户现在都存储在 LDAP 目录中,因此系统需要配置成同时对 passwd 文件和 LDAP 目录中的帐号进行解析。这种功能是通过 /usr/lib/libnss_ldap.so 库提供的。 身份验证服务是实际向 LDAP 验证用户身份的服务。可插入身份验证模块(PAM)提供了本地 Linux 身份验证服务。下面我们将配置 PAM 先对本地的 /etc/passwd 文件检查用户帐号,然后再对 LDAP 服务器进行检查。PAM LDAP 模块可以用来将身份验证重定向到 LDAP 目录上。/lib/security/pam_ldap.so PAM 模块提供了 LDAP 身份验证功能。 身份验证本身是由 PAM 程序执行的,它从身份验证候选机制中获取用户名,将其绑定到 OpenLDAP 服务器上,检索与这个 uid 条目(用户名条目)相关的 DN;从身份验证候选机制中获取密码,然后使用这个 DN 和密码试图将其绑定到 OpenLDAP 服务器上。如果绑定成功,PAM 会报告说这个用户已经成功通过了 pam_ldap.so 提供的身份验证测试。根据 PAM 的配置不同,在用户看到命令行提示符之前可能会执行其他测试。

自动方式安装

使用nslcd的自动安装(推荐)

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

authconfig 默认是用sssd来进行安全方面的校验的,但是su 登录会提示密码不正确,可能要开启tls配置ca,还没完成,所以先用这个配置把sssd禁用掉,采用传统的nslcd方式进行安全方面的校验,这样就没问题了

authconfig --enableforcelegacy --update

注意修改dn和host

authconfig --enableldap \
--enableldapauth \
--ldapserver=192.168.37.139 \
--ldapbasedn="dc=my-domain,dc=com" \
--enablemkhomedir \
--disableldaptls \
--update 

使用sssd的自动安装(理论上这种方式应该更合理,但是配置好之后su 登录会提示密码不正确,可能要开启tls配置ca,还没完成,如果不需要登录用户,也可以使用这种方式)

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

注意修改dn和host

authconfig --enableldap \
--enableldapauth \
--ldapserver=192.168.37.139 \
--ldapbasedn="dc=my-domain,dc=com" \
--enablemkhomedir \
--disableldaptls \
--update 

PS:这个会默认开启cache,导致在ldap中修改信息不会马上更新,要使用sss_cache -G(清空用户组缓存)sss_cache -U(清空用户缓存)之后才有效。 要配置缓存的时间,方法如下

[domain/default]

entry_cache_timeout = 1
**cache_credentials = True**
ldap_search_base = dc=my-domain,dc=com
ldap_tls_reqcert = never

krb5_realm = EXAMPLE.COM
krb5_server = kerberos.example.com
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://192.168.37.139/
ldap_tls_cacertdir = /etc/openldap/cacerts
ldap_id_use_start_tls = False

debug_level = 7

[sssd]
services = nss, pam
config_file_version = 2

domains = default

debug_level = 5

[nss]
enum_cache_timeout = 1
**memcache_timeout = 1**

[pam]
debug_level = 7

[sudo]

[autofs]

加粗的这两行一定要配置,可以配置时间

采用手动方式配置(可以成功,但是和自动方式安装使用nslcd的自动安装(推荐)效果完全一致,仅在上述无法成功,做补充安装校验使用)

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

/etc/sysconfig/authconfig文件配置

启用ldad认证
vi /etc/sysconfig/authconfig
确保以下条目是yes
USELDAP=yes
USELDAPAUTH=yes
USEMD5=yes
USESHADOW=yes
USELOCAUTHORIZE=yes

/etc/openldap/ldap.conf文件配置

vi /etc/openldap/ldap.conf

指向ldap server,以及相应的dn 这里需要先安装openldap-clients客户端

yum openldap-clients #也可以采用跟server一样的编译安装

HOST 192.168.37.139
BASE  dc=whl,dc=com
URI ldap://192.168.37.139:389/
SSL off

/etc/nsswitch.conf文件配置

vi /etc/nsswitch.conf

要让 NSS 服务使用 OpenLDAP 服务器,需要将 “ldap” 添加到 /etc/nsswitch.conf 文件的 passwd、shadow 和 group 行中,如下所示:

passwd: files ldap
shadow: files ldap
group: files ldap

/etc/pam.d/system-auth文件配置

vi /etc/pam.d/system-auth

session     optional      pam_oddjob_mkhomedir.so
在相应位置插入对应的ldap配置项,文件内容可能有出入
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
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 < 500 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3 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     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so

注意!

这种方式配置的登录,修改ldap用户密码方式为

ldappasswd -H ldap://192.168.37.139 -x -D "cn=Manager,dc=my-domain,dc=com" -W -S "uid=tools,ou=People,dc=my-domain,dc=com"

如果在客户端工具中配置userPassword,特别要注意配置加密方式为SSHA

缓存服务(不完整,先不开启)

开启名称缓存服务,注意!!!缓存服务可以缓存LDAP用户和组信息,不用每次都去LDAP server上去获取,开启方式如下,但是还没研究缓存周期的配置项,暂时先不开启吧。

service nscd restart

手动清空缓存

sudo nscd -i passwd   #清空用户缓存
sudo nscd -i group    #清空组缓存

验证client配置是否成功

首先验证没有test用户

[root@tnn1 migrationtools]# id test
id: test: No such user

然后添加test用户和组

vi test.ldif

dn: cn=test,ou=Group,dc=whl,dc=com
objectClass: posixGroup
objectClass: top
cn: test
userPassword: {crypt}x
gidNumber: 500

dn: uid=test,ou=People,dc=whl,dc=com
uid: test
cn: test
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt$1$TeOlOcMc$cpQaa0WpLSFRC1HIHW5bt1
shadowLastChange: 13048
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 500
homeDirectory: /home/test
gecos: ldapuser

导入

ldapadd -H ldap://192.168.37.139 -x -D "cn=Manager,dc=whl,dc=com" -W -f test.ldif

注意修改相应的ldap地址和dc

再次查看用户

[root@tnn1 migrationtools]# id test
uid=501(test) gid=500(test) groups=500(test)

关于修改密码

本文共有三种安装方式 | 方式 | 是否查询到用户和组 | 是否能通过密码登录用户 | 是否能修改用户密码 | | --- | --- | --- | --- | | authconfig sssd | 是 | 否 | 否 | | authconfig nslcd | 是 | 是 | 是 | | 手动方式 nslcd | 是 | 是(仅当userPassword加密格式为Plaintext、SSHA) | 是(仅当userPassword加密格式为Plaintext、SSHA) |

特别说明: sssd这种方式应该是官方推荐的方式,但是密码这块还没搞定,应该是要开启ssl或者其他一些配置,所以这里密码相关的都暂时还不行。 采用authconfig方式配置的nslcd支持的最全面,不管是密码登录还是修改密码,不管是密码加密格式是哪一种,可能是比手动配置多配置了几个项目,还没对比,理论上应该是一样的,但是测试出来手动配置的支持的加密方式比较少 关于手动方式配置的nslcd支持的两种加密格式说明,SSHA是使用ldappasswd -H ldap://192.168.37.139 -x -D "cn=Manager,dc=my-domain,dc=com" -W -S "uid=tools,ou=People,dc=my-domain,dc=com"这种方式设置的密码,默认加密格式为SSHA的。而手动方式 nslcd配置的client使用passwd命令进行密码修改后,加密格式会变成为Plaintext(也就是没有加密),这两种方式的密码都能被手动方式配置nslcd识别并使用。 另外使用authconfig配置sssd采用passwd修改密码之后,加密格式为CRYPT-MD5这种格式,它自己可以使用,但是手动方式配置的nslcd却使用不来了。

如果需要在linux机器上可以修改ldap用户密码 需要修改slapd.com

vi /usr/local/etc/openldap/slapd.conf

修改以下access

#表示能所有entry都能被访问
access to *
        by * read
#表示密码字段只能自己修改,登录的用户能访问,匿名用户只能认证
access to attrs=userPassword
        by self write
        by users read
        by anonymous auth

客户端工具使用

使用Apache Directory Studio来简化操作LDAP

Apache Directory Studio安装

http://directory.apache.org/studio/ 下载最新版安装

Apache Directory Studio使用

  • 打开 File -> New
  • 选择LDAP Connection enter description here
  • 输入LDAP Server相应的ip和端口 enter description here
  • 选择认证方式,用户名和密码,这里的用户名其实是之前配置的时候的管理员的DN,密码也是配置的 enter description here
  • 可以看到之前导入的Gourp和People,以及属性 enter description here
  • 按照现有的格式新建一个用户 在People上右键,新增 enter description here next enter description here 选择以下四个ObjectClass enter description here 输入属性值,其中前面几个是必选项,后面几个是可选项,这里先跟前面导入的账号格式保持一致 enter description here 输入一些必输项的值 enter description here

https://www.openldap.org/doc/admin24/quickstart.html

转载于:https://my.oschina.net/OttoWu/blog/1475088

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值