凌峰创科服务平台

Linux LDAP服务器搭建如何快速实现?

本教程将使用 Ubuntu 22.04 作为服务器操作系统,但步骤同样适用于其他基于 Debian 的发行版(如 Debian)。

Linux LDAP服务器搭建如何快速实现?-图1
(图片来源网络,侵删)

第一部分:LDAP 服务器端搭建

环境准备

  • 服务器: 一台干净的 Ubuntu 22.04 虚拟机或物理机。
  • IP 地址: 假设服务器 IP 为 168.1.100
  • 域名: 假设域名为 example.com
  • 主机名: 设置服务器主机名,ldap-server
    sudo hostnamectl set-hostname ldap-server
  • 更新系统
    sudo apt update && sudo apt upgrade -y

安装 OpenLDAP 及相关工具

OpenLDAP 是最流行的开源 LDAP 实现,我们还需要安装 slapd (LDAP 守护进程) 和 ldap-utils (客户端工具)。

sudo apt install -y slapd ldap-utils

安装过程中,系统会要求你设置管理员密码。请务必记住这个密码,这是你 cn=admin,dc=example,dc=com 用户的密码,如果错过了设置,可以通过 sudo dpkg-reconfigure slapd 重新配置。

重新配置 slapd (如果需要)

如果你错过了设置密码,或者想修改配置(如 Base DN),可以运行:

sudo dpkg-reconfigure slapd

在配置向导中,你会被问到以下问题:

Linux LDAP服务器搭建如何快速实现?-图2
(图片来源网络,侵删)
  • Omit OpenLDAP server configuration?: 选择 <No>
  • DNS domain name: 输入你的域名,example.com
  • Organization name: 输入你的组织名,Example Inc
  • Administrator password: 输入你之前设置的 LDAP 管理员密码。
  • Database backend to use: 选择 HDB (HDB 是 BDB 的现代替代品,支持后缀子树)。
  • Do you want to allow the removal of database when slapd is purged?: 选择 <Yes>
  • Move old database?: 选择 <Yes>
  • Force secured protocol?: 选择 <No> (为了方便测试,生产环境应考虑使用 LDAPS 或 StartTLS)。

配置完成后,OpenLDAP 服务会自动启动。

初始化 LDAP 数据库结构

我们需要定义我们的组织结构,我们会创建一个 ou=People (用于存放用户) 和一个 ou=Groups (用于存放组)。

我们将使用 ldapadd 命令来添加这些条目,创建一个包含 LDIF (LDAP Data Interchange Format) 文件的脚本。

创建 base.ldif 文件:

Linux LDAP服务器搭建如何快速实现?-图3
(图片来源网络,侵删)
cat << EOF > base.ldif
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Groups,dc=example,dc=com
objectClass: organizationalUnit
ou: Groups
EOF

执行导入:

# 使用管理员身份和密码进行导入
sudo ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f base.ldif

系统会提示你输入之前设置的 cn=admin 密码,如果成功,你会看到 added 的提示。

创建测试用户和组

现在我们来创建一个测试用户 testuser 和一个测试组 developers

创建 users.ldif 文件:

cat << EOF > users.ldif
dn: uid=testuser,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: testuser
sn: User
givenName: Test
cn: Test User
userPassword: {SSHA}your_encrypted_password  <!-- 注意:这里需要生成密码 -->
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/testuser
loginShell: /bin/bash
dn: cn=developers,ou=Groups,dc=example,dc=com
objectClass: posixGroup
cn: developers
gidNumber: 10000
memberUid: testuser
EOF

关键步骤:生成加密密码

你不能直接明文写密码,需要使用 slappasswd 命令生成。

slappasswd
  1. 系统会提示你输入并确认一个明文密码(MySecretPassword123)。
  2. 然后会输出一串加密后的字符串,格式类似 {SSHA}xxxxxxxxxxxx
  3. 将这个完整的字符串(包括 {SSHA})复制到 users.ldif 文件的 userPassword 字段中。

执行导入:

sudo ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f users.ldif

验证 LDAP 服务器

使用 ldapsearch 命令来查询我们刚刚创建的数据。

# 查询整个目录树
sudo ldapsearch -x -b "dc=example,dc=com" "(objectClass=*)"
# 只查询用户
sudo ldapsearch -x -b "ou=People,dc=example,dc=com" "uid=testuser"
# 只查询组
sudo ldapsearch -x -b "ou=Groups,dc=example,dc=com" "cn=developers"

如果能看到正确的条目信息,说明你的 LDAP 服务器已经成功搭建并配置好了!


第二部分:客户端配置 (Ubuntu/Debian)

现在我们配置另一台 Ubuntu 客户端,使其能够通过我们刚搭建的 LDAP 服务器进行用户认证。

安装客户端工具

sudo apt install -y libnss-ldap libpam-ldap nslcd

安装过程中会出现配置向导,请仔细填写以下信息:

  • LDAP server URI: ldap://192.168.1.100 (如果你的服务器 LDAPS,则用 ldaps://...)
  • Distinguished name of the search base: dc=example,dc=com
  • LDAP version to use: 选择 3
  • Make local root database admin: 选择 <No>
  • Does the LDAP database require login?: 选择 <No>
  • LDAP account for root: cn=admin,dc=example,dc=com
  • LDAP root password: 输入你在服务器上设置的 LDAP 管理员密码。
  • How to authenticate to the LDAP server: 选择 crypt (如果用户密码在 LDAP 中是明文或 SSHA 加密,这个选项通常没问题)。

配置完成后,nslcd 服务会自动启动。

配置 NSS 和 PAM

编辑 /etc/nsswitch.conf 文件,确保 passwd, group, shadow 这三项包含 ldap

sudo nano /etc/nsswitch.conf

类似这样(ldap 可以在 files 之后或之前,但通常推荐在 files 之后作为后备):

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

测试用户认证

创建本地用户家目录 (可选但推荐)

为了让首次登录的用户能自动创建家目录,可以安装 pam_mkhomedir

sudo apt install -y pam_mkhomedir

然后编辑 /etc/pam.d/common-session,在文件末尾添加一行:

sudo nano /etc/pam.d/common-session

添加:

session required        pam_mkhomedir.so skel=/etc/skel umask=0077

进行测试

  1. 在客户端上,尝试切换到 LDAP 用户:

    su - testuser

    如果一切正常,你应该能成功切换,并且系统会自动为 testuser 创建 /home/testuser 目录。

  2. 在另一个终端,直接使用 SSH 尝试登录 testuser

    ssh testuser@<客户端的IP地址>

    输入你在 users.ldif 中为 testuser 设置的密码,应该能成功登录。


第三部分:进阶配置 (可选)

使用 Samba 集成 (共享目录)

如果你想通过 LDAP 管理可以在 Windows (Samba) 和 Linux 上登录的用户,需要集成 Samba。

在服务器上安装 Samba:

sudo apt install -y samba

安装 Samba LDAP 工具:

sudo apt install -y smbldap-tools

配置 Samba:

  1. 备份原配置文件:sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
  2. 编辑 /etc/samba/smb.conf,在 [global] 部分添加或修改:
    [global]
        security = user
        passdb backend = ldapsam:ldap://127.0.0.1
        ldap admin dn = cn=admin,dc=example,dc=com
        ldap suffix = dc=example,dc=com
        ldap group suffix = ou=Groups
        ldap user suffix = ou=People
        ldap machine suffix = ou=Computers
        ldap idmap suffix = ou=Idmap
  3. 创建一个共享目录:
    sudo mkdir -p /srv/samba/share
    sudo chown nobody:nogroup /srv/samba/share
    sudo chmod 777 /srv/samba/share
  4. smb.conf 末尾添加共享定义:
    [share]
        comment = Samba Share
        path = /srv/samba/share
        browsable = yes
        guest ok = yes
        read only = no

同步 Samba 和 LDAP 密码

smbldap-tools 提供了脚本,你需要先配置 /etc/samba/smbldap.conf 文件,使其与你的 LDAP 设置匹配,然后可以使用 smbpasswd 命令来管理用户的 Samba 密码。

# 为 testuser 设置 Samba 密码
sudo smbpasswd -a testuser

testuser 就可以通过 Samba 访问共享目录了。

启用 SSL/TLS (生产环境必需)

在生产环境中,LDAP 通信必须加密以防止密码和数据被窃听,这需要配置 LDAPS (LDAP over SSL) 或 StartTLS。

  1. 生成证书: 你可以使用 OpenSSL 生成自签名证书,或者从受信任的 CA 获取。
  2. 将证书放到服务器: /etc/ssl/certs//etc/ssl/private/
  3. 修改 slapd 配置: 编辑 /etc/ldap/slapd.conf (或通过 cn=config 动态配置),启用 TLSCertificateFileTLSCertificateKeyFile
  4. 重启 slapd 服务: sudo systemctl restart slapd
  5. 修改客户端配置: 将客户端的 LDAP URI 从 ldap:// 改为 ldaps://ldap://... starttls=yes

总结与排错

  • 查看日志: 遇到问题时,首先查看日志。
    • 服务器日志: journalctl -u slapd -f
    • 客户端日志: journalctl -u nslcd -f
  • 防火墙: 确保服务器的防火墙(如 ufw)允许 LDAP 端口(389/TCP, 636/TCP for LDAPS)。
    sudo ufw allow 389/tcp
    sudo ufw allow 636/tcp
  • SELinux/AppArmor: 如果启用了这些强制访问控制工具,可能会阻止 LDAP 服务,可以先禁用它们来测试,如果问题解决,再学习如何编写正确的策略。

这份指南涵盖了从零开始搭建一个功能可用的 LDAP 服务器的全过程,祝你搭建顺利!

分享:
扫描分享到社交APP
上一篇
下一篇