如何設置 OpenLDAP 服務器和驗證客戶端工作站

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通用名
L 地名
ST州或省名
O 組織名稱
OU組織單位名稱
C國名
街道街道地址
DC域組件
用戶名
DN 專有名稱

最後一個,即 DN(專有名稱)是一系列以逗號分隔的鍵/值對,用於在目錄層次結構中唯一地標識條目。 DN 實際上是條目的完全限定名稱。 例如,字符串“CN=India,OU=Distribution Groups, DC=gp, DC=gl, DC=linoxide, DC=com”是來自稱為層次結構的路徑 目錄信息樹 並且應該從右(根)到左(葉)讀取。

在本文中,我們將在 Ubuntu 16 中設置 OpenLDAP 服務器並配置 OpenLDAP 客戶端,該客戶端將從服務器檢索登錄憑據並對用戶進行身份驗證。

IP地址
OpenLDAP 服務器
10.0.0.196
OpenLDAP 客戶端
10.0.0.33

安裝 OpenLDAP 服務器

使用 apt-get 安裝 OpenLDAP 及其實用程序並在啟動期間啟用它。 安裝時,它會要求提供 admin 密碼。

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

使用 netstat,檢查 slapd 是否在 389 端口運行

# netstat -pltn

默認情況下,Ubuntu 16 附帶防火牆 UFW。 如果啟用了 UFW,則使用以下命令打開 389 號端口。

# sudo ufw allow 389/tcp
# sudo ufw reload

OpenLDAP 軟件包已安裝,現在我們將重新配置 ubuntu 附帶的所有默認設置。 執行以下命令,調出包配置工具。

# sudo dpkg-reconfigure slapd

包配置工具會詢問重新配置 OpenLDAP 的一系列問題

→省略 OpenLDAP 服務器配置? <否>

→DNS域名:linoxide.com

→組織名稱:linoxide

→Enter 密碼並確認:密碼

→要使用的數據庫後端:HDB

→您是否希望在清除 slapd 時刪除數據庫? <否>

→移動舊數據庫? <是>

→允許LDAPv2協議? <否>

重啟 OpenLDAP

# systemctl restart slapd

你可以改變 admin 稍後使用以下命令為 OpenLDAP 設置密碼。

# ldappassword

在這個階段,我們已經安裝並重新配置了 OpenLDAP 服務器。 查找條目 admin 在 OpenLDAP 數據庫中,我們將使用 ldapsearch 命令。 ldapsearch 將提示輸入 admin 我們在重新配置 OpenLDAP 期間提供的密碼。

# ldapsearch -x -W -D cn=admin,dc=linoxide,dc=com -b dc=linoxide,dc=com -LLL

Enter LDAP Password:
dn: dc=linoxide,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: linoxide
dc: linoxide

dn: cn=admin,dc=linoxide,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=linoxide,dc=com
changetype: add
objectClass: organizationalUnit
objectClass: top
ou: groups

我們將使用 ldapadd 添加上述組織單位。

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

修改組織單位 (OU)

要修改組織單位,請創建一個包含以下內容的 ldif 文件。 在這 example,我們正在向現有 OU 添加郵政編碼條目。

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

使用 ldapmodify 修改 OU

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

刪除組織單位 (OU)

要刪除組織單位,請使用 ldapdelete 指定 OU 的專有名稱

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

添加群組

要添加 posix 組,我們將為它創建一個 LDIF 文件。

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

像以前一樣使用 ldapadd 命令添加組

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

修改組

定義用於修改組的 ldif 文件,我們將為現有的 ircusers 組添加“描述”。

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

使用 ldapmodify 修改組

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

刪除群組

要刪除組,請使用 ldapdelete 指定組的專有名稱。

# ldapdelete -W -D "cn=admin,dc=linoxide,dc=com" "cn=ircusers,ou=groups,dc=linoxide,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=linoxide,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=linoxide,dc=com" -f mike_user.ldif
Enter LDAP Password:
adding new entry "uid=mike,ou=users,dc=linoxide,dc=com"

刪除用戶

要刪除用戶,請使用 ldapdelete 命令

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

使用以下命令檢查條目是否已被刪除。

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

修改用戶

要修改用戶,請創建一個 ldif 文件,然後使用 ldapmodify 來實現它。

# vi modify_mike.ldif
dn: uid=mike,ou=groups,dc=linoxide,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=linoxide,dc=com" -f modify_mike.ldif
Enter LDAP Password:
modifying entry "uid=mike,ou=users,dc=linoxide,dc=com"

搜索 OpenLDAP 數據庫

從服務器本身,您現在可以檢查是否可以讀取數據庫。 下面的命令將轉儲整個目錄。

# ldapsearch -x -LLL -H ldap:/// -b dc=linoxide,dc=com
dn: dc=linoxide,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: linoxide
dc: linoxide

dn: cn=admin,dc=linoxide,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

dn: ou=groups,dc=linoxide,dc=com
objectClass: organizationalUnit
objectClass: top
ou: groups

dn: ou=users,dc=linoxide,dc=com
objectClass: organizationalUnit
objectClass: top
ou: users

dn: cn=dbagrp,ou=groups,dc=linoxide,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 678
cn: dbagrp

dn: cn=ircusers,ou=groups,dc=linoxide,dc=com
objectClass: posixGroup
objectClass: top
cn: ircusers
gidNumber: 4000

dn: uid=mike,ou=users,dc=linoxide,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=linoxide,dc=com'));
$servers->setValue('login','auth_type','session');
$servers->setValue('login','bind_id','cn=admin,dc=linoxide,dc=com');

您現在可以通過 https://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=linoxide,dc=com

→LDAP 版本:3

→製作本地根數據庫 admin: <是>

→LDAP 數據庫需要登錄嗎? <否>

→root 的 LDAP 帳戶:cn=admin,dc=linoxide,dc=com

→LDAP root賬號密碼:密碼

您始終可以通過在終端中執行以下命令來更改配置。

#  sudo dpkg-reconfigure ldap-auth-config

配置 OpenLDAP 客戶端

我們需要編輯文件 /etc/nsswitch.conf 以通知身份驗證文件有關 OpenLDAP 服務器的存在。 編輯 /etc/nsswitch.conf 文件並將以 passwd、group、shadow 開頭的行修改為如下所示。

# 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 Linoxide
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

PermitRootLogin yes
UsePAM yes

使用 SSH 連接到 LDAP 服務器

# ssh [email protected]

獲取邁克外殼的另一種方法是使用 sudo 在客戶端機器中。

# su - mike
[email protected]:~$

在配置 OpenLDAP 服務器時,我們創建了 LDAP 管理員,其專有名稱為“cn=admin,dc=linoxide,dc=com” 這個值 admin 與 admin 默認情況下,Ubuntu 中存在的組。 我們創建的 LDAP 用戶 admin 組將有權訪問 sudo 命令,因為 /etc/sudoers 文件中有一個條目,如下所示 –

%admin ALL=(ALL) ALL

撤銷訪問 sudo 為了 admin 組,通過在行的開頭放置一個散列來註釋上面的行。 你也可以授予 sudo 通過將 %user ALL=(ALL) ALL 添加到 /etc/sudoers 文件來訪問特定用戶。

結論

使用 OpenLDAP 服務器的優點是可以將整個組織的信息放在一個中央存儲庫中。 LDAP 可用作可從網絡上的任何位置訪問的中央目錄,而不是單獨管理每個組的用戶。 此外,LDAP 支持安全套接字層 (SSL) 和傳輸層安全性 (TLS),因此可以保護敏感數據免遭窺探。 瀏覽 OpenLDAP 文檔 了解有關 OpenLDAP 管理的更多信息。