1. 程式人生 > >LDAP 服務搭建和後期管理

LDAP 服務搭建和後期管理

LDAP 服務

本文主要在debian配置,如果需要在CentOS上部署,需要修改大部分的路勁,這裡需要自行修改。

LDAP 服務按照個人理解,也可使理解為一個數據庫,但是這個資料庫的讀寫效能不像 MySQL 一樣擁有良好的讀寫效能,而 LDAP 更偏向於讀取,而弱於寫入。並且 LDAP 的資料型別屬於面向物件的資料型別,這和 MySQL 的資料型別不同,並且使用樹狀結構記錄資料,這些都與普通的資料庫(關係型資料庫),有著極大的差別。而這一切的一切都代表著 LDAP 這個服務並不是用做一個普通的資料庫(關係型資料庫)用的,而是用於類似於賬戶儲存等這種少存入、多讀取、需要包含物件型別和物件相關屬性的場合。

LDAP工作機制

就跟上面說的一樣,LDAP是樹狀結構的資料庫,所以說如果想要找到其中一個節點,就得通過逐層查詢,並且必須保證每一個節點的路徑唯一,那麼這個節點的路徑就稱之為dn,dn 的編寫路徑必須是由下而上編寫的,例如:

cn=scott,ou=marketing,ou=people,dc=mydomain,dc=org

關鍵字 英文全稱 含義
dc Domain Component 域名的部分,其格式是將完整的域名分成幾部分,如域名為 example.com 那麼就是: dc=example,dc=com
uid User Id 使用者 ID,如 “tom”
ou Organization Unit 組織單位,類似於 Linux 檔案系統中的子目錄,它是一個容器物件,組織單位可以包含其他各種物件(包括其他組織單元),如 “market”
cn Common Name 公共名稱,如 “Thomas Johansson”
sn Surname 姓,如 “Johansson”
c Country 國家,如 “CN” 或“US”等。
o Organization 組織名,如 “Example, Inc.”
dn Distinguished Name 惟一辨別名,類似於 Linux 檔案系統中的絕對路徑,每個物件都有一個惟一的名稱,如 “uid= tom,ou=market,dc=example,dc=com”,在一個目錄樹中 DN 總是惟一的
rdn Relative dn 相對辨別名,類似於檔案系統中的相對路徑,它是與目錄樹結構無關的部分,如 “uid=tom” 或“cn= Thomas Johansson”

以上這些類別沒有指定特定的用法,這些完全由應用程式自行決定。

LDAP 安裝

debian:

apt install slapd ldap-utils        # slapd 為服務端, ldap-utils 為客戶端程式

CentOS:

yum install openldap-servers openldap-clients   # 上同

LDAP 伺服器配置初始化

做這一步的目的是為了完全自定義初始化資料庫,拋棄由軟體包構成的資料庫。
當然你也可以跳過這個步驟,直接開始下一步,這樣也是無所謂的。

你也可以你使用 debian 提供的便捷方式來完成伺服器配置: dpkg-reconfig slapd

首先先來解釋一些為什麼要按照如下(完全屬於個人理解):
新版的 OpenLdap 已經棄用了 slapd.conf 配置檔案,改而使用 slapd.d 目錄下的樹狀目錄檔案來配置伺服器的相關配置。但是 slapd.d 是由服務程序維護的,並且使用CRC來校驗文字是否改動,我們無法輕易修改,slapd安裝包給我們提供了一個命令 slapadd 用於建立配置檔案,所以才用了下面的方法來初始化資料庫。後期使用 ldapmodifyldapadd 來完成伺服器配置。

首先停止資料庫服務:

systemctl stop slapd

然後編輯檔案:

# 首先備份檔案,以免無法復原
mkdir /root/back
tar -Jcvf /root/back/slapd.config-`date  '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /etc/ldap/slapd.d/
tar -Jcvf /root/back/slapd.data-`date  '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /var/lib/ldap /var/lib/slapd
# 然後再刪除配置檔案
rm -rf /etc/ldap/slapd.d/*
rm -rf /var/lib/slapd/*
rm -rf /var/lib/ldap/*
# 複製配置檔案到臨時目錄
cp /usr/share/slapd/slapd.init.ldif /tmp
cd /tmp

這裡我建立一個sed的規則表,方便使用,以下請自行選擇。

# file: rules

##################################
#    本文請自行選擇複製到到檔案內     #
##################################
#自定義基本域名(必選):
    s/@SUFFIX@/$(basename)/g
#自定義管理員使用者密碼(必須):
    s/@PASSWORD@/$(password)/g
#自定義管理員使用者名稱稱(可選):
    s/cn=admin/cn=$(username)/g

#資料庫型別(3選1,必選):
#   mdb
        s/@BACKEND@/mdb/g
        s/@BACKENDOBJECTCLASS@/olcMdbConfig/g
        s/@BACKENDOPTIONS@/olcDbMaxSize: 1073741824/g
#   hdb
        s/@BACKEND@/hdb/g
        s/@BACKENDOBJECTCLASS@/olcHdbConfig/g
        s/@BACKENDOPTIONS@/olcDbConfig: set_cachesize 0 2097152 0\nolcDbConfig: set_lk_max_objects 1500\nolcDbConfig: set_lk_max_locks 1500\nolcDbConfig: set_lk_max_lockers 1500/g
#   bdb
        s/@BACKEND@/bdb/g
        s/@BACKENDOBJECTCLASS@/olcBdbConfig/g
        s/@BACKENDOPTIONS@/olcDbConfig: set_cachesize 0 2097152 0\nolcDbConfig: set_lk_max_objects 1500\nolcDbConfig: set_lk_max_locks 1500\nolcDbConfig: set_lk_max_lockers 1500/g

這裡我選擇hdb資料庫,樣例如下:

# file:rule

s/@SUFFIX@/dc=black,dc=com/g
s/@PASSWORD@/{SSHA}RadcVPriXsR6gCwhwPKsCLkhnHy3r1ZS/g
s/cn=admin/cn=root/g
s/@BACKEND@/hdb/g
s/@BACKENDOBJECTCLASS@/olcHdbConfig/g
s/@BACKENDOPTIONS@/olcDbConfig: set_cachesize 0 2097152 0\nolcDbConfig: set_lk_max_objects 1500\nolcDbConfig: set_lk_max_locks 1500\nolcDbConfig: set_lk_max_lockers 1500/g

其中密碼是這樣生成的:

slappasswd -s 147258369

{SSHA}RadcVPriXsR6gCwhwPKsCLkhnHy3r1ZS

再然後通過命令修改配置檔案,並且生成配置檔案和資料庫:

sed -i -f rule /tmp/slapd.init.ldif
slapadd -F "/etc/ldap/slapd.d/" -b "cn=config" -l slapd.init.ldif

_#################### 100.00% eta none elapsed none fast!
Closing DB...

我們再檢視一下這些檔案的:

ll /etc/ldap/slapd.d/*

-rw------- 1 root root 478 Jul 10 09:06 /etc/ldap/slapd.d/cn=config.ldif
/etc/ldap/slapd.d/cn=config:
total 28
-rw------- 1 root root 452 Jul 10 09:06 cn=module{0}.ldif
drwxr-x--- 2 root root 4096 Jul 10 09:06 cn=schema
-rw------- 1 root root 394 Jul 10 09:06 cn=schema.ldif
-rw------- 1 root root 412 Jul 10 09:06 olcBackend={0}hdb.ldif
-rw------- 1 root root 542 Jul 10 09:06 olcDatabase={0}config.ldif
-rw------- 1 root root 657 Jul 10 09:06 olcDatabase={-1}frontend.ldif
-rw------- 1 root root 1084 Jul 10 09:06 olcDatabase={1}hdb.ldif

哦,我們這裡看到了好像檔案許可權不對啊,所以我們也改改檔案屬主。

chown -R openldap:openldap slapd.d
chown -R openldap:openldap /var/lib/slapd/*
chown -R openldap:openldap /var/lib/ldap/*

那麼這裡就可以正常啟動伺服器了:

systemctl start slapd

LDAP 資料庫建立

這裡我們還需要注意雖然前面建立的伺服器配置裡有DN資訊,但是真正的資料庫完全沒有建立,這裡我們必須手動建立這些資料庫。當然你可以使用命令 slapcat 或者 ldapsearch 命令來查詢是否有資料存在。

首先建立一個檔案,用於記錄需要存入的資料,ldap資料庫沒有互動式介面,每一次操作都必須一條命令,其實這也側面證明了LDAP是是個偏讀取的面向物件型的服務,而不是一個綜合型的資料庫服務。

# file:base.ldif

# 根節點                   複製時,注意把這一點刪了!!!!
dn: dc=black,dc=com
dc: black
objectClass: top
objectClass: domain
# 管理員使用者root
dn: cn=root,dc=black,dc=com
objectClass: organizationalRole
cn: root
description: LDAP Manager

然後我們再通過命令,將 base.ldif 這的資訊匯入至資料庫

ldapadd -x -D "cn=root,dc=black,dc=com" -w 147258369 -f  base.ldif

adding new entry "dc=black,dc=com"
adding new entry "cn=root,dc=black,dc=com"

這裡需要解釋一項這裡命令的基本用法:

  • -x: 表示使用基本擁擠認證
  • -D "cn=root,dc=black,dc=com" -w 147258369: 指定使用者和密碼
  • -f: 指定檔案

那麼這裡再驗證一下資料庫是否建立成功:

ldapsearch  -x -D "cn=root,dc=black,dc=com" -w 147258369 -b "dc=black,dc=com"

# extended LDIF
#
# LDAPv3
# base <dc=black,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# black.com
dn: dc=black,dc=com
dc: black
objectClass: top
objectClass: domain
# root, black.com
dn: cn=root,dc=black,dc=com
objectClass: organizationalRole
cn: root
description: LDAP Manager
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2

再解釋一個引數:

  • -b: 指定需要搜尋的base目錄

LDAP 後期管理

資料庫管理

這裡的資料庫管理也可是使用一些 LDAP 軟體來完成(部署 LDAP 應用),不過還以要寫寫命令列,因為命令列的靈活性高,而且便於理解,這些都是應用程式無法比擬的。

ldapadd 條目新增

還是和上面資料庫建立一樣的,需要先建立一個檔案用於存放資料。

# file: group.ldif

# 組織單元
dn: ou=User,dc=black,dc=com
objectClass: organizationalUnit
ou: User
# 使用者1
dn: uid=User1,ou=User,dc=black,dc=com
objectClass: account
objectClass: simpleSecurityObject
uid: User1
userPassword: {SSHA}5WjJz9QfntUjurHirfv9C4832x1xh9Kt
# 使用者2
dn: uid=User2,ou=User,dc=black,dc=com
objectClass: account
objectClass: simpleSecurityObject
uid: User2
userPassword: {SSHA}9biML+BP/W8w3mRkVack7CyB1hfDi8cD

然後我們再通過命令將檔案新增到資料庫:

ldapadd  -x -D "cn=root,dc=black,dc=com" -w 147258369 -f group.ldi

adding new entry "ou=User,dc=black,dc=com"
adding new entry "uid=User1,ou=User,dc=black,dc=com"
adding new entry "uid=User2,ou=User,dc=black,dc=com"

ldapadd 可以從檔案中讀取資料,同時也可從標準輸入輸出讀取資料:

cat << EOF | ldapadd  -x -D "cn=root,dc=black,dc=com" -w 147258369
dn: uid=User3,ou=User,dc=black,dc=com
objectClass: account
objectClass: simpleSecurityObject
uid: User3
userPassword: {SSHA}iES3qeH0nYUcwGtSQm1hIBCEsV+gBF3P
EOF

adding new entry "uid=User3,ou=User,dc=black,dc=com"

這樣就可以臨時新增資料了,同時這樣也可使用bash指令碼完成批量使用者新增,這裡我就不演示了。

ldapmodify 條目更改

還是一樣的將資料寫入檔案,不過這裡需要注意,因為是更改條目,所以需要編寫指明更改模式,和更改目標。

# file: change.ldif

dn: uid=User3,ou=User,dc=black,dc=com
changetype: modify
replace: userPassword
userPassword: {SSHA}9TM5y06bvepK6k8i+Jfkc/9C6GkVsobm

然後使用命令即可。

ldapmodify -x -D "cn=root,dc=black,dc=com" -w 147258369 -f change.ldif

modifying entry "uid=User3,ou=User,dc=black,dc=com"

那麼再來驗證一下:

ldapwhoami -x -D "uid=User3,ou=User,dc=black,dc=com" -w 147

dn:uid=User3,ou=User,dc=black,dc=com

如果返回如上,那麼修改成功。

ldapdelete 條目刪除

刪除條目不需要寫清除如何如何,只需要指定條目路徑即可,也就是dn.

ldapdelete -x -D "cn=root,dc=black,dc=com" -w 147258369 "uid=User3,ou=User,dc=black,dc=com"

這個命令沒有返回資訊,那麼表明執行成功。我們再次使用命令驗證:

ldapwhoami -x -D "uid=User3,ou=User,dc=black,dc=com" -w 123456

ldap_bind: Invalid credentials (49)

這就返回憑據無效則表明條目刪除成功。

ldapsearch 條目搜尋

這個就不多說了,直接上命令:

ldapsearch  -x -b "dc=black,dc=com" -D "cn=root,dc=black,dc=com" -w 147258369 "(&(objectclass=account)(uid=User1))"                # 這裡最後一段是filter,用於過濾查詢結果

# extended LDIF
#
# LDAPv3
# base <dc=black,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# User1, User, black.com
dn: uid=User1,ou=User,dc=black,dc=com
objectClass: account
objectClass: simpleSecurityObject
userPassword:: e1NTSEF9OWJpTUwrQlAvVzh3M21Sa1ZhY2s3Q3lCMWhmRGk4Y0Q=
uid: User1
# search result
search: 2
result: 0 Success
# numResponses: 6
# numEntries: 5

-b:指定基本路徑,會查詢該路徑下的所有節點

ldapwhomai 使用者查詢

前面也用過了,直接上命令:

ldapwhoami -x -D "cn=root,dc=black,dc=com" -w 147258369

dn:cn=root,dc=black,dc=com

返回值如上則表示正常

伺服器配置

這裡伺服器的後續配置,不能再動 slapd.d 目錄下的檔案了,必須通過 ldap 提供的 API 介面完成伺服器配置,這點是非常重要的。所以我們還需要通過客戶端命令 ldapmodify 命令來進行服務配置,比如所修改管理員密碼:

這裡的dn節點與資料庫節點不同,你可以看到這些條目對應的就是 slapd.d 目錄下的檔案了,當然是去去除了字尾名(ldif)的節點。

# file: config.ldif

dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}5WjJz9QfntUjurHirfv9C4832x1xh9Kt

然後通過命令完成修改:

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

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}hdb,cn=config"

注:如果節點不存在,但是你還是想要建立也是可是的,你需要將dn節點指定到你需要建立的檔案路徑,然後使用命令ldapadd 新增即可。

LDAP 備份和還原

這裡我使用了 slapd 提供的命令完成了該操作,主要就是方便而且全面,也不想去了解別的方法,都沒這個實在。

伺服器備份

slapcat -n 0 -l slapcat.bak.0.ldif          # 0 表示備份伺服器配置
slapcat -n 1 -l slapcat.bak.1.ldif          # 1 表示備份資料庫

無返回資訊則表示執行成功。

伺服器還原

關閉伺服器:

systemctl stop slapd

刪除原始檔案:

# 首先備份檔案,以免無法復原
mkdir /root/back
tar -Jcvf /root/back/slapd.config-`date  '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /etc/ldap/slapd.d/
tar -Jcvf /root/back/slapd.data-`date  '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /var/lib/ldap /var/lib/slapd
# 然後再刪除配置檔案
rm -rf /etc/ldap/slapd.d/*
rm -rf /var/lib/slapd/*
rm -rf /var/lib/ldap/*

還原資料庫:

slapadd -l slapcat.bak.0.ldif -F /etc/ldap/slapd.d/ -b "cn=config"      # 還原伺服器配置
slapadd -l slapcat.bak.1.ldif -F /etc/ldap/slapd.d/                                     # 還原資料庫

_#################### 100.00% eta none elapsed none fast!
Closing DB...

_#################### 100.00% eta none elapsed none fast!
Closing DB...

這樣就搞定了。
但是還是需要注意許可權:

chown -R openldap:openldap /etc/ldap/slapd.d/*
chown -R openldap:openldap /var/lib/slapd/*
chown -R openldap:openldap /var/lib/ldap/*

啟動伺服器:

systemctl start slapd

部署 LDAP 應用

這裡直接使用 phpldapadmin了, 我也不想再多弄了,怎麼簡單,怎麼來了。

apt install phpldapadmin

然後配置一下 phpladpadmin的檔案即可:

# file: /etc/phpldap/config.php

……
$servers->setValue('server','base',array('dc=black,dc=com'));               # 在300行,更改伺服器
……
……
$servers->setValue('login','bind_id','cn=root,dc=black,dc=com');        # 在326行,更改登入的預設字串
……

然後登入即可:

介面如下:

相關推薦

LDAP 服務搭建後期管理

LDAP 服務 本文主要在debian配置,如果需要在CentOS上部署,需要修改大部分的路勁,這裡需要自行修改。 LDAP 服務按照個人理解,也可使理解為一個數據庫,但是這個資料庫的讀寫效能不像 MySQL 一樣擁有良好的讀寫效能,而 LDAP 更偏向於讀取,而弱於寫入。並且 LDAP 的資料型別屬於面向物

mysql的服務搭建基礎認識

連接數據庫 刪除數據 status 語法 mysql- install 路徑 小寫 內容 day01一、搭建數據庫服務器1、安裝提供數據庫服務的軟件數據庫服務軟件有哪些?軟件是否跨平臺軟件是否開源 (開源軟件不等於免費,商業軟件要收費)軟件的來源軟件的封包類型 (r

ava Maven項目之Nexus私服搭建版本管理應用

max 權限 環境 val 導致 type www. exit frame 目錄: Nexus介紹 環境、軟件準備 Nexus服務搭建 Java Maven項目版本管理應用 FAQ 1、Nexus介紹 Nexus是一個強大的Maven倉庫管理器,它極大地簡化了自己內部

Jenkins持續整合01---Jenkins服務搭建部署

一、介紹Jenkins 1、Jenkins概念   Jenkins是一個功能強大的應用程式,允許持續整合和持續交付專案,無論用的是什麼平臺。這是一個免費的原始碼,可以處理任何型別的構建或持續整合。整合Jenkins可以用於一些測試和部署技術。Jenkins是一種軟體允許持續整合。 2、Jenkins目的

網站伺服器服務搭建埠對映

啟動Apache(或者Tomcat)和MySQL (我本人子在網站根目錄下沒有放置主頁,在子目錄下放,有方便除錯不同的專案,在上線的網站都是在主頁放置index檔案的例如index.html或者index.php之類的) 購買隧道並且配置

Jenkins服務搭建部署

在最簡單的情況下,Jenkins 只需要兩個步驟:2.執行 java -jar jenkins.war(也可以放入Tomcat下啟動)注意:Jenkins 需要執行 Java 5以及以上的版本。Jenkins在linux系統下啟動不要使用root使用者去啟動tomcat*ad

Java Maven專案之Nexus私服搭建版本管理應用

目錄: Nexus介紹 環境、軟體準備 Nexus服務搭建 Java Maven專案版本管理應用 FAQ 1、Nexus介紹 Nexus是一個強大的Maven倉庫管理器,它極大地簡化了自己內部倉庫的維護和外部倉庫的訪問。利用Nexus你可以只

vsftp服務搭建配置

安裝 lftp客戶端 ftp客戶端 vsftpd伺服器端 開啟服務: #/etc/init.d/vsftpd start 開機啟動,chkconfig vsftp根目錄: /var/ftp 注意:跟目錄許可權不能超過755 在根目錄下建立子目錄來上傳 客戶端: #lftp

Docker_swarm叢集搭建服務上線及docker-machine叢集管理工具

1. Docker_swarm叢集搭建 叢集安裝docker: 環境部署: 角色 server-id 安裝 MANAGER Server1 DOCKER(MASTER) NODE1 Server2 DOC

Ubuntu下Apache+SVN搭建SVN服務多項目管理

svn apache2 一、系統環境[email protected]/* */:~# cat /etc/issueUbuntu 16.04.2 LTS \n \l二、創建svn組和用戶[email protected]/* */:~# addgroup svnserAddin

SVN服務搭建使用(三)

進行 文本框 logs 版本 強制寫 移動 對話 刪除文件 對話框 接下來,試試用TortoiseSVN修改文件,添加文件,刪除文件,以及如何解決沖突等. 添加文件 在檢出的工作副本中添加一個Readme.txt文本文件,這時候這個文本文件會顯示為沒有版本控制的狀態,如圖

NTP服務搭建客戶端配置

position 服務器 relative middle border 1 搭建NTP服務器準備搭建環境主機IPOS備註NTP Server192.168.5.180CentOS 6NTP Client192.168.5.181CentOS 61.1 安裝NTP服務程序[[email

CentOS7搭建Kubernetes-dashboard管理服務

kubernetes etcd k8s docker flanal openvswitch 一、先決條件 1、首先你必有現成的Kubernetes集群,如果現在你一無所有,請參考: http://zlyang.blog.51cto.com/1196234/1951010 2、建議

SaltStack介紹——SaltStack是一種新的基礎設施管理方法開發軟件,簡單易部署,可伸縮的足以管理成千上萬的服務器,足夠快的速度控制,與他們交流

con mar stack 通信 class 交流 ast 集中 速度 SaltStack介紹和架構解析 簡介 SaltStack是一種新的基礎設施管理方法開發軟件,簡單易部署,可伸縮的足以管理成千上萬的服務器,和足夠快的速度控制,與他們交流,以毫秒為單位。S

linux環境搭建ldap服務

span alt roc nbsp pass enter apt detail har 首先保證linux正常聯網 yum install openldap-servers -y 拷貝配置文件 cd /usr/share/openldap-servers/ cp slap

麒麟服務器操作系統管理配置軟RAID

kylin raid 配置麒麟服務器操作系統通過內核 multi-disk(MD)驅動實現獨立於硬件的RAID,是一種軟RAID。通過mdadm命令行工具來管理和配置RAID。1 mdadm命令使用 mdadm –help可以看到mdadm命令分類,如下:查看每個參數的詳細用法,如查看--creat

openvpn 服務客戶端搭建配置

window linux openvpn1, 搭建環境: 電腦A : win7 64bit, 作為openvpn server 網上下載openvpn安裝包,直接安裝。 網口1, 有線網絡,可以訪問外網

統一用戶登錄管理認證LDAP 服務端部署

ldap 統一賬戶 管理 網上找了好多關於LDAP統一賬戶管理的文件,好多都是粘貼復制,能用得上的少之又少,正好最近又用到這個,於是著手看了郭老師的視頻,順便把自己學習的過程記錄下來,供大家學習參考。1、實驗環境:[root@localhost ~]# cat /etc/redhat-rel

搭建nginx服務直播流媒體服務

proc fig 通過 流媒體服務 負載 代理 rtu def 說明 1、nginx簡單說明   ① Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。其特點是占有內存少,並發能力強。

ftp服務搭建腳本客戶端ftp自動上傳腳本

被動模式 rgb fault virt otto shadow bak 安裝腳本 ssa linux服務器搭建ftp服務腳本(在centos6.5和centos7上測試通過)(該腳本沒有進行判斷,需要自行清理環境)(該腳本只允許上傳不允許下載,不允許使用匿名用戶和本地用戶登