两天前,一位网站访问者在网站上搜索 LDAP,但没有找到任何结果,这促使我发一篇有关 LDAP 服务器的帖子,因此我们填补了空白,将喜爱的内容带给访问者。
什么是LDAP?
我们知道Linux将注册用户保存在/etc/passwd文件中,因此如果要访问机器,则必须在该文件中拥有用户。
如果您使用一台或几台机器,那应该没问题,但如果您有数百台或可能数千台机器,以及如何维护用户管理任务(例如密码修改)或任何其他管理任务(例如有人离开工作而您)需要关闭他的帐户,你会去每台机器上这样做吗?
这可能是一场噩梦,或者您需要创建一个新帐户。在这种情况下,我们需要一个集中的用户帐户管理系统,一个数据库来保存与用户帐户相关的所有信息。
解决此问题最常用的解决方案是轻量级目录访问协议 (LDAP)。
LDAP 使用通常的客户端/服务器范例。
LDAP 的用途
LDAP 不仅保留用户列表,而且您还可以将其用作文件的存储。
正如我们上面提到的,您可以使用它来验证用户身份。另外,您还可以存储DNS记录在 LDAP 服务器中。
LDAP 的另一种用途是,您可以将其用作组织的黄页目录服务,以提供有关用户或员工、部门、联系信息、电话号码、地址、私人数据或其他信息的信息。
LDAP 服务器实施
LDAP 是一个开放标准协议,许多公司都实现了该协议。
LDAP 有一些商业实现,例如:
- 微软活动目录。
- Oracle 互联网目录。
- Oracle 统一目录。
- IBM 安全目录服务器。
- UnboundID 目录服务器。
- NetIQ eDirectory 或 eDirectory。
- CA 目录或 CA eTrust 目录。
以及免费的开源实现,例如:
- OpenLDAP。
- ForgeRock OpenDJ。
- 阿帕奇 DS。
- 389 目录服务器。
在这篇文章中,我们将使用 OpenLDAP,它非常常见并受到社区的喜爱。
OpenLDAP 是在 Linux/UNIX 系统上运行的 LDAP 的开源实现。
安装 OpenLDAP
要安装 OpenLDAP,您必须安装 openldap、openldap-servers 和 openldap-clients 软件包。
$ yum -y install openldap openldap-servers openldap-clients
或者,如果您使用的是 CentOS 7,则可以使用 dnf 或 Dandified Yum。
$ dnf -y install openldap openldap-servers openldap-clients
如果您使用的是基于 Debian 的系统(例如 Ubuntu),您可以这样安装:
$ sudo apt-get install slapd
$ sudo apt-get install ldap-utils
然后我们可以让服务在启动时自动运行:
$ systemctl enable slapd
配置 LDAP
安装成功后,需要使用 ldappasswd 命令为 admin 用户设置密码:
$ ldappasswd
OpenLDAP 的配置文件位于 /etc/openldap/slapd.d 目录中。
您可以直接修改这些文件或使用 ldapmodify 命令。强烈建议使用 ldapmodify 命令修改 OpenLDAP。
LDAP 术语
如果我们要处理 LDAP 协议,则需要了解一些术语,因为我们会经常使用它们。
Entry(或对象):LDAP 中的每个单元都被视为一个条目。
dn: 条目名称。
o: 机构名称。
dc:域组件。例如,您可以像这样编写 likegeeks.com dc=likegeeks,dc=com。
cn:通用名称,如人名或某个物体的名称。
修改条目
OpenLDAP 将其信息存储在 bdb 或 hdb 文件中。您可以在以下位置找到 hdb 文件:
/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
file.
要标识元素,请使用 dn(可分辨名称)属性。因此 LDIF 文件中的第一行将是:
dn: olcDatabase={2}hdb,cn=config
然后我们指定是要添加还是修改
变更类型:修改
我们还必须澄清是否要替换它或删除它
替换:olc后缀
最后,我们输入更改后的属性的新值。
olc后缀:dc=likegeeks,dc=local
回到我们的文件。像这样更改以下条目:
olc后缀:dc=我的域名,dc=com
olcRootDN:cn=经理,dc=我的域,dc=com
所以我们的 LDIF 文件将是这样的:
dn: olcDatabase={2}hdb,cn=config
changeType: modify
replace: olcSuffix
olcSuffix: dc=likegeeks,dc=local
-
replace: olcRootDN
olcRootDN: cn=admin,dc=example,dc=local
在我们的文件中
/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
文件。 dn 属性为 dn:
olcDatabase={2}hdb,并且由于该文件位于 config 文件夹内,因此完整的 dn 属性为 dn:
olcDatabase={2}hdb,cn=config
然后我们保存文件并使用 ldapmodify:
$ ldapmodify -Y EXTERNAL -H ldapi:/// -f myfile.ldif
您可以使用 ldapsearch 命令来检查更改:
$ ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config olcDatabase=\*
是的,数据已经改变。
此外,您还可以使用 slaptest 命令来检查配置。
$ slaptest -u
添加条目
要添加条目,请使用 ldapadd 命令。
首先,我们创建 ldif 文件:
dn: dc=likegeeks,dc=local
objectClass: dcObject
objectClass: organization
dc: likegeeks
o: likegeeks
我们指定一系列属性,例如域组件 (dc)、专有名称 (dn) 和组织 (o)。
根据我们要创建的对象的类型(在本例中为 dcObject),某些属性是必需的,其他属性是可选的。
您根据您的系统检查架构。
在 CentOS 6 上,您可以访问
/etc/openldap/slapd.d/cn=config/cn=schema
在 CentOS 7 上,您可以访问
/etc/openldap/schema
或者你可以使用grep 命令从您的系统获取 .schema 文件。
我们示例中的对象组织位于
core.schema
CentOS 7 上的文件。
正如我们所看到的,唯一必需的属性是 o,即组织。
现在我们可以使用 ldapadd 命令来添加我们的对象:
$ ldapadd -f myobj.ldif -D cn=admin,dc=likegeeks,dc=local -w mypass
我们使用 -f 指定文件名,使用 -D 指定管理员用户,使用 -w 指定密码。
要搜索条目,您可以使用 ldapsearch 命令:
$ ldapsearch -x -b dc=likegeeks,dc=local
添加组织部门
您可以添加组织单位 (ou)。首先,创建一个新的 LDIF 文件。我们将其命名为 users.ldif,然后输入:
dn: ou=users,dc=likegeeks,dc=local
objectClass: organizationalUnit
ou: users
然后我们使用ldapadd来添加单元:
$ ldapadd -f users.ldif -D cn=admin,dc=likegeeks,dc=local -w mypass
该组织单位拥有所有 LDAP 用户。
添加用户
我们可以将用户添加到新创建的组织部门。
首先,我们创建 ldif 文件:
dn: cn=adam,ou=users,dc=likegeeks,dc=local
cn: adam
sn: USA
objectClass: myorg
userPassword: mypass
uid: adam
然后使用 ldapadd 命令添加用户:
$ ldapadd -f adam.ldif -x -D cn=admin,dc=likegeeks,dc=local 2 -w mypass
添加组
另外,我们首先创建 ldif 文件:
dn: cn=developers,ou=users,dc=likegeeks,dc=local
cn: developers
objectClass: groupOfNames
member: cn=adam,ou=users,dc=likegeeks,dc=local
然后运行 ldapadd 添加组:
$ ldapadd -f groups.ldif -x -D cn=admin,dc=likegeeks,dc=local -w mypass
删除条目
删除条目非常简单,只需使用 ldapdelete 命令和你想要的 cn 即可:
$ ldapdelete "cn=adam,ou=users,dc=likegeeks,dc=local" -D cn=admin,dc=likegeeks,dc=local -w mypass
您可以使用 ldapsearch 检查该条目是否已删除:
$ ldapsearch -x -b "dc=likegeeks,dc=local"
LDAP端口
LDAP 端口为 389,如果您使用 TLS 保护 LDAP,则端口将为 636。
您可以使用 netstat 命令确保 OpenLDAP 正在运行哪个端口。
$ netstat -ntlp | grep slapd
使用 LDAP 验证用户身份
默认情况下,Linux 进行身份验证users使用 /etc/passwd 文件。现在我们将了解如何使用 OpenLDAP 对用户进行身份验证。
确保您的系统允许 OpenLDAP 端口(389、636)。
如果您使用 iptables 防火墙,我建议您查看 iptables 帖子以了解这些命令Linux iptables 防火墙.
$ authconfig --enableldap --enableldapauth --ldapserver ver=192.168.1.10 --ldapbasedn="dc=likegeeks,dc=local" --enableldaptls --update
现在证书位于 /etc/openldap/cacerts 中。
当我们创建用户时,您必须定义一些所需的字段。
如果你想创建一个用户 adam,你将创建 adam.ldif 文件并写入以下内容:
dn: uid=adam,ou=users,dc=likegeeks,dc=local
uid: adam
cn: adam
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: mypass
shadowLastChange: 14846
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 1000
homeDirectory: /home/adam
如果您使用的是 CentOS 7,您应该使用 slappasswd 命令对密码进行加密,然后再将其放入 LDIF 文件中,如下所示:
$ slappasswd
然后我们将加密后的密码复制到ldif文件中,因此该文件将如下所示:
uid: adam
cn: adam
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: {SSHA}sathXSo3XTWrbi20Fp+MsqJHjXkHGhT/
shadowLastChange: 14846
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 1000
homeDirectory: /home/adam
现在我们可以使用 ldapadd 来添加用户:
$ ldapadd -f adam.ldif -x -D cn=admin,dc=likegeeks,dc=local -w mypass
使用 LDAP Web 界面 (phpldapadmin)
对于初学者来说,从终端工作可能有点棘手。不过,有一个名为 phpldapadmin 的基于 Web 的工具,它是用 PHP 编写的,用于简化 OpenLDAP 的使用。
你可以像这样安装它:
$ yum -y install phpldapadmin
上面的命令将安装 Apache Web 服务器,因此您不需要安装它。
现在您需要配置 phpldapadmin。
编辑这个文件:
/etc/phpldapadmin/config.php
并更改这一行:
$servers->setValue('server','host','PUT YOUR SERVER IP OR DOMAIN HERE');
如果你想使用 likegeeks.local 作为域名,你应该这样写:
$servers->setValue('server','base',array('dc=likegeeks,dc=local'));
另外,您需要像这样更改bind_id行:
$servers->setValue('login','bind_id','cn=admin,dc= likegeeks,dc=local');
并且不要忘记输入您的 apache 别名:
<IfModule mod_alias.c>
Alias /ldap /usr/share/phpldapadmin/htdocs
</IfModule>
现在您可以像这样访问 phpldapadmin:
http://服务器域名或IP/ldap
在我的示例中,我将使用:
http://likegees.local/ldap
在登录 DN 字段中,您将使用如下内容:
cn=admin,dc=likegeeks,dc=local
您可以执行我们在此 Web 界面中所做的所有操作,添加用户、组织和组。
我希望您发现本教程有用且简单。我们无法在一篇文章中涵盖 LDAP 服务器的所有用途,但这是对 LDAP 协议及其使用方法的简要介绍。
谢谢。