龙空技术网

CentOS7 - 设置OpenLDAP目录

运维阁 235

前言:

此时各位老铁们对“centos拷贝所有目录”大概比较关怀,大家都需要了解一些“centos拷贝所有目录”的相关内容。那么小编也在网摘上汇集了一些对于“centos拷贝所有目录””的相关资讯,希望兄弟们能喜欢,兄弟们一起来学习一下吧!

设置OpenLDAP目录

本文教您如何安装OpenLDAP,这是X.500目录服务器的开源实现。 X.500系列协议是在20世纪80年代后期开发的,用于支持以分层方式存储和查找名称,电子邮件地址,计算机系统和其他实体。 每个条目都是目录信息树(DIT)中的节点,并由其可分辨名称(DN)标识。 有关条目的信息表示为称为属性的键/值对。

准备

此配方要求CentOS系统具有有效的网络连接和管理权限,可以使用root帐户或sudo。

怎么做。。。

请按照以下步骤设置OpenLDAP目录:

安装openldap-server和openldap-clients软件包:

yum install openldap-servers openldap-clients
将OpenLDAP附带的数据库配置文件复制到服务器的数据目录中。 确保该文件归ldap用户所有:
cp /usr/share/openldap-servers/DB_CONFIG.example  /var/lib/ldap/DB_CONFIGchown ldap.ldap /var/lib/ldap/DB_CONFIG
使用slappasswd为OpenLDAP的Manager帐户生成密码哈希。 出现提示时输入所需的密码:
slappasswd
启动LDAP服务器并可选择使其在系统重新启动时自动启动:
systemctl start slapd.servicesystemctl enable slapd.service
打开系统防火墙中的端口389,以允许外部连接到服务器:
firewall-cmd --zone=public --permanent --add-service=ldapfirewall-cmd --reload
使用以下内容创建文件config.ldif。 DIT的后缀基于域ldap.example.com,olcRootPW的值是在步骤3中获得的密码哈希:
dn: olcDatabase={2}hdb,cn=configchangetype: modifyreplace: olcSuffixolcSuffix: dc=ldap,dc=example,dc=com-replace: olcRootDNolcRootDN: cn=Manager,dc=ldap,dc=example,dc=com-add: olcRootPWolcRootPW: {SSHA}cb0i4Kwzvd5tBlxEtwB50myPIUKI3bkpdn: olcDatabase={1}monitor,cn=configchangetype: modifyreplace: olcAccessolcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0, cn=peercred,cn=external,cn=auth" read by dn.base="cn= Manager,dc=ldap,dc=example,dc=com" read by * none
调用ldapmodify以执行config.ldif中的操作:
ldapmodify -Y EXTERNAL -H ldapi:/// -f config.ldif
使用ldapadd导入/etc/openldap/schema中的cosine,inetorgperson和nis模式:
cd /etc/openldap/schemaldapadd -Y EXTERNAL -H ldapi:/// -f cosine.ldifldapadd -Y EXTERNAL -H ldapi:/// -f inetorgperson.ldifldapadd -Y EXTERNAL -H ldapi:/// -f nis.ldif
使用以下内容创建文件root.ldif:
dn: dc=ldap,dc=example,dc=comobjectClass: dcObjectobjectClass: organizationo: My Company's LDAP Database
使用ldapadd导入root.ldif,使用Manager帐户验证自己:
ldapadd -D "cn=Manager,dc=ldap,dc=example,dc=com" -W -H  ldapi:/// -f root.ldif
工作原理

我们首先安装了openldap-server软件包,其中包含LDAP服务器(slapd)和一些支持实用程序,以及openldap-clients软件包,它安装了用于处理目录服务器的基本实用程序:

yum install openldap-servers openldap-clients

OpenLDAP使用Berkeley DB(BDB / HDB)数据库进行后端数据存储,索引和缓存。 数据库与目录服务器分开配置,并且示例配置文件与服务器一起安装。 我们将示例复制到服务器的数据目录中,但保留了默认值; 虽然您希望在部署OpenLDAP后定期查看设置以确保最佳性能(man 5 slapd-bdb提供文件配置选项的描述),但默认设置可以开始。:

cp /usr/share/openldap-servers/DB_CONFIG.example  /var/lib/ldap/DB_CONFIG

目录的管理用户管理器最初没有分配的密码。 OpenLDAP期望对密码进行哈希处理,因此我们使用slappasswd创建了一个合适的值:

slappasswd

slappasswd使用的默认散列算法是salted SHA(SSHA),如其输出中的{SSHA}前缀所示。 如果需要,可以使用-h参数指定密码,使用不同的算法对密码进行散列。 可能的值为{CRYPT},{MD5},{SMD5}(盐渍MD5),{SHA}或{SSHA}。 盐渍算法优于其未经处理的对应物,因为随机生成的盐slappasswd合并到散列中使得散列抵抗彩虹攻击。

OpenLDAP已弃用其基于文件的配置方法,支持在线配置,在config DIT中存储参数,以便可以更新它们,而无需重新启动目录服务器以使更改生效。 所以在启动服务器之后,我们为config.ldif编写了必要的操作,这些操作将进行更新,然后使用ldapmodify作为批处理执行它们:

ldapmodify -Y EXTERNAL -H ldapi:// -f config.ldif

-H参数为我们要连接的服务器提供一个或多个URI。 我们可以指定传输协议,主机名或IP地址和端口,但URI不是完整的RFC-4516样式的LDAP URI(其他组件,例如基本DN是使用其他参数给出的)。 支持的协议是ldap,ldaps(LDAP over SSL)和ldapi(LDAP over IPC / unix-socket)。 访问本地主机不需要主机名,因此只使用ldapi://.

指定EXTERNAL作为身份验证机制的-Y参数允许使用服务器的SASL方法外部的机制。 当与ldapi配对时,EXTERNAL使用我们的登录会话的用户名来验证我们。

ldapmodify的默认行为是从STDIN读取输入,但-f参数可以指定输入文件。 由于语句相当冗长,因此使用输入文件是一个好主意,因为您可以事先检查它们是否有任何错误。 但是,如果您确实希望通过STDIN提供它们,我建议您使用-c参数以“连续模式”运行ldapmodify。 程序在默认遇到错误时终止,但在连续模式下它将继续运行。 如果出现问题,这将使您有机会重新提交操作,而无需重新连接:

ldapmodify -Y EXTERNAL -H ldapi:/// -c

我们的第一个操作将DIT的后缀从默认的dc = my-domain,dc = com改为更合适的东西。 该配方使用ldap.example.com作为示例,但您当然可以相应地替换您自己的域:

dn: olcDatabase={2}hdb,cn=configchangetype: modifyreplace: olcSuffixolcSuffix: dc=ldap,dc=example,dc=com

后缀存储在olcDatabase = {2} hdb,cn = configentry的olcSuffix属性中,表示DIT的顶级。 传统上,后缀基于域名,并表示为一系列域组件(DC),因此域ldap.example.com变为dc = ldap,dc = example,dc = com。

后缀出现在其他一些地方,所以我们也需要更新这些 - olcRootDN属性,它列出了DIT管理用户的名称,以及olcAccess中的权限声明,它授予对Manager和系统的rootaccount的访问权限。 此外,我们添加了存储Manager密码哈希的olcRootPW属性。 我们不必多次为同一条目上的属性指定DN。 相反,我们可以使用单个连字符分隔操作:

replace: olcRootDNolcRootDN: cn=Manager,dc=ldap,dc=example,dc=com-add: olcRootPWolcRootPW: {SSHA}3NhShraRoA+MaOGSrjWTzK3fX0AIq+7Pdn: olcDatabase={1}monitor,cn=configchangetype: modifyreplace: olcAccessolcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0, cn=peercred,cn=external,cn=auth" read by dn.base="cn= Manager,dc=ldap,dc=example,dc=com" read by * none

接下来,我们导入了余弦,nis和inetorgperson模式。 从头开始创建新模式可能是一项艰巨的任务,因为需要进行大量的规划来确定需要哪些类型以及应分配哪些PEN / OID。 通过导入OpenLDAP提供的这些模式,我们可以访问各种有用的预定义类型:

ldapadd -Y EXTERNAL -H ldapi:/// -f cosine.ldifldapadd -Y EXTERNAL -H ldapi:/// -f inetorgperson.ldifldapadd -Y EXTERNAL -H ldapi:/// -f nis.ldif

cosine定义了最初为COSINE PARADISE项目开发的标准X.500目录服务模式,并在RFC-4524中进行了概述。 它为我们提供了类型,如文档和域对象以及主机,邮件和documentAuthor等属性。 inetorgpersondefine inetOrgPerson类,一个人对象,试图“满足当今Internet和Intranet目录服务部署中的要求”,如RFC-2798和RFC-4524所述。 nis定义了一个网络信息服务模式,其中包含用于设置集中身份验证的用户和主机属性,例如uidNumber,gidNumber,ipNetworkNumber和ipNetmaskNumber.

如果查看这些文件的内容,您会发现对象标识符(OID)在模式定义中起着重要作用,提供各种对象类和属性的全局唯一标识。 OID是由点分隔的数字串,从左到右读取,每个位置代表分布式层次结构中的级别。 层次结构的最高级别由各种标准机构和注册机构维护,Internet Assigned Numbers Authority(IANA)允许个人在OID 1.3.6.1.4.1下注册自己的分支机构。 例如,1.3.6.1.4.1.4203被分配给OpenLDAP项目。

最后,我们需要首先定义域组件对象(dcObject)。 此对象是目录的本地分支的根目录,可在其中添加将来的条目。 如果您的经验主要集中在使用MySQL等关系数据库或使用现代NoSQL数据库(如MongoDB),您可以将dcObject视为数据库:

dn: dc=ldap,dc=example,dc=comobjectClass: dcObjectobjectClass: organizationo: My Company's LDAP Database

使用ldapadd导入定义时,我们提供了-D参数来指定Manager帐户,并提示-W提示帐户的密码:

ldapadd -D "cn=Manager,dc=ldap,dc=example,dc=com" -W -H ldapi:///  -f root.ldif
See also

Refer to the following resources for more information on working with OpenLDAP:

The ldapmodify manual page (man 1 ldapmodify)OpenLDAP ()Understanding the LDAP Protocol, Data Hierarchy, and Entry Components ()How to Use LDIF Files to Make Changes to an OpenLDAP System ()How to Get Your Own LDAP OID ()后记

LDAP在中型以上企业中有很多应用场景,在日常的工作中用到的地方也不多,所以看起来这篇文档有点晦涩。

标签: #centos拷贝所有目录