Linux 中的 LDAP 身份验证Linux 中的 LDAP 身份验证Linux 中的 LDAP 身份验证Linux 中的 LDAP 身份验证
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

Linux 中的 LDAP 身份验证

在此页

  1. 要求
  2. 介绍
  3. 配置 OpenLDAP
  4. 迁移/添加数据到目录
  5. 客户端配置
  6. Apache mod_auth_ldap
  7. LDAP 管理工具
  8. 其他 ldap 感知应用程序
  9. 总结

这个 howto 将向您展示如何在 LDAP 中存储您的用户并根据它验证某些服务。我不会展示如何安装特定的包,因为它依赖于分发/系统。我将专注于拥有 LDAP 身份验证/用户存储所需的所有组件的“纯”配置。 howto 以某种方式假设您正在从常规 passwd/shadow 身份验证迁移,但它也适合从头开始做的人。

要求

  • OpenLDAP
  • pam_ldap
  • nss_ldap
  • PADL 迁移工具

简介

我们想要实现的是将我们的用户存储在 LDAP 中,根据 LDAP(直接或 pam)进行身份验证,并拥有一些工具以人类可理解的方式进行管理。

这样我们就可以使用所有支持 LDAP 的软件或回退到 PAM LDAP 模块,它将充当 PAM->LDAP 网关。

有关 LDAP 思想的更多信息可以在维基百科上找到:LDAP wikipedia

配置 OpenLDAP

OpenLDAP 由 slapd 和 slurpd 守护进程组成。这个 howto 涵盖了一个没有复制的 LDAP 服务器,所以我们将只关注 slapd。我还假设您安装并初始化了 OpenLDAP 安装(取决于系统/发行版)。如果是这样,让我们转到配置部分。

在我的系统 (Gentoo) 上,OpenLDAPs 配置存储在 /etc/openldap 中,我们对 /etc/openldap/slapd.conf 文件感兴趣。但首先我们必须为 LDAP 管理员生成一个密码,并将其放入配置文件中:

slappasswd -h {md5}

配置如下所示:

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema
allow bind_v2
pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args
modulepath /usr/lib/openldap/openldap
access to attrs=userPassword by dn="uid=root,ou=People,dc=domain,dc=com" write by dn="cn=Manager,dc=domain,dc=com" write by anonymous auth by self write by * none access to dn.base="" by * read
access to * by dn="cn=Manager,dc=domain,dc=com" write by * read database bdb suffix "dc=domain,dc=com"
rootdn "cn=Manager,dc=domain,dc=com" rootpw {MD5}Tk1sMytv5ipjr+Vhcf03JQ==
directory /var/lib/openldap-data index objectClass eq

请记住根据您的需要更改后缀和路径。

这些是基本选项,其中包含用户更改密码所需的一些基本 ACL。如果您需要更多功能,请阅读有关 OpenLDAP 的手册。现在,当我们对 slapd 进行了适当的配置后,我们就可以启动守护进程了:

service slapd start

请记住在负责传递给 slapd 的参数的配置文件中有类似的东西(路径应该指向 slapd.sock):

OPTS="-h 'ldaps:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"

现在我们可以测试 openldap 是否正在运行并正常工作。目录中还没有任何数据,但我们可以尝试绑定为 cn=Manager,dc=domain,dc=com。当系统要求您输入密码时,您应该使用您生成的密码(当然是它的纯文本版本 :):

ldapsearch -D "cn=Manager,dc=domain,dc=com" -W

迁移/添加数据到目录

现在,当我们有一个正在运行的 LDAP 服务器时,我们必须用数据填充它,创建或迁移条目。我将向您展示如何从常规 /etc/passwd、/etc/shadow、/etc/groups 迁移现有条目

第一步是根据您的需要配置 mogrationtools。 Gentoo 上的配置文件位于 /usr/share/migrationtools/migrate_common.ph。

通常,您只需要更改这些:

$DEFAULT_BASE = "dc=domain,dc=com";
$EXTENDED_SCHEMA = 1;

现在您已准备好迁移数据(实际上即使没有导出命令也可以):

export ETC_SHADOW=/etc/shadow
./migrate_base.pl > /tmp/base.ldif
./migrate_group.pl /etc/group /tmp/group.ldif
./migrate_hosts.pl /etc/hosts /tmp/hosts.ldif
./migrate_passwd.pl /etc/passwd /tmp/passwd.ldif

现在我们有了 LDAP 服务器可以理解的格式的数据。请使用文本编辑器打开其中一个文件以熟悉语法。之后,我们可以从 ldifs 添加数据。

ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/base.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/group.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/passwd.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/hosts.ldif

您可以尝试搜索一些数据:

ldapsearch uid=foouser

客户端配置

通过客户端,我的意思是连接到 LDAP 服务器以获取用户和授权的机器。它也可以是运行 LDAP 服务器的机器。在这两种情况下,我们都必须编辑三个文件:/etc/ldap.conf、/etc/nsswitch.conf 和 /etc/pam.d/system-auth

让我们从 ldap.conf,ldaps 客户端开始:

BASE    dc=domain, dc=com
scope sub
suffix          "dc=domain,dc=com"

## when you want to change user's password by root 
rootbinddn cn=Manager,dc=domain,dc=com

## there are needed when your ldap dies
timelimit 5
bind_timelimit 5

uri ldap://ldap.domain.com/
pam_password exop

ldap_version 3
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_member_attribute memberuid

nss_base_passwd ou=Computers,dc=cognifide,dc=pl nss_base_passwd ou=People,dc=cognifide,dc=pl nss_base_shadow ou=People,dc=cognifide,dc=pl nss_base_group ou=Group,dc=cognifide,dc=pl nss_base_hosts ou=Hosts,dc=cognifide,dc=pl

现在是 nsswitch.conf 和 pam 的时候了

将这些添加到 nsswitch.conf:

passwd: files ldap
shadow: files ldap
group:  files ldap

并将系统身份验证(或任何您拥有的登录名、sshd 等)更改为:

auth       required     pam_env.so
auth       sufficient   pam_unix.so likeauth nullok
auth       sufficient   pam_ldap.so use_first_pass
auth       required     pam_deny.so

account    sufficient   pam_unix.so
account    sufficient   pam_ldap.so
account    required     pam_ldap.so

password   required     pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password   sufficient   pam_unix.so nullok md5 shadow use_authtok
password   sufficient   pam_ldap.so use_first_pass
password   required     pam_deny.so

session    required     pam_limits.so
session    required     pam_unix.so
session    optional     pam_ldap.so

是时候测试一下了。最好的工具是一个很好的旧 getent。从您的系统中选择一个用户并发出:

getent passwd | grep foouser

您应该得到两次结果,如果是这样,nss_ldap 工作正常。可以通过从 /etc/passwd 中删除用户并尝试通过 ssh 登录来测试 pam 部分。

阿帕奇 mod_auth_ldap

要在 apache 中获得 LDAP 授权,您必须加载 mod_auth_ldap 模块

LoadModule mm_auth_ldap_module modules/mod_auth_ldap.so

现在足以使 .htaccess 像这样:

AuthName "Restricted"
AuthType Basic
AuthLDAPURL ldap://ldap.domain.com:389/ou=People,dc=domain,dc=com?uid
AuthLDAPBindDN "cn=Manager,dc=domain,dc=com"
AuthLDAPBindPassword "your_secret_secret_password_to_ldap_admin"
require valid-user

注意这个方法也可以用于WebDAV颠覆授权

LDAP 的管理工具

我推荐使用一些工具来管理 OpenLDAP 服务器

  • phpldapadmin - 基于网络的工具
  • ldapvi - vim 浏览
  • PADL 迁移工具 - 迁移工具
  • IDEALX sambaldap 工具 - samba LDAP 工具

其他 ldap 感知应用程序

    • 后缀
    • 快递 IMAP
    • 喋喋不休
    • 电子群件

    概括

    如果有人要添加什么,请添加。我知道配置可能并不完美。

©2015-2025 艾丽卡 support@alaica.com