OpenLDAP快速入門

前言

LDAP輕量目錄訪問協議爲用戶管理提供了統一認證服務,解決了長期存在的多套用戶認證系統孤立、繁雜、難以維護的問題。具有簡捷、高效、易用的特性,是用戶認證管理的不二選擇

一、簡介

LDAP(Lightweight Directory Access Protocol)是基於X.500標準的輕量目錄訪問協議。它比X.500具有更快的查詢速度和更低的資源消耗,精簡靈活,支持TCP/IP協議。LDAP爲用戶管理提供了統一認證服務,解決了辦公環境中多套用戶認證和項目管理系統相互獨立分散的難題。
OpenLDAP 是LDAP的開源實現,OpenLDAP目錄中的信息是按照樹形結構進行組織的,具體信息存儲在條目(entry)中,條目是LDAP的基本元素,也是識別名(DN)的屬性集合,DN 具有全局唯一性,用於準確地引用條目,每個條目屬性又包含類型(type)和值(value)。整體架構如圖所示:
OpenLDAP快速入門

二、快速安裝

系統環境:CentOS7.3
主機名:openldap
系統IP:172.16.201.6
管理賬戶信息:dn:cn=Manager,dc=mydomain,dc=com
部署時,可根據實際需求更改以上信息。

2.1.環境準備
OpenLDAP正式部署前,首先對linux系統環境進行如下準備配置,以滿足OpenLDAP安裝運行需求。

1.設置主機名:

hostnamectl set-hostname openldap

主機名可自行設置成任意名字,只需將openldap設置爲更改的主機名即可。

2.關閉防火牆和selinux

systemctl stop firewalld
systemctl disable firewalld
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

3.配置epel源,配置完成後重啓服務器,以使相關配置生效

yum install epel-release -y
reboot

2.2.OpenLDAP安裝

1.安裝ldap相關組件

yum install openldap openldap-servers openldap-clients -y
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

2.啓動ldap服務

systemctl start slapd
systemctl enable slapd
systemctl status slapd

slapd即ldap的服務名稱

3.設置ldap管理員用戶密碼

slappasswd -s 111111
{SSHA}AjIAg98NFvRRlhoBOvsfVqMeAGZwi5O9

本次設置密碼爲111111,若需要其他密碼直接更改該值即可。記錄執行結果的返回值{SSHA}AjIAg98NFvRRlhoBOvsfVqMeAGZwi5O9,並將該值寫入到後邊生成的rootpwd.ldif文件中。

4.創建管理員用戶配置文件rootpwd.ldif

cat <<EOF>rootpwd.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}AjIAg98NFvRRlhoBOvsfVqMeAGZwi5O9
EOF

相關參數說明:
olcRootPW參數值爲slappasswd命令的結果輸出。
olcRootPW: {SSHA}AjIAg98NFvRRlhoBOvsfVqMeAGZwi5O9指定了屬性值。
ldif文件是LDAP中數據交換的文件格式。文件內容採用的是key-value形式。注意value後面不能有空格。
olc(OnlineConfiguration)表示寫入LDAP後立即生效。
changetype: modify表示修改entry,此外changetype的值也可以是add,delete等。
add: olcRootPW表示對這個entry新增olcRootPW的屬性。
5.導入rootpwd.ldif信息

ldapadd -Y EXTERNAL -H ldapi:/// -f rootpwd.ldif

6.導入schema
schema包含支持特殊場景的相關屬性,可選擇性導入或全部導入

ls /etc/openldap/schema/*.ldif | while read i; do ldapadd -Y EXTERNAL -H ldapi:/// -f $i; done

7.設置默認域

slappasswd -s 111111
{SSHA}7AA7V1xy++LVZcUbBWYYM9/81wfODiIK

本次設置密碼爲111111,若需要其他密碼直接更改該值即可。記錄執行結果的
返回值{SSHA}7AA7V1xy++LVZcUbBWYYM9/81wfODiIK
8.新建默認域配置文件

vi domain.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
  read by dn.base="cn=Manager,dc=mydomain,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}7AA7V1xy++LVZcUbBWYYM9/81wfODiIK

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read

設置 olcRootPW參數值爲slappwd命令的返回結果:{SSHA}7AA7V1xy++LVZcUbBWYYM9/81wfODiIK
9.寫入信息

ldapmodify -Y EXTERNAL -H ldapi:/// -f domain.ldif

10.添加基本信息

cat <<EOF> basedomain.ldif
dn: dc=mydomain,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: mydomain com
dc: mydomain

dn: cn=Manager,dc=mydomain,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: Group
EOF

11.寫入信息

ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f basedomain.ldif

12.查看信息

ldapsearch -LLL -W -x -D "cn=Manager,dc=mydomain,dc=com" -H ldap://localhost -b"dc=mydomain,dc=com"

使用如上命令進行查看時,輸入訪問密碼爲:111111.能夠查看到相關返回結果爲如下內容,說明OpenLDAP配置成功。可進行相關管理和使用。

[root@openldap ~]# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f basedomain.ldif
Enter LDAP Password: 
adding new entry "dc=mydomain,dc=com"

adding new entry "cn=Manager,dc=mydomain,dc=com"

adding new entry "ou=People,dc=mydomain,dc=com"

adding new entry "ou=Group,dc=mydomain,dc=com"

三、OpenLDAP管理工具

爲簡化OpenLDAP使用,提高工作效率,OpenLDAP支持多種管理工具,較常用的有如下兩款ldapadmin工具,可選擇任意一種。

工具一:

1.可在windows電腦上下載管理工具:

http://www.ldapadmin.org/download/ldapadmin.html

2.下載完成後,解壓該文件,直接雙擊運行,輸入LDAP訪問信息。
OpenLDAP快速入門
Host值爲OpenLDAP節點ip地址:172.16.201.6.
Base值爲:dc=mydomain,dc=com
Username值爲:cn=Manager,dc=mydomain,dc=com
Password值爲:111111.
其餘參數爲默認值。填寫完成後可點擊 "Test connection" 以測試是否能夠正常連接。
3.連接成功後可看到OpenLDAP相關信息
OpenLDAP快速入門
之後可直接創建用戶、組,或進行增、刪、改操作。

工具二:
1.在OpenLDAP運行節點安裝ldapadmin工具包

yum install -y httpd php php-mbstring php-pear phpldapadmin

2.修改/etc/httpd/httpd.conf配置文件

[root@www ~]# vi /etc/httpd/conf/httpd.conf
# line 86: 修改admin郵箱地址
ServerAdmin [email protected]

# line 95: 修改主機域名
ServerName www.mydomain.com:80

# line 152: 修改成如下內容:
AllowOverride All

# line 165: 添加可訪問目錄名的文件名稱
DirectoryIndex index.html index.cgi index.php

# 在文件末尾增加如下兩部分內容
# server's response header
ServerTokens Prod

# keepalive is ON
KeepAlive On

3.啓動Apache服務並設置開機自啓動

systemctl start httpd
systemctl enable httpd

4.編輯/etc/phpldapadmin/config.php文件,按如下內容修改:

vi /etc/phpldapadmin/config.php
#註釋掉398行,並取消397行的註釋,修改後內容如下:
$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid');

5.編輯/etc/httpd/conf.d/phpldapadmin.conf,在第12行加入Require all granted以允許所有IP訪問,被更改部分內容如下:

<Directory/usr/share/phpldapadmin/htdocs>
  <IfModule mod_authz_core.c>
    # Apache 2.4
    Require local
    Require all granted
  </IfModule>

6.重啓Apache服務使配置生效

systemctl restart httpd

7.在瀏覽器輸入OpenLDAP訪問WEB地址:http://172.16.201.6/ldapadmin/
輸入登錄用戶名:cn=Manager,dc=mydomain,dc=com和密碼:111111
OpenLDAP快速入門
8.通過認證後,可直接創建用戶、組,進行增、刪、改操作。
OpenLDAP快速入門

常見報錯處理

1.常見報錯,slapd服務無法啓動,報錯如下:

[root@openldap certs]# systemctl restart slapd
Job for slapd.service failed because the control process exited with error code. See "systemctl status slapd.service" and "journalctl -xe" for details.
[root@openldap certs]# systemctl status slapd
● slapd.service - OpenLDAP Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/slapd.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Wed 2019-07-10 12:10:22 CST; 19s ago
     Docs: man:slapd
           man:slapd-config
           man:slapd-hdb
           man:slapd-mdb
           file:///usr/share/doc/openldap-servers/guide.html
  Process: 11754 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=1/FAILURE)
  Process: 11730 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS)

Jul 10 12:10:21 openldap.taocloud runuser[11751]: pam_unix(runuser:session): session closed for user ldap
Jul 10 12:10:21 openldap.taocloud slapd[11754]: @(#) $OpenLDAP: slapd 2.4.44 (Jan 29 2019 17:42:45) $
                                                        [email protected]:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd
Jul 10 12:10:22 openldap.taocloud slapd[11754]: tlsmc_cert_create_hash_symlink: ERROR: OS error: Permission denied
Jul 10 12:10:22 openldap.taocloud slapd[11754]: main: TLS init def ctx failed: -1
Jul 10 12:10:22 openldap.taocloud slapd[11754]: slapd stopped.
Jul 10 12:10:22 openldap.taocloud slapd[11754]: connections_destroy: nothing to destroy.
Jul 10 12:10:22 openldap.taocloud systemd[1]: slapd.service: control process exited, code=exited status=1
Jul 10 12:10:22 openldap.taocloud systemd[1]: Failed to start OpenLDAP Server Daemon.
Jul 10 12:10:22 openldap.taocloud systemd[1]: Unit slapd.service entered failed state.
Jul 10 12:10:22 openldap.taocloud systemd[1]: slapd.service failed.

原因:selinux未關閉,需要手動關閉selinux服務,並重啓服務器,執行命令

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
reboot

2.常見報錯:ldap_add: Invalid syntax (21)

[root@openldap certs]# ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcOverlay=syncprov,olcDatabase={2}hdb,cn=config"
ldap_add: Invalid syntax (21)
    additional info: objectClass: value #1 invalid per syntax

原因:編寫ldif文件時,每行後面不能留有空格,刪除空格即可。

3.常見報錯:ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1) 。

# ldapadd -x -D cn=Manager,dc=srv,dc=world -W -f ldapuser.ldif
Enter LDAP Password: 
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

需要指定主機名及端口號

[root@openldap ~]# ldapadd -x -D cn=Manager,dc=srv,dc=world -W -f ldapuser.ldif -h openldap.taocloud -p 389
Enter LDAP Password: 
adding new entry "cn=cent,ou=Group,dc=srv,dc=world"

歡迎掃描關注公衆號,會定期分享虛擬化、容器、DevOps等相關內容
OpenLDAP快速入門

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章