如何设置OpenLDAP服务器和身份验证客户端工作站

时间:2020-03-05 15:29:33  来源:igfitidea点击:

LDAP或者轻量级目录访问协议允许任何人定位并连接到网络(公共/私有)中的文件和设备等文件和设备等组织,人民和其他资源。
LDAP遵循X.500标准,网络中的目录服务标准通常使用通常使用通常的客户端/服务器范例。
LDAP更轻,因为它在其初始版本中它不包括安全功能。
目录服务的主要使用是将用户和对象数据存储在中央系统中,并使此数据可用于主要用于身份验证或者作为地址簿,我们可以使用OpenLDAP服务器来完成此操作。
本文介绍了如何在Ubuntu 16.04中使用轻量级目录访问协议设置OpenLDAP服务器和认证客户端工作站

本教程介绍如何在Ubuntu 16.04中使用轻量级目录访问协议设置OpenLDAP服务器和身份验证客户端工作站。

使用LDAP.

→LDAP在中央数据库中保留用户和其他网络对象。

→LDAP存储诸如纯文本信息,镜像,二进制数据,中央数据库中的公钥证书等信息。

→LDAP提供像登录管理等身份验证和授权服务。

→LDAP还可以将DNS记录存储在其数据库中。

→LDAP可以像任何组织一样使用黄页目录服务。

LDAP术语

LDAP术语是X.500目录规范的一部分,其定义了LDAP目录中的节点。

cn commonname l localitalname st state orprovinceName o组织name ou组织unitname c countryname Street StreetAddress DC DomainComponent UID Usid DN专有名称

最后一个例如:dn(可分辨名称)是一系列逗号分隔的键/值对,用于唯一地在目录层次结构中识别条目。
DN实际上是条目的完全限定名称。
例如,字符串"CN = Netherlands,OU =分发组,DC = GP,DC = GL,DC = InITOAD,DC = COM"是来自称为目录信息树的分层结构的路径,应从右侧(root)读取左(叶)。

在本文中,我们将在Ubuntu 16中设置OpenLDAP服务器,并配置OpenLDAP客户端,该客户端将从服务器检索登录凭据并验证用户。

| | IP地址|
| --- - | --- |
| OpenLDAP Server <br> 10.0.0.196 |
| OpenLDAP客户端<br> | 10.0.0.33 |

安装OpenLDAP服务器

使用APT-GET安装OpenLDAP及其实用程序,并在启动期间启用它。
安装时,它会要求提供管理员密码。

# sudo apt-get update
# apt-get install slapd ldap-utils
# systemctl enable slapd

使用NetStat,检查Slapd是否在Port No 389中运行

# netstat -pltn

Ubuntu 16默认情况下与防火墙一起发货。
如果启用了UFW,则使用以下命令打开端口NO 389.

# sudo ufw allow 389/tcp
# sudo ufw reload

已安装OpenLDAP包,现在我们将重新配置Ubuntu附带的所有默认值。
执行以下命令以提出包配置工具。

# sudo dpkg-reconfigure slapd

包配置工具将询问重新配置OpenLDAP的一系列问题

→省略OpenLDAP服务器配置?
<no>

→DNS域名:onitad.com

→组织名称:onITORAD

→输入密码并确认:密码

→数据库后端使用:HDB

→清除Slapd时是否要将数据库删除?
<no>

→移动旧数据库?
<是>

→允许LDAPv2协议?
<no>

重新启动OpenLDAP.

# systemctl restart slapd

我们可以使用以下命令在稍后阶段更改OpenLDAP的管理员密码。

# ldappassword

在此阶段,我们已安装和重新配置OpenLDAP服务器。
要在OpenLDAP数据库中查找admin的条目,我们将使用ldapsearch命令。
Ldapsearch将提示我们在重新配置OpenLDAP期间提供的管理员密码。

# ldapsearch -x -W -D cn=admin,dc=theitroad,dc=com -b dc=theitroad,dc=com -LLL
Enter LDAP Password:
dn: dc=theitroad,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: theitroad
dc: theitroad
dn: cn=admin,dc=theitroad,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9MkdIK2p1enlxQ3hFNmtMSE56TUE5NzZzOFQxVGdxSUE=

添加组织单位(OU)

要添加OU,我们将创建一个LDIF(LDAP数据交换格式)文件,该文件是旨在从LDAP服务器交换信息的标准文本格式。
按名称"组"添加组织单位。

# vi ou_group.ldif
dn: ou=groups,dc=theitroad,dc=com
changetype: add
objectClass: organizationalUnit
objectClass: top
ou: groups

我们将使用LDAPADD添加上述组织单位。

# ldapadd -W -D "cn=admin,dc=theitroad,dc=com" -f ou_group.ldif

修改组织单位(OU)

要修改组织单位,请使用以下内容创建LDIF文件。
在此示例中,我们正在为现有OU添加邮政编码的条目。

# vi modify_ou.ldif
dn: ou=groups,dc=theitroad,dc=com
changetype: modify
add: postalCode
postalCode: 788109

使用ldapmodify修改OU

# ldapmodify -x -W -D "cn=admin,dc=theitroad,dc=com" -f modify_ou.ldif
Enter LDAP Password:
modifying entry "ou=groups,dc=theitroad,dc=com"

删除组织单位(OU)

要删除组织单位,请使用ldapdelete指定ou的可分辨名称

# ldapdelete -W -D "cn=admin,dc=theitroad,dc=com" "ou=groups,dc=theitroad,dc=com"
Enter LDAP Password:

添加组

要添加POSIX组,我们将为IT创建一个LDIF文件。

# vi irc_users.ldif
dn: cn=ircusers,ou=groups,dc=theitroad,dc=com
objectClass: posixGroup
objectClass: top
cn: ircusers
gidNumber: 4000

使用之前使用ldapadd命令添加组

# ldapadd -x -W -D "cn=admin,dc=theitroad,dc=com" -f irc_users.ldif
Enter LDAP Password:
adding new entry "cn=ircusers,ou=groups,dc=theitroad,dc=com"

修改组

定义用于修改组的LDIF文件,我们将为现有的IRCusers组添加"描述"。

# vi modify_irc_users.ldif
dn: cn=ircusers,ou=groups,dc=theitroad,dc=com
changetype: modify
add: description
description: Groups under OU

使用ldapmodify修改该组

# ldapmodify -x -W -D "cn=admin,dc=theitroad,dc=com" -f modify_irc_users.ldif
Enter LDAP Password:
modifying entry "cn=ircusers,ou=groups,dc=theitroad,dc=com"

删除组

要删除组使用LDAPDelete指定组的可分辨名称。

# ldapdelete -W -D "cn=admin,dc=theitroad,dc=com" "cn=ircusers,ou=groups,dc=theitroad,dc=com"
Enter LDAP Password:

添加用户

首先使用slappasswd生成用户的SSHA密码

# slappasswd -h {SSHA} -s mypass
{SSHA}d9NeiNx4RLSEtXNuMxq7+jWK/5yxwCWT

接下来为用户创建一个LDIF文件

# vi mike_user.ldif
dn: uid=mike,ou=groups,dc=theitroad,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: mike
sn: smith
givenName: mike
cn: mike
uidNumber: 4000
gidNumber: 4000
userPassword: {SSHA}d9NeiNx4RLSEtXNuMxq7+jWK/5yxwCWT
loginShell: /bin/bash
homeDirectory: /home/mike

确保在我们的情况下提供正确的组ID号(GIDNumber),这是4000。
使用ldapadd命令添加上述用户。

# ldapadd -x -W -D "cn=admin,dc=theitroad,dc=com" -f mike_user.ldif
Enter LDAP Password:
adding new entry "uid=mike,ou=users,dc=theitroad,dc=com"

删除用户

删除用户使用ldapdelete命令

# ldapdelete -W -D "cn=admin,dc=theitroad,dc=com" "uid=mike,ou=groups,dc=theitroad,dc=com"

检查是否已使用以下命令删除条目。

# ldapsearch -x -b "dc=theitroad,dc=com"

修改用户

要修改用户,请创建LDIF文件,然后使用LDAPmodify来实现它。

# vi modify_mike.ldif
dn: uid=mike,ou=groups,dc=theitroad,dc=com
changetype: modify
replace: smith
sn: smt

add: title
title: Grand Poobah

add: jpegPhoto
jpegPhoto: /tmp/smith.png

现在执行ldapmodify命令

# ldapmodify -x -W -D "cn=admin,dc=theitroad,dc=com" -f modify_mike.ldif
Enter LDAP Password:
modifying entry "uid=mike,ou=users,dc=theitroad,dc=com"

搜索OpenLDAP数据库

从服务器本身,我们现在可以检查是否可以读取数据库。
下面的命令将转储整个目录。

# ldapsearch -x -LLL -H ldap:///-b dc=theitroad,dc=com
dn: dc=theitroad,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: theitroad
dc: theitroad
dn: cn=admin,dc=theitroad,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
dn: ou=groups,dc=theitroad,dc=com
objectClass: organizationalUnit
objectClass: top
ou: groups
dn: ou=users,dc=theitroad,dc=com
objectClass: organizationalUnit
objectClass: top
ou: users
dn: cn=dbagrp,ou=groups,dc=theitroad,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 678
cn: dbagrp
dn: cn=ircusers,ou=groups,dc=theitroad,dc=com
objectClass: posixGroup
objectClass: top
cn: ircusers
gidNumber: 4000
dn: uid=mike,ou=users,dc=theitroad,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: mike
sn: smith
givenName: mike
cn: mike
uidNumber: 4000
gidNumber: 4000
loginShell: /bin/bash
homeDirectory: /home/mike

使用phpmyadmin.

我们通过命令行创建/编辑/搜索了OU,组,用户。
但是,我们可以使用名为phpldapadmin的Web界面执行相同的操作。
默认情况下,phpldapadmin与Ubuntu一起发货。
使用apt-get安装它。

# sudo apt-get install phpldapadmin

编辑phpldapadmin的配置文件以反映我们之前创建的目录结构。

# vi /etc/phpldapadmin/config.php
$servers->setValue('server','name','My LDAP Server');
$servers->setValue('server','host','LDAP-SERVER-IP');
$servers->setValue('server','base',array('dc=theitroad,dc=com'));
$servers->setValue('login','auth_type','session');
$servers->setValue('login','bind_id','cn=admin,dc=theitroad,dc=com');

我们现在可以通过http://ldap-server-ip/phpldapadmin访问phpldapadmin。
使用用户登录默认目录结构和密码作为"密码"。
密码保护PHPLDAPADMIN位置,使用Apache Utils HTPassWD创建用户。

# sudo htpasswd -c /etc/apache2/htpasswd ldapadminuser
New password:
Re-type new password:
Adding password for user ldapadminuser

在Apache的主要配置文件/etc/apache2/apache2.conf中添加以下部分

# vi /etc/apache2/apache2.conf
<Location /phpldapadmin>
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/apache2/htpasswd
Require valid-user
</Location>

重新启动Apache.

# systemctl restart apache2

刷新PHPLDAPADMIN页面,我们将看到使用HTPASSWD UTILS配置的密码提示。

安装OpenLDAP客户端

我们将在客户端计算机中安装一些包,以使用OpenLDAP服务器正确地进行身份验证功能。

# apt-get install ldap-auth-client nscd

我们将被问到一系列类似于在服务器配置期间被问到的问题。

→LDAP服务器统一资源标识符:LDAP://10.0.0.196

→搜索基础的专有名称:DC = OnItoad,DC = COM

→LDAP版本:3

→制作本地根数据库管理员:<是>

→LDAP数据库是否需要登录?
<no>

→root的LDAP帐户:cn = admin,dc = onitread,dc = com

→LDAP root帐户密码:密码

我们可以始终通过在终端中执行以下命令来更改配置。

#  sudo dpkg-reconfigure ldap-auth-config

配置OpenLDAP客户端

我们需要编辑文件/etc/nsswitch.conf以通知身份验证文件有关OpenLDAP服务器的存在。
编辑/etc/nsswitch.conf文件并修改以passwd,group,影子开始的行,如下所示。

# vi /etc/nsswitch.conf
passwd:         ldap compat
group:            ldap compat
shadow:         ldap compat

在文件末尾编辑/etc/pam.d/common-session和以下行。

# vi /etc/pam.d/common-session
....................
....................
session required        pam_mkhomedir.so skel=/etc/skel umask=0022

使用带有LDAP的Auth-Client-Config设置NSS

# auth-client-config -t nss -p lac_ldap
# cd /usr/share/pam-configs/
# vi mkhomedir
Name: Create home directory on login for theitroad
Default: yes
Priority: 0
Session-Type: Additional
Session-Interactive-Only: yes
Session:
required                        pam_mkhomedir.so umask=0022 skel=/etc/skel

上面文件的最后一行将在LDAP用户登录时在客户端计算机上创建一个主目录,并且没有主目录。
现在更新PAM身份验证。

# pam-auth-update

启用"创建主目录在登录时创建主目录......"的行,然后选择"确定"。
重新启动nscd。

# /etc/init.d/nscd restart
[ ok ] Restarting nscd (via systemctl): nscd.service.

列出使用Getent的密码文件的条目。
该列表将包括我们在服务器上之前创建的LDAP用户的"Mike"。

# getent passwd
mike:x:4000:4000:mike:/home/mike:/bin/bash

如果我们之前未安装SSH,则使用SSH安装它。

# apt-get install ssh

确保在/etc/ssh/sshd_config中将以下设置为yes是yes

PermitRootLogin yes
UsePAM yes

使用ssh连接到LDAP服务器

# ssh [email protected]

获得迈克shell 的另一种方法是在客户端机器中使用sudo。

# su - mike
mike@ip-10-0-0-33:~$

在配置OpenLDAP服务器时,我们创建了具有可分辨名称的LDAP管理员"CN = admin,dc = onitread,dc = com"此值管理员默认情况下与Ubuntu中的管理组匹配。
我们为管理组创建的LDAP用户将访问sudo命令,因为它在/etc/sudoers文件中有一个条目,如下面 -

%admin ALL=(ALL) ALL

要撤消对管理组的sudo访问权限,请通过在行的开头放置哈希来注释上述行。
我们还可以通过添加%用户=(全部)所有到/etc/sudoers文件来授予sudo访问特定用户。