简介
LDAP(轻量级目录访问协议)是将认证信息保存在单一集中位置的一种方式。在之前的一篇文章中,我们讨论了如何在 Ubuntu 12.04 VPS 上设置 LDAP 服务器。这解释了实际的服务器配置。
在本文中,我们将讨论如何配置客户端机器以远程验证各种服务的服务器。
要完成这个项目,您需要一个配置为 LDAP 服务器的 Ubuntu 12.04 服务器。如果您还没有这样做,请查看以前的指南的链接。您还需要另一个 Ubuntu 12.04 droplet 作为客户端机器。
安装客户端软件包
在客户端机器上,您需要安装一些软件包,以使 LDAP 服务器的认证功能正常运行。
您可以使用以下命令从默认的 Ubuntu 软件仓库安装它们:
sudo apt-get update sudo apt-get install libpam-ldap nscd
在安装服务器组件时,您将被问及各种类似于安装服务器组件时的问题。
- LDAP 服务器统一资源标识符:ldap://LDAP-服务器-IP-地址
- 在输入服务器信息之前,将初始字符串从 “ldapi:///” 更改为 “ldap://”
- 搜索基本的可分辨名称:
- 这应该与您在 LDAP 服务器的
/etc/phpldapadmin/config.php
文件中设置的值相匹配。 - 在文件中搜索:“ ‘server’,‘base’,array”。
- 我们的示例是 “dc=test,dc=com”。
- 要使用的 LDAP 版本:3
- 使本地根数据库管理员:是
- LDAP 数据库是否需要登录?否
- 根用户的 LDAP 帐户:
- 这也应该与您的
/etc/phpldapadmin/config.php
中的值匹配。 - 在文件中搜索:“ ‘login’,‘bind_id’”。
- 我们的示例是 “cn=admin,dc=test,dc=com”。
- LDAP 根帐户密码:您的-LDAP-根密码
如果您犯了错误并且需要更改某个值,可以通过发出以下命令再次通过菜单进行操作:
sudo dpkg-reconfigure ldap-auth-config
配置客户端软件
我们必须调整一些文件,告诉我们的认证文件可以查看我们的 LDAP 服务器以获取认证信息。
首先,编辑 /etc/nsswitch.conf
文件。这将允许我们指定当用户发出认证更改命令时应修改 LDAP 凭据。
sudo nano /etc/nsswitch.conf
我们感兴趣的三行是 “passwd”、“group” 和 “shadow” 的定义。将它们修改为如下所示:
passwd: <span class="highlight">ldap</span> compat group: <span class="highlight">ldap</span> compat shadow: <span class="highlight">ldap</span> compat
接下来,我们将向我们的 PAM 配置添加一个值。
PAM(可插入式认证模块)是一个连接可以提供认证的应用程序和需要认证的应用程序的系统。
PAM 已经在大多数计算机上实现,并且在不需要用户交互的情况下在后台工作。当我们安装和配置我们的 LDAP PAM 模块时,大部分所需的信息已经添加到配置文件中。
编辑 /etc/pam.d/common-session
文件:
sudo nano /etc/pam.d/common-session
在配置文件的底部添加一行:
session required pam_mkhomedir.so skel=/etc/skel umask=0022
这将在 LDAP 用户登录时在客户端机器上创建一个家目录。
我们必须重新启动一个服务,以实施这些更改:
sudo /etc/init.d/nscd restart
权限
在 LDAP 服务器配置期间,我们创建了一个名为 “admin” 的组。这不是随机选择的。它与 Ubuntu 机器上默认创建的 “admin” 组相对应。
您添加到 “admin” 组的 LDAP 用户将具有对 sudo
命令的访问权限。
这是因为我们在 /etc/sudoers
文件中有一行,该行为 “admin” 组的成员提供了 sudo 访问权限。通过发出以下命令编辑文件:
sudo visudo
有一行是:
%admin ALL=(ALL) ALL
以百分号(%)开头的条目指定一个组而不是一个用户。如果您希望禁用此功能,或者仅授予特定用户此功能,请注释掉此行:
#%admin ALL=(ALL) ALL
作为 LDAP 用户登录
我们现在已经配置了我们的客户端机器,足以能够以我们的 LDAP 用户之一的身份登录。这个用户不必存在于客户端机器上。
在一个新的终端窗口中(最好保持原始终端窗口登录,以防配置错误),使用 LDAP 用户的凭据 ssh 进入客户端机器:
ssh <span class="highlight">LDAP_user</span>@<span class="highlight">LDAP_client_IP_Address</span>
您应该能够像本地创建用户一样登录。发出打印工作目录命令:
pwd
您应该看到您在 LDAP 服务器上选择的家目录正在在此机器上使用。它已按需创建,以为 LDAP 用户提供服务。
如果您注销并以不同的 LDAP 用户登录,您会看到将有两个家目录条目:
ls /home
user1 user2
如果您的用户是 “admin” 组的成员,并且您没有在上一节中禁用此功能,您将具有正常的 sudo 访问权限,否则将不会有。
如果您发出 passwd
命令来更改您的密码,您会看到它将修改您的 LDAP 凭据:
passwd
输入登录(LDAP)密码:
通过组限制访问
如果你只希望特定组的成员能够登录到这台特定的机器,你可以在 PAM 文件中配置这个限制。
以 root 权限编辑以下文件:
sudo nano /etc/pam.d/common-auth
在文件底部,我们将指定 PAM 应该查看安全访问文件以了解如何限制用户登录。在底部添加以下内容:
auth required pam_access.so
保存并关闭文件。
当配置了该设置时,PAM 引用的用于安全信息的文件位于 /etc/security/access.conf
。现在以 root 权限打开这个文件:
sudo nano /etc/security/access.conf
我们需要在文件末尾添加一条规则。
行首的短横线(-)表示这是一个限制。从第一个冒号(:)到下一个冒号,我们指定这条规则适用于谁。
我们指定这适用于除了 root 和组 “admin” 之外的所有用户。组名放在括号内。
从第二个冒号到行尾,我们将指定规则适用的情况。在我们的情况下,该限制将适用于除了本地登录之外的所有情况。
-:ALL EXCEPT root (admin):ALL EXCEPT LOCAL
这将允许我们限制 “admin” 组的登录。我们可以添加其他组或更改组。
这也将允许我们通过 DigitalOcean 控制台上的 “控制台访问” 按钮登录,如果我们不小心锁定了 SSH。
请记住,这将适用于所有用户,而不仅仅是 LDAP 用户。因此,在客户端机器上创建的任何用户都需要是指定组的成员。
结论
现在,你应该能够使用集中式 LDAP 服务器对多台计算机进行身份验证。只要 LDAP 用户具有适当的登录凭据,他们就可以使用你以这种方式配置的任何机器。
这可以防止你的用户信息变得分散、重复且难以管理。当访问你的服务器或项目的用户数量增加,机器数量也在增长时,LDAP 身份验证可以提供巨大帮助。