如何为集中认证安装OpenLDAP服务器

轻量级目录访问协议(简称LDAP)是一个用于访问目录服务的工业标准的、轻量的、广泛使用的协议集。目录服务是一个用于访问、管理、组织和更新每天的项以及网络资源的共享信息基础设施,诸如用户、组、设备、邮件地址、电话号码、卷以及很多其它对象。

LDAP信息模型是基于entries。在一个LDAP目录中一个entry代表一个单元或信息并且唯一地被称为标识名(DN)的东西识别。这个entry的每个属性有一个类型以及一个或多个值。

一个属性是与一个entry关联的一段信息。类型一般是助记字符串,诸如"cn"对应常见名称、或者"mail"对应邮件地址。每个属性被分配一个或多个在空格分隔列表中组成的值。

以下是一个在LDAP目录中如何排列信息的说明。

本文讲解在CentOS7和Debain上如何为集中认证安装和配置OpenLDAP服务器。

第一步:安装LDAP服务器

1、首先通过以下命令安装OpenLDAP(一个LDAP的开源实现)以及一些传统的LDAP管理工具开始。

# Debain
root@gyl-huawei:/home/blctrl# apt install slapd ldap-utils  

# CentOS7
[root@bjAli ~]# yum install openldap openldap-servers openldap-clients nss-pam-ldapd

在Debian上,在这个包安装过程中,将提示你输入在你LDAP目录中用于admin entry的密码,设置一个安全密码并且确认它。

 在安装结束时,你可以按如下解释启动这个服务。

2、在CentOS7上,运行以下命令来启动openldap服务器守护进程,使它能在系统启动时自动启动并且检查它是否启动并且这个在运行。

[root@bjAli ~]# systemctl start slapd
[root@bjAli ~]# systemctl enable slapd
Created symlink from /etc/systemd/system/multi-user.target.wants/slapd.service to /usr/lib/systemd/system/slapd.service.
[root@bjAli ~]# systemctl status slapd
● slapd.service - OpenLDAP Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2022-09-06 23:30:16 CST; 29s ago
     Docs: man:slapd
           man:slapd-config
           man:slapd-hdb
           man:slapd-mdb
           file:///usr/share/doc/openldap-servers/guide.html
 Main PID: 2649 (slapd)
   CGroup: /system.slice/slapd.service
           └─2649 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///

3、接着,允许对LDAP服务器的请求通过防火墙。

[root@bjAli ~]# firewall-cmd --add-service=ldap
success

通过永远启用以下booleans确认SELinux在服务器和客户端都不妨碍。

[root@localhost ~]# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

此处基于LDAP的授权需要allow_ypbind,并且可能某些程序需要authlogin_nsswitch_use_ldap。 

4、由于slapd服务以ldap用户运行(你可以用ps -e -o pid,uname,comm | grep slapd验证它),为了这个服务器能够修改只能由root运行的管理工具创建的entries,这个用户应该拥有/var/lib/ldap目录。

[root@localhost ~]# ps -e -o pid,uname,comm | grep slapd
20267 ldap     slapd

在更改递归地更改这个目录所有权前,为slapd复制示例数据库配置文件到它中:

[root@localhost ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@localhost ~]# chown -R ldap:ldap /var/lib/ldap

第二步:配置LDAP服务器

注意:不推荐手动编辑LDAP配置,你需要在一个文件中添加配置并且使用ldapadd或ldapmodify命令来装载它们到LDAP目录。

4、现在创建一个OpenLDAP管理用户并且为那个用户分配一个密码。在以下命令中,为指定密码创建一个哈希值,记住它,你将在LDAP配置文件中使用它。

[root@localhost ~]# slappasswd
New password:
Re-enter new password:
{SSHA}5sY+fTG3zsPB3D5Xunt3ousmoFhQMTne

5、接着创建一个LDIF文件(ldaprootpasswd.ldif),其用于添加一个entry到LDAP目录。

[root@localhost ~]# vim ldaprootpasswd.ldif

在以上文件中添加以下内容:

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}5sY+fTG3zsPB3D5Xunt3ousmoFhQMTne

解释以上的属性-值对:

  • 1) olcDatabase:指明一个特定数据库实例名并且一般能在/etc/openldap/slapd.d/cn=config被找到。
  • 2) cn=config:指明全局的config选项。

指向先前提供地理论后台,ldaprootpasswd.ldif文件将添加一个entry到这个LDAP目录。在那个entry中,每行代表一个属性:值对(此处dn,changetype, add和olcRootPW是属性,每个冒号右边的字符串是它们对应的值)。

你会要记住随着深入,并且请注意我们在本文剩下部分使用相同的常见名称(cn=),每一步都取决于前一步。

6、现在,通过指定指向这个ldap服务器的URI添加相应的LDAP entry,此处只允许协议/主机/端口字段。输出应该类似以下:

[root@localhost ~]# ldapadd -H ldapi:/// -f ldaprootpasswd.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

并且从/etc/openldap/schema目录导入一些基本的LDAP定义:

[root@localhost ~]# for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done
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"

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"

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"

7、使LDAP使用在其数据库中你的域。创建有以下内容的另一个LDIF文件,我们称其ldapdomian.ldif,恰当地替换你的域(在Domain Component dc=)以及密码:

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=mydomain,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}5sY+fTG3zsPB3D5Xunt3ousmoFhQMTne

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read

接着,按如下装载它:

[root@localhost ~]# ldapmodify -H ldapi:/// -f ldapdomain.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

8、现在是时候添加一些entries到我们的LDAP目录。在以下称为baseldapdomain.ldif的文件中,我们通过一个冒号分隔属性和值。

dn: dc=mydomain,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: mydomain com
dc: mydomain

dn: cn=Manager,dc=mydomain,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: Group

添加entries到LDAP目录:

[root@localhost ~]# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f baseldapdomain.ldif
Enter LDAP Password:
adding new entry "dc=mydomain,dc=com"

adding new entry "cn=Manager,dc=mydomain,dc=com"

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

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

9、创建一个称为ldapuser的LDAP用户(adduser ldapuser),接着在ldapgroup.ldif中为一个LDAP组创建定义。

[root@localhost ~]# adduser ldapuser
[root@localhost ~]# vim ldapgroup.ldif

添加以下内容:

dn: cn=Manager,ou=Group,dc=mydomain,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 1001

此处gidNumber是在/etc/group中对应ldapuser的GID并且装载它:

[root@localhost ~]# ldapadd -x -W -D "cn=Manager,dc=mydomain,dc=com" -f ldapgroup.ldif
Enter LDAP Password:
adding new entry "cn=Manager,ou=Group,dc=mydomain,dc=com"

10、为用户ladpuser添加一个带有定义的LDIF文件(ldapuser.ldif):

dn: uid=ldapuser,ou=People,dc=mydomain,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldapuser
uid: ldapuser
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/ldapuser
userPassword: {SSHA}f5sY+fTG3zsPB3D5Xunt3ousmoFhQMTne
loginShell: /bin/bash
gecos: ldapuser
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0

并且装载它:

[root@localhost ~]# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f ldapuser.ldif
Enter LDAP Password:
adding new entry "uid=ldapuser,ou=People,dc=mydomain,dc=com"

同样,你可以删除你刚才创建的用户entry:

ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"

11、允许通信通过防火墙:

[root@localhost ~]# firewall-cmd --add-service=ldap
success

12、最后,但并非不重要,启用客户端使用LDAP验证。

在最后一步,我们将使用authconfig工具(一个用于配置系统验证资源的接口)。使用以下命令,如果在对LDAP服务器的身份验证成功后,对应被请求用户的家目录不存在,则创建它:

[root@localhost ~]#  authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值