Ldap 服務應用指南 相容(5.X&6.X)
1.1 Ldap 目錄服務介紹
1.1.1 什麼是目錄服務(active directory)??
目錄是一類為了浏覽和搜尋資料為設計的特殊的資料庫,目錄服務是按照樹狀存儲資訊的
目錄進行更新的操作,可以說是要麼全部,要麼都不得原子性操作
目錄不支援大多數事物型資料庫所支援的高吞吐量和複雜的更新操作,适應于大量的查詢和搜尋操作,為了保證資料的可靠性和可用性,他也有主從伺服器同步資料資訊能力。
ldap 也可以一主多從.
ldap 可以說是活動目錄在linux上的一個開源實作.
1.1.2 什麼是Ldap??
LDAP是輕量級目錄通路協定(lightweight directory access protocol),LDAP運作在TCP/IP或者其他的面向連接配接傳輸之上。
LDAP是在X.500标準上産生的一個簡化版本
1.1.3 LDAP基本概念中的常用名詞縮寫及含義
<code>dc domain component 域名部分 example.com dc=example,dc=com</code>
<code>uid user id 使用者id 如wyb</code>
<code>ou organization unit 組織機關 如tech</code>
<code>cn common name 公共名稱 thomas johansson</code>
<code>sn surname 姓 </code>
<code>dn distinguished 唯一辨識名 uid=wyb,ou=market,dc=example,dc=com </code>
<code>rdn relative dn 相對辨識名</code>
<code>c country </code>
<code>o organization</code>
1.1.4 LDAP(openldap) 目錄服務的特點
ldap 是一個跨平台的,标準的協定。
ldap 的結構用樹型結構來表示,而不是表格,是以不需要用SQL語句維護
ldap 提供了靜态資料的快速查詢方式
ldap 是一個安全的協定
ldap 支援異類資料存儲
ldap 是C/S架構,server端用于存儲樹,client端提供操作目錄資訊樹的工具
ldap 是一種目錄服務,儲存在特殊的資料庫中,資料的讀取速度遠高于寫入速度。
ldap 對查詢做了優化,讀取速度優于普通關系資料庫。
ldap 不支援事務、不能進行復原,需要進行這些操作的應用隻有選擇關系資料庫。
ldap 采用伺服器/用戶端模式,支援分布式結構。
ldap 中的條目以樹形結構組織和存儲。
ldap 基于Internet協定,直接運作在簡單和通用的TCP/IP或其他可靠的傳輸協定層上,使連接配接的建立和包的處理簡單、快捷,對于網際網路和企業網應用都很友善。
ldap 協定簡單,通過使用查找操作實作清單操作和讀操作。
ldap 通過引用機制實作分布式通路,通過用戶端API實作分布式操作(對于應用透明),平衡了負載。
ldap 實作具有低費用、易配置和易管理的特點,并提供了滿足應用程式對目錄服務所需求的特性。
1.1.5 ldap的目錄結構
ldap 目錄服務是通過目錄資料庫存儲網絡資訊提供目錄服務的,目錄資料庫是以目錄資訊樹DIT為存儲 方式存儲結構,目錄是按照樹型結構組織--目錄資訊書(DIT)DIT是一個主要
進行讀寫操作的資料庫
DIT是由條目(entry)組成,條目相當于關系型資料庫中的表的記錄
ldap目錄用OU 從邏輯上把資料分開
ou 是一種條目--容器條目 OU下面才是真正的使用者條目
1.1.6 什麼是dn?
(1) 在ldap 中,一個條目的分辨名叫做DN,DN是該目錄在整個樹種的一名名稱識,DN相當于關系型資料庫中的關鍵字,它是一個識别屬性,通常用于檢索
(2) DN的兩張設定
基于 cn(公共名稱) cn=test,ou=tech,dc=example,dc=org 最常見的cn是從、etc/group轉了的條目
基于 uid(user id) uid=test,ou=tech,dc=example,dc=org 最常見的uid是etc/passwd轉來的條目
(3) ldap 目錄樹的最頂部就是根,也就是Base DN
(4) LDIF格式是LDAP資料,導入,到處的格式。LDIF是LDAP資料資訊的一種文本格式
1.1.7 什麼樣的資訊可以存在目錄當中???
LDAP的資訊模型是基于條目的(entry),一個條目就是一些具有全局唯一的辨別名的屬性的集合
下面是ldap中條目資訊的例子:相當于資料表中的兩行記錄
條目一:
<code>dn: uid=user01,ou=people,dc=wyb,dc=com</code>
<code>objectClass: posixAccount</code>
<code>.</code>
<code>uid:</code>
<code>cn:</code>
<code>uidnumber:</code>
<code>gidnumber:</code>
<code>userpassword:</code>
<code>sn:</code>
<code>givenname:</code>
LDAP允許你通過使用一種叫做objectclass 的特殊屬性來控制那些屬性是條目必須的,那些條目屬性是可選的
1.1.8 資訊在目錄中是如何組織的??
在ldap 中,條目是按照層次結構組織的。
目錄樹的結構圖
如圖ldap結構圖
<a href="http://s3.51cto.com/wyfs02/M02/74/76/wKiom1YeDD6jLzhrAADgQeKR_kw301.jpg" target="_blank"></a>
DIT
DC
OU
CN
1.1.9 ldap 目錄資料内容講解
LDIF 是一種ASCii 檔案格式,用來交換資料,并使得LDAP伺服器之間交換資料成為可能。
LDIF檔案的特點:
(1)通過空行分割一個條目或者定義 ***********
(2)以#開始行為注釋
(3)所有屬性的指派方法為:屬性:屬性值
(4)屬性可以被重新指派
(5)每行的結尾不允許有空格 ***********
1.2.0 ldap是怎麼工作的??
ldap 目錄服務是基于用戶端/伺服器(c/s)模式的。ldap 用戶端連接配接到伺服器并且發出一個請求,然後伺服器要麼以一個回答予以回應,要麼給一個指針,客戶可以通過指針擷取到所
需資料(通常,該指針指向另一個ldap伺服器),無論用戶端連到那個ldap伺服器,它看到的都是同一個目錄視圖。這是ldap這類全局目錄服務的一個重要特征
1.2.1 ldap的幾個重要模式
ldap服務的幾個重要功能:
(1)基本的目錄查詢服務 **********************
(2)目錄查詢代理服務
(3)異機copy資料(主從同步) ***************
1.2.1.1 本地基本的查詢目錄
request
client---------》 server
<--------
response
1.2.1.2 帶有指針的本地目錄服務,即目錄查詢代理服務
1.2.1.3 同步複制目錄服務 可以做主從
1.2.1.4 ldap的簡單的同步複制方案
inotify+ldap用戶端指令方案
如圖所示ldap的同步方案
1.2.1.5 分布式目錄服務
ldap企業架構邏輯案例:ldap+haproxy/nginx/heartbeat叢集高可用,驗證的時候不誇機房
如圖ldap叢集
<a href="http://s3.51cto.com/wyfs02/M02/74/73/wKioL1YeDKOBCadUAACnASRE2MA863.jpg" target="_blank"></a>
1.3.0 openldap的環境搭建準備
<code>ldap master服務安裝</code>
<code>1.3.1 安裝前環境準備</code>
<code>Centos 6.5 ,ldap2.4版本為主</code>
<code>1.3.1.1 檢視系統版本資訊</code>
<code>[root@localhost ~]</code><code># cat /etc/redhat-release </code>
<code>CentOS release 6.5 (Final)</code>
<code>[root@localhost ~]</code><code># uname -r</code>
<code>2.6.32-431.el6.x86_64</code>
1.3.1.2 補全所缺安裝包:
<code>yum groupinstall </code><code>"Base"</code> <code>-y </code>
<code>Base</code>
<code>Compatibility libraries</code>
<code>Debugging Tools</code>
<code>Development Tools</code>
<code>Performance Tools</code>
<code>Hardware monitoring utilities</code>
<code>Dial-up Networking Support</code>
1.3.1.3 更新Centos6.4 yum源配置方法
<code>wget http:</code><code>//mirrors</code><code>.163.com</code>
<code>1.3.1.4 可以保留緩存rpm 包</code>
<code>[root@localhost ~]</code><code># grep keepcache /etc/yum.conf </code>
<code>keepcache=0</code>
<code>[root@localhost ~]</code><code># sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf </code>
<code>keepcache=1</code>
1.3.1.5 關閉selinux ,iptables ,防止影響安裝
1.3.1.6 記得時間同步
/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
1.3.1.7 配置域名
<code>[root@localhost ~]</code><code># echo "192.168.2.221 aapingou.com" >> /etc/hosts</code>
<code>[root@localhost ~]</code><code># ping aapingou.com</code>
<code>PING aapingou.com (192.168.2.221) 56(84) bytes of data.</code>
<code>64 bytes from aapingou.com (192.168.2.221): icmp_seq=1 ttl=64 </code><code>time</code><code>=0.022 ms</code>
<code>64 bytes from aapingou.com (192.168.2.221): icmp_seq=2 ttl=64 </code><code>time</code><code>=0.022 ms</code>
<code>^C</code>
1.3.1.8 開始安裝ldap
<code>yum </code><code>install</code> <code>openldap openldap-* </code>
<code>yum </code><code>install</code> <code>nscd nss-pam-ldapd nss-* pcre pcre-* -y</code>
1.4.0 開始配置 ldap master
<code>1.4.0.1</code>
<code>對于6.4 來說,openldap的配置和5.8的配置檔案有變化,目前6.4的配置檔案在</code><code>/etc/openldap/slapd</code><code>.d</code><code>/cn-config/</code> <code>下</code>
<code>此時還是安裝openldap2.3版本安裝</code>
<code>cp</code> <code>/usr/share/openldap-servers/slapd</code><code>.conf.obsolete slapd.conf </code>
<code>[root@localhost openldap]</code><code># ls</code>
<code>certs check_password.conf ldap.conf schema slapd.conf slapd.d</code>
<code>[root@localhost openldap]</code><code># </code>
<code>[root@localhost openldap]</code><code># slappasswd -s 123456 以123456為管理者密碼</code>
<code>{SSHA}cJOGvZaS</code><code>/W2Sli6wqtrQCHxk/6BcNE4t</code>
<code> </code>
<code>也可以用</code><code>sed</code> <code>直接生成密碼,并添加到配置檔案中</code>
<code>[root@localhost openldap]</code><code># slappasswd -s 123456 |sed -e 's#{SSHA}#rootpw\t{SSHA}#g' </code>
<code>rootpw{SSHA}QHJb0AzNWAP5retRMiC2D+qhvpSe8D0C</code>
<code>[root@localhost openldap]</code><code># slappasswd -s 123456 |sed -e 's#{SSHA}#rootpw\t{SSHA}#g' >> slapd.conf </code>
<code>[root@localhost openldap]</code><code># tail -2 slapd.conf </code>
<code># authcId=host/[email protected]</code>
<code>rootpw{SSHA}fgMtXr09LbqS+Bt2</code><code>/dKJ</code><code>+pGKA4zDGJgG</code>
1.4..0.2 openldap2.3 和 openldap2.4 的差別
<code>http:</code><code>//www</code><code>.openldap.org</code><code>/doc/admin24/slapdconf2</code><code>.html</code>
<code>1.4.0.3</code>
<code>備份sladp.conf</code>
<code>[root@localhost openldap]</code><code># cp slapd.conf slapd.conf.bak</code>
<code>vim slapd.conf </code>
<code>注釋一下4行</code>
<code>#database bdb</code>
<code>#suffix "dc=my-domain,dc=com"</code>
<code>#checkpoint 1024 15</code>
<code>#rootdn "cn=Manager,dc=my-domain,dc=com"</code>
<code>然後增加一下三行</code>
<code>database bdb</code>
<code>suffix </code><code>"dc=aapingou,dc=com"</code>
<code>rootdn </code><code>"cn=admin,dc=aapingou,dc=com"</code>
<code>提示:空行和以</code><code>#開頭的注釋行可以忽略</code>
<code>此時LDAP的管理賬号為 :admin:123456</code>
1.4.0.4 以上修改參數的含義解釋
<code>database bdb </code><code>#指定使用資料庫BDB,berkeley DB</code>
<code>suffix </code><code>"dc=aapingou,dc=com"</code> <code>#指定要搜尋的字尾</code>
<code>rootdn </code><code>"cn=admin,dc=aapingou,dc=com"</code> <code>#指定管理者dn路徑,使用這個dn可以登入ldap server</code>
<code>rootpw {SSHA}fgMtXr09LbqS+Bt2</code><code>/dKJ</code><code>+pGKA4zDGJgG </code><code>#指定ldap 管理者密碼,改密碼有值錢slappsswd生産</code>
1.4.0.5 更多ldap參數配置優化
<code>a,日志以及緩存參數</code>
<code>[root@localhost openldap]</code><code># cat >> slapd.conf << EOF</code>
<code>> </code><code>#add new feature 15-10-14</code>
<code>> loglevel 296</code>
<code>> cachesize 1000</code>
<code>> checkpoint 2048 10</code>
<code>> </code><code># end </code>
<code>> EOF</code>
<code>[root@localhost openldap]</code><code># tail -6 slapd.conf</code>
<code>#add new feature 15-10-14</code>
<code>loglevel 296 日志級别</code>
<code>cachesize 1000 ldap緩存的條目數</code>
<code>checkpoint 2048 10 上面的設定時達到2048或者10分鐘執行一次checkpoint,把記憶體中的資料寫回資料檔案中 </code>
<code># end</code>
1.4.0.6 權限控制管理
<code>http:</code><code>//www</code><code>.openldap.org</code><code>/doc/admin24/access-control</code><code>.html</code>
<code>先簡單配置權限管理</code>
<code>删除以下内容:</code>
<code> </code><code>database config</code>
<code> </code><code>99 access to *</code>
<code>100 by dn.exact=</code><code>"gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"</code> <code>manage</code>
<code>101 by * none</code>
<code>102 </code>
<code>103 </code><code># enable server status monitoring (cn=monitor)</code>
<code>104 database monitor</code>
<code>105 access to *</code>
<code>106 by dn.exact=</code><code>"gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"</code> <code>read</code>
<code>107 by dn.exact=</code><code>"cn=Manager,dc=my-domain,dc=com"</code> <code>read</code>
<code>108 by * none</code>
<code>新增:</code>
<code>access to *</code>
<code> </code><code>by self write</code>
<code> </code><code>by anonymous auth</code>
<code> </code><code>by * </code><code>read</code>
<code>1.4.1 配置rsyslog,記錄ldap日志</code>
<code>[root@localhost openldap]</code><code># cp /etc/rsyslog.conf /etc/rsyslog.conf.bak </code>
<code> </code><code>echo</code> <code>"local4.* /var/log/ldap.log "</code> <code>>></code><code>/etc/rsyslog</code><code>.conf </code>
<code>[root@localhost openldap]</code><code># tail -1 /etc/rsyslog.conf</code>
<code>local4.* </code><code>/var/log/ldap</code><code>.log</code>
<code>/etc/init</code><code>.d</code><code>/rsyslog</code> <code>restart</code>
1.4.2 配置ldap資料庫路徑
<code>[root@localhost openldap]</code><code># grep directory slapd.conf</code>
<code># Do not enable referrals until AFTER you have a working directory</code>
<code># The database directory MUST exist prior to running slapd AND </code>
<code>directory</code><code>/var/lib/ldap</code> <code>此時的路徑為資料庫路徑</code>
<code>###6.4操作步驟</code>
<code> </code><code>cp</code> <code>/usr/share/openldap-servers/DB_CONFIG</code><code>.example </code><code>/var/lib/ldap/DB_CONFIG</code>
<code>[root@localhost openldap]</code><code># ls /var/lib/ldap/</code>
<code>DB_CONFIG</code>
<code>chmod</code> <code>700 </code><code>/var/lib/ldap/</code>
<code>chown</code> <code>ldap:ldap </code><code>/var/lib/ldap/DB_CONFIG</code>
<code>[root@localhost openldap]</code><code># slaptest -u</code>
<code>config </code><code>file</code> <code>testing succeeded</code>
1.4.3 啟動LDAP
<code>[root@localhost openldap]</code><code># /etc/init.d/slapd start</code>
<code>Starting slapd: [ OK ]</code>
<code>[root@localhost openldap]</code><code># ps -ef | grep slapd</code>
<code>ldap 2073 1 0 11:10 ? 00:00:00 </code><code>/usr/sbin/slapd</code> <code>-h ldap:</code><code>///</code> <code>ldapi:</code><code>///</code> <code>-u ldap</code>
<code>root 2079 1973 0 11:10 pts</code><code>/4</code> <code>00:00:00 </code><code>grep</code> <code>slapd</code>
<code>加入開機自啟動</code>
<code>[root@localhost openldap]</code><code># chkconfig slapd on </code>
<code>[root@localhost openldap]</code><code># chkconfig --list | grep slapd</code>
<code>slapd 0:off1:off2:on3:on4:on5:on6:off</code>
###此時伺服器端的安裝和配置完畢
1.4.5 檢視資料庫内容
此時還沒有資料,屬于正常情況 ,後面會以web端方式進行資料添加
<code>[root@localhost openldap]</code><code># ldapsearch -LLL -W -x -H ldap://aapingou.com -D "cn=admin,dc=aapingou,dc=com" -b "dc=aapingou,dc=com (uid=*)"</code>
<code>Enter LDAP Password: </code>
<code>ldap_bind: Invalid credentials (49) ---版本不一樣導緻,5.8 與6.4的差別</code>
<code>how to solve??</code>
<code>[root@localhost openldap]</code><code># rm -rf slapd.d/* 删除預設2.4的配置檔案</code>
***************以2.3的配置為主,再去生産2.4的配置 *****************
<code>[root@localhost openldap]</code><code># slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/</code>
<code>561dcadf bdb_monitor_db_open: monitoring disabled; configure monitor database to </code><code>enable</code>
<code>[root@localhost openldap]</code><code># /etc/init.d/slapd restart</code>
<code>Stopping slapd: [ OK ]</code>
<code>Checking configuration files </code><code>for</code> <code>slapd: [FAILED]</code>
<code>561dcb11 ldif_read_file: Permission denied </code><code>for</code> <code>"/etc/openldap/slapd.d/cn=config.ldif"</code>
<code>slaptest: bad configuration </code><code>file</code><code>!</code>
<code>root@localhost openldap]</code><code># chown -R ldap:ldap /etc/openldap/slapd.d/</code>
<code>Stopping slapd: [FAILED]</code>
<code>ldap 2161 1 0 11:25 ? 00:00:00 </code><code>/usr/sbin/slapd</code> <code>-h ldap:</code><code>///</code> <code>ldapi:</code><code>///</code> <code>-u ldap</code>
<code>root 2167 1973 0 11:25 pts</code><code>/4</code> <code>00:00:00 </code><code>grep</code> <code>slapd</code>
<code>[root@localhost openldap]</code><code># ldapsearch -LLL -W -x -H ldap://aapingou.com -D "cn=admin,dc=aapingou,dc=com" -b "dc=aapingou,dc=com " "uid=*"</code>
<code>No such object (32) -----表示配置成功,隻是沒有資料,資料正常</code>
1.4.6 為ldap 資料庫添加資料
在下面部分中會以web端進行添加資料操作
1.4.7 為ldap用戶端配置web管理接口
<code> </code><code>yum </code><code>install</code> <code>httpd php php-ldap php-gd -y </code>
<code> </code><code>cd</code> <code>/var/www/html/</code>
<code> </code><code>381 </code><code>ls</code>
<code> </code><code>382 rz xvf ldap-account-manager-3.7.</code><code>tar</code><code>.gz </code>
<code> </code><code>383 </code><code>ls</code>
<code> </code><code>384 </code><code>tar</code> <code>xvf ldap-account-manager-3.7.</code><code>tar</code><code>.gz </code>
<code> </code><code>385 </code><code>ls</code>
<code> </code><code>386 </code><code>mv</code> <code>ldap-account-manager-3.7 ldap</code>
<code> </code><code>387 </code><code>cd</code> <code>ldap</code>
<code> </code><code>390 </code><code>cd</code> <code>config</code>
<code> </code><code>391 </code><code>ls</code>
<code> </code><code>392 </code><code>cp</code> <code>config.cfg_sample config.cfg </code>
<code> </code><code>393 </code><code>cp</code> <code>lam.conf_sample lam.conf </code>
<code>修改lam.conf 配置檔案</code>
<code>[root@localhost config]</code><code># pwd</code>
<code>/var/www/html/ldap/config</code>
<code>[root@localhost config]</code><code># sed -i 's#cn=Manager#cn=admin#g' lam.conf</code>
<code>[root@localhost config]</code><code># sed -i 's#dc=my-domain#dc=aapingou#g' lam.conf</code>
<code>授權</code>
<code>[root@localhost config]</code><code># chown -R apache:apache /var/www/html/ldap</code>
<code>1.4.7.1 測試通路ldap web 用戶端</code>
<code>[root@localhost ldap]</code><code># /etc/init.d/httpd restart</code>
<code>Stopping httpd: [FAILED]</code>
<code>Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain </code><code>for</code> <code>ServerName</code>
<code> </code><code>[ OK ]</code>
<code>[root@localhost ldap]</code><code># netstat -tnlp | grep 80</code>
<code>tcp 0 0 :::80 :::* LISTEN 2404</code><code>/httpd</code>
<code>[root@localhost ldap]</code><code>#</code>
1.4.7.2 登陸web端 進行添加使用者操作
步驟如下圖所示
<a href="http://s3.51cto.com/wyfs02/M02/74/72/wKioL1YeC2SjZ5DTAAGhIAZRoCY714.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M00/74/76/wKiom1YeC4KDxMDlAAFxs7c63LI379.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M00/74/72/wKioL1YeC7Czti9yAACzbZBgPYE550.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M01/74/76/wKiom1YeC6bzTB-XAAEk7dM8x4U692.jpg" target="_blank"></a>
新增一個組,一個使用者
現在在此查詢,新增資料是否成功
<code>[root@localhost ldap]</code><code># ldapsearch -LLL -W -x -H ldap://aapingou.com -D "cn=admin,dc=aapingou,dc=com" -b "dc=aapingou,dc=com " "uid=wyb"</code>
<code>dn: uid=wyb,ou=People,</code><code>dc</code><code>=aapingou,</code><code>dc</code><code>=com</code>
<code>objectClass: inetOrgPerson</code>
<code>objectClass: organizationalPerson</code>
<code>objectClass: person</code>
<code>homeDirectory: </code><code>/home/wyb</code>
<code>loginShell: </code><code>/bin/bash</code>
<code>cn:: IHd5Yg==</code>
<code>uidNumber: 10001</code>
<code>gidNumber: 10001</code>
<code>sn: wyb</code>
<code>givenName: wyb</code>
<code>uid: wyb</code>
<code>userPassword:: e1NTSEF9K1FwdC96dXorSDVqRVNscGhSZ0g1TXVjOWFodG4rUG4=</code>
通過web結構管理ldap的配置完成!也已經完成了初始化使用者組和使用者
1.4.8 導出,備份ldap資料庫檔案
<code>方法一:</code>
<code>[root@localhost ldap]# ldapsearch -LLL -w 123456 -x -H ldap://aapingou.com -D </code><code>"cn=admin,dc=aapingou,dc=com"</code> <code>-b </code><code>"dc=aapingou,dc=com"</code> <code>>/root/bak-ldap.ldif</code>
<code>方法二:</code>
<code>導出資料更常用的是slapcat指令,該指令的格式如下:</code>
<code>最常用的選項就是-l,表示導出為LDIF檔案格式。</code>
<code>slapcat -l sladp-back</code>
提示:從導出結果可看出,除了使用ldapadd指令添加到目錄資料庫中的條目資料外,還導出了很多其他資訊,包括條目錄UUID、時間戳等資訊 ,次指令到處的内容比ldapsearch 導出的更為詳細
1.4.9 從LDIF檔案添加到目錄資料庫
使用OpenLDAP用戶端工具ldapadd指令,可将LDIF檔案中的條目添加到目錄資料庫中,該指令的格式如下:
ldappadd 選項 LDIF檔案
在ldappadd指令中常用的選項如下:
-x:進行簡單認證。
-D:用來綁定伺服器的dn。
-h:目錄服務的位址。
-w:綁定dn的密碼。
-f:使用LDIF檔案進行條目添加的檔案。
将前面編寫的LDIF檔案的條目資料添加到目錄資料庫中。
具體操作步驟如下:
(1)檢查dlw.com.ldif檔案中的内容,需要注意的是,每個冒号後面都需要空一格,而每行結束處不能留有空格字元。
(2)使用以下指令将dlw.com.ldif檔案中的條目添加到目錄中:
寫道
前提是現有entry中不能有将要導入的資訊,如果有請先删除,再次導入新的
<code># ldapadd -x -D </code><code>"cn=admin,dc=aapingou,dc=com"</code> <code>-w 123456 -f bak-ldap.ldif</code>
(3)使用ldapdelete 删除整個entry 或者一個cn
<code>#delete one user</code>
<code> </code><code>[root]</code><code># ldapdelete -D "cn=admin,dc=ldap.xxx,dc=net" -W -x -H ldap://ldap.xxx "uid=18x,ou=rfkj,dc=ldap.xxx,dc=net"</code>
<code>#delete all (ou)</code>
<code> </code><code>[root]</code><code># ldapdelete -D "cn=admin,dc=ldap.xxx,dc=net" -W -r -x -H ldap://ldap.xxx.net "ou=rou,dc=ldap.xxx,dc=net"</code>
<code>-r 表示遞歸删除</code>
提示:如果以上指令執行不成功,需要逐個字元檢查bak-ldap.ldif檔案中的内容,特别注意空格的問題。
關于本文中的三處密碼做個解答
/var/www/html/ldap/config/lam.conf 這個檔案管理
# password to change these preferences via webfrontend (default: lam)
#Passwd: {SSHA}B6tdhIqMn9WoOBojwzfBEf4MAY/J39Uh
Passwd: {SSHA}D6AaX93kPmck9wAxNlq3GF93S7A= R7gkjQ== 這就是preference的密碼,預設lam
/var/www/html/ldap/config/config.cfg 這個檔案管理
# password to add/delete/rename configuration profiles (default: lam)
password: {SSHA}D6AaX93kPmck9wAxNlq3GF93S7A= R7gkjQ== 預設密碼為lam
3
########################################################################################
下面根據我自己的經驗,給出幾個安裝和配置注意事項,供參考。
疑惑1:細心的人會發現有的教程說要配置主機DNS,添加與LDAP相關的域名,而大部分教程都沒有提及這個,那麼到底要不要配置呢?
解答:當然需要配置。安裝好OpenLDAP後首先需要配置slapd.conf這個檔案,其中裡面有
這樣一句需要自己配置,這兩個dc代表什麼意思呢?其實dc就是“domainComponent”,也就是域名的組成部分,準确的說是主機域名的 字尾組成部分,如果這裡的配置與你的主機域名不對應的話,服務一般是啟動不了的。那麼怎麼配置域名呢?Linux和Windows下的配置檔案如下:
Linux下:/etc/hosts
Windows下:C:\Windows\System32\drivers\etc\hosts
需要在hosts檔案裡添加一條域名(如果沒配置的話),格式如下:
比如我的主機名是min,并添加的域名配置是:
那麼相應的我就需要在slapd.conf裡這樣配置suffix:
當然這裡域名字尾不一定隻有兩級,也可以是hostname.example.com.cn,然後suffix就應該是“dc=example, dc=com, dc=cn”,這随便你怎麼設定了,隻要對應就行。
疑惑2:很多版本的slapd.conf裡預設都配置了下面兩個變量:
這是什麼意思?需要改動嗎?
解答:這是資料庫database的backend,一般slapd.conf裡配置的database都是 bdb,也就是Berkeley DB,有的也許是hdb,其實也是Berkeley DB,隻是兩個不同的存儲引擎(就像Mysql有MyISAM和InnoDB兩個不同的存儲引擎一樣)。而modulepath和moduleload指 定了動态子產品路徑及動态裝載的後端子產品,因為OpenLDAP預設是用Berkeley DB存儲資料的,如果你有動态的資料需要裝載,那麼就需要配置這兩個參數,對于一般使用者将這兩個注釋掉即可。
疑惑3:OpenLDAP預設采用Berkeley DB存儲資料,那麼可以換用其它的關系資料庫嗎?具體如何配置呢?
解答:當然可以。首先需要明确ldap資料模型來自RDBMS(關系資料庫模型),而并沒有指定一定是哪個 DB,隻要是關系資料庫都可以作為LDAP的背景,那麼你為什麼會想用其它的資料庫代替自帶的Berkeley DB呢?我想可能是性能相關了,對于少量資料你用哪個都可以,但若涉及到稍大點的資料,比如成千上萬的使用者查詢,那麼Berkeley DB的性能就不可觀了,而且Berkeley DB管理起來也不太友善,畢竟對這個資料庫熟悉的人不多,如果能換作我們經常使用的資料庫,不僅性能得到提升,管理起來也十分容易,豈不是一舉多得。
疑惑4:新舊版本的OpenLDAP到底有什麼差異呢?
解答:簡單一句話就是:舊版本的OpenLDAP配置檔案一般是slapd.conf(路徑可能是/etc/openldap,也可能是/usr/local/openldap,甚至可能是/usr/share/slapd/,不同版本不同安裝不同系統都可能不同,可使用locate slapd.conf進行查找正确的路徑),而新版本(我測試的新版本是2.4.31)的OpenLDAP服務運作時并不會讀取該配置檔案,而是從slapd.d目錄(一般與slapd.conf在同一目錄下)中讀取相關資訊,我們需要把該目錄下的資料删掉,然後利用我們在slapd.conf裡配置的資訊重新生成配置資料。這也可能是你啟動服務後運作ldap相關指令卻出現“ldap_bind: Invalid credentials (49)”錯誤的主要原因。具體怎麼重新生成配置資料請看1.4.5配置内容。
疑惑5:自定義的ldif資料檔案中的objectclass後的domain、top、organizationalUnit、inetOrgPerson等等都是什麼意思,可以随便寫嗎?
解答:存儲LDAP配置資訊及目錄内容的标準文本檔案格式是LDIF(LDAP Interchange Format),使用文本檔案來格式來存儲這些資訊是為了友善讀取和修改,這也是其它大多數服務配置檔案所采取的格式。LDIF檔案常用來向目錄導入或更 改記錄資訊,這些資訊需要按照LDAP中schema的格式進行組織,并會接受schema 的檢查,如果不符合其要求的格式将會出現報錯資訊。是以,ldif檔案中的屬性都定義在各大schema中,其中objectclass是對象的類屬性, 不能随便填寫,而應與schema中一緻。一般slapd.conf檔案的頭部都包含了這些schema:
其中前三個是比較重要的schema,定義了我們所需要的各個類,比如ldif中一般先定義一個根節點,其相應的objectclass一般是 domain和top,而根節點下的ou屬性即定義組節點(group)的objectclass一般是 organizationalUnit,group下可以是group也可以是使用者節點,使用者節點的objectclass一般是 inetOrgPerson。而各個節點的一系列屬性如使用者節點的uid、mail、userPassword、sn等等都定義在schema中相關的 objectclass裡,可以自己查找看看。
疑惑6:OpenLDAP認證使用者uid時預設是不區分大小寫的,也就是“alexia”與“AleXia”是同一個使用者,在有些情況下這并不合理,能配置使得認證時能區分大小寫嗎?
解答:以我目前的經驗來看,舊版本的OpenLDAP是可以配置區分大小寫的,而新版本的OpenLDAP卻配置不了。為什麼這麼說呢?
從字面上也可以看出,其中<code>caseIgnoreMatch</code>和<code>caseIgnoreSubstringsMatch</code>就定義了uid或userid屬性比對時不區分大小寫,如果我們将其改為<code>caseExactMatch</code>和<code>caseExactSubstringsMatch</code>就表示使用者uid認證時需要區分大小寫,也就是“alexia”與“AleXia”同不同的使用者,這很簡單,在舊版本的OpenLDAP也行得通。
可是在新版本的OpenLDAP中卻不行,新版本的core.schema檔案中也包含這樣一段:
針對這個問題,我給出兩個不太好的解決方案:
下載下傳OpenLDAP源碼,找到定義uid屬性比對規則的地方,修改它然後重新編譯。這個工作量不輕松,熱愛研究源碼的人可以嘗試。
我的主要經驗也就這些。OpenLDAP也有用戶端,如果你配置成功後,可以用用戶端或寫Java程式進行驗證。
<b> 本文轉自crazy_charles 51CTO部落格,原文連結:http://blog.51cto.com/douya/1702874</b><b>,如需轉載請自行聯系原作者</b>