添加组织单位
我们可以添加组织单位 (ou)。
首先,创建一个新的 LDIF 文件。
让我们将其命名为 users.ldif,然后输入:
dn: ou=users,dc=onitroad,dc=local objectClass: organizationalUnit ou: users
然后我们使用 ldapadd 添加单元:
$ ldapadd -f users.ldif -D cn=admin,dc=onitroad,dc=local -w mypass
此组织单位包含所有 LDAP 用户。
LDAP 的用途
LDAP 不仅保留用户列表,而且我们还可以将其用作文件的存储。
如上所述,我们可以使用它来验证用户身份。
此外,我们可以将 DNS 记录存储在 LDAP 服务器中。
LDAP 的另一种用法,我们可以将其用作组织的黄页目录服务,以提供有关用户或者员工、部门、联系信息、电话号码、地址、私有数据等的信息。
使用 LDAP 验证用户
默认情况下,Linux 使用 /etc/passwd 文件对用户进行身份验证。
现在我们将看到如何使用 OpenLDAP 对用户进行身份验证。
确保系统上允许 OpenLDAP 端口(389、636)。
如果我们正在使用 iptables 防火墙,我建议我们查看 iptables 帖子以了解 Linux iptables 防火墙的这些命令。
$ authconfig --enableldap --enableldapauth --ldapserver ver=192.168.1.10 --ldapbasedn="dc=onitroad,dc=local" --enableldaptls --update
现在证书位于 /etc/openldap/cacerts 中。
当我们创建一个用户时,你必须定义一些需要的字段。
如果要创建用户 adam,则将创建 adam.ldif 文件并写入以下内容:
dn: uid=adam,ou=users,dc=onitroad,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,我们应该在将密码放入 LDIF 文件之前使用 slappasswd 命令加密密码,如下所示:
$ 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=onitroad,dc=local -w mypass
安装 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
如果你使用像 Ubuntu 这样的基于 Debian 的系统,你可以像这样安装它:
$ sudo apt-get install slapd $ sudo apt-get install ldap-utils
然后我们可以让服务在启动时自动运行:
$ systemctl enable slapd
修改条目
OpenLDAP 将其信息存储在 bdb 或者 hdb 文件中。
我们可以在以下位置找到 hdb 文件:
/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
文件。
要标识元素,请使用 dn(专有名称)属性。
所以我们的 LDIF 文件中的第一行将是:
dn: olcDatabase={2}hdb,cn=config
然后我们指定是要添加(add)还是修改(modify)
changeType: modify
我们还必须澄清我们是替换它(replace)还是删除它(delete)
replace: olcSuffix
最后,我们键入已更改属性的新值。
olcSuffix: dc=onitroad,dc=local
回到我们的文件。
像这样更改以下条目:
olcSuffix: dc=my-domain,dc=com olcRootDN: cn=Manager,dc=my-domain,dc=com
所以我们的 LDIF 文件将是这样的:
dn: olcDatabase={2}hdb,cn=config changeType: modify replace: olcSuffix olcSuffix: dc=onitroad,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
什么是LDAP?
我们知道 Linux 将注册用户保存在 /etc/passwd 文件中,所以如果你想访问机器,你必须在该文件上有一个用户。
如果我们正在使用一台或者几台机器,那应该没问题,但是如果我们有数百台或者数千台机器,我们将如何维护用户管理任务(例如密码修改)或者任何其他管理任务(例如有人离开工作而我们)需要关闭他的账户,你会去每台机器上这样做吗?
这可能是一场噩梦,或者我们需要创建一个新帐户。
在这种情况下,我们需要一个集中的用户帐户管理系统,一个数据库来保存与用户帐户相关的所有信息。
此问题最常用的解决方案是轻量级目录访问协议 (LDAP)。
LDAP 使用通常的客户端/服务器范例。
添加条目
要添加条目,请使用 ldapadd 命令。
首先,我们创建我们的 ldif 文件:
dn: dc=onitroad,dc=local objectClass: dcObject objectClass: organization dc: onitroad o: onitroad
我们指定了一系列属性,如域组件 (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,组织(organization)。
现在我们可以使用 ldapadd 命令来添加我们的对象:
$ ldapadd -f myobj.ldif -D cn=admin,dc=onitroad,dc=local -w mypass
我们使用 -f 指定文件名,使用 -D 指定管理员用户,使用 -w 指定密码。
要搜索条目,我们可以使用 ldapsearch 命令:
$ ldapsearch -x -b dc=onitroad,dc=local
添加用户
我们可以将用户添加到新创建的组织单位。
首先,我们创建我们的 ldif 文件:
dn: cn=adam,ou=users,dc=onitroad,dc=local cn: adam sn: USA objectClass: myorg userPassword: mypass uid: adam
然后使用 ldapadd 命令添加用户:
$ ldapadd -f adam.ldif -x -D cn=admin,dc=onitroad,dc=local 2 -w mypass
LDAP 术语
如果我们要处理 LDAP 协议,我们需要了解一些术语,因为我们会经常使用它们。
Entry 条目(或者对象):LDAP 中的每个单元都被视为一个条目。
dn :条目名称。
o:组织名称。
dc :域组件。
例如,我们可以像这样写 onitroad.com dc=onitroad,dc=com。
cn : 通用名称,如人名或者某些对象的名称。
删除条目
删除条目非常简单,只需使用带有我们想要的 cn 的 ldapdelete 命令:
$ ldapdelete "cn=adam,ou=users,dc=onitroad,dc=local" -D cn=admin,dc=onitroad,dc=local -w mypass
我们可以使用 ldapsearch 检查该条目是否已删除:
$ ldapsearch -x -b "dc=onitroad,dc=local"
使用 LDAP Web 界面 (phpldapadmin)
对于新手来说,从终端工作可能有点棘手。
但是,我们可以使用一个基于 Web 的工具 phpldapadmin,它是用 PHP 编写的,以简化 OpenLDAP 的使用。
我们可以像这样安装它:
$ yum -y install phpldapadmin
上面的命令将安装 Apache Web 服务器,因此我们不需要安装它。
现在我们需要配置 phpldapadmin。
编辑此文件:
/etc/phpldapadmin/config.php
并更改此行:
$servers->setValue('server','host','PUT YOUR SERVER IP OR DOMAIN HERE');
如果你想使用 onitroad.local 作为域,你应该这样写:
$servers->setValue('server','base',array('dc=onitroad,dc=local'));
此外,我们需要像这样更改 bind_id 的行:
$servers->setValue('login','bind_id','cn=admin,dc= onitroad,dc=local');
并且不要忘记放置 apache 别名:
<IfModule mod_alias.c> Alias /ldap /usr/share/phpldapadmin/htdocs </IfModule>
现在我们可以像这样访问 phpldapadmin:
http://服务器域名或者ip/ldap
在登录 DN 字段中,我们将使用以下内容:
cn=admin,dc=onitroad,dc=local
我们可以在此 Web 界面中完成 添加用户、组织和组等操作。
LDAP 服务器实现
LDAP 是一个开放的标准协议,许多都在实施该协议。
有 LDAP 的商业实现,例如:
- 微软的Active Directory活动目录。
- 甲骨文的Internet Directory互联网目录。
- Oracle 的统一目录。
- IBM 的 Security Directory Server安全目录服务器。
- UnboundID 目录服务器。
- NetIQ eDirectory 或者 eDirectory。
- CA 目录或者 CA eTrust 目录。
以及免费的开源实现,例如:
- OpenLDAP.
- ForgeRock OpenDJ.
- Apache DS.
- 389 Directory Server.
在这篇文章中,我们将使用 OpenLDAP。
OpenLDAP 是在 Linux/UNIX 系统上运行的 LDAP 的开源实现。
添加组
此外,我们首先创建 ldif 文件:
dn: cn=developers,ou=users,dc=onitroad,dc=local cn: developers objectClass: groupOfNames member: cn=adam,ou=users,dc=onitroad,dc=local
然后运行 ldapadd 添加组:
$ ldapadd -f groups.ldif -x -D cn=admin,dc=onitroad,dc=local -w mypass
配置 LDAP
安装成功后,需要使用ldappasswd命令为admin用户设置密码:
$ ldappasswd
OpenLDAP 的配置文件位于 /etc/openldap/slapd.d 目录中。
我们可以直接修改这些文件或者使用 ldapmodify 命令。
强烈建议使用 ldapmodify 命令修改 OpenLDAP。
LDAP 端口
LDAP 端口为 389,如果我们使用 TLS 保护 LDAP,则该端口将为 636.
我们可以使用 netstat 命令确保 OpenLDAP 正在运行的端口。
$ netstat -ntlp | grep slapd