熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Linux下的LDAP

2013-11-13 15:48:09  來源: Oracle 

  作者簡介
  Atif Ghaffar 就像只變色龍他經常變換角色從系統管理員到程序員再到教師項目管理員直至任何可以完成工作的角色有時候當他在電影院看電影的同時他也喜歡拿出筆記本電腦編寫程序Atif始終堅信他是屬於linux和開放源碼社團的關於Atif的更多信息可以訪問他的主頁~aghaffar
  
  摘要
  本文將討論LDAP以及在我們所喜愛的操作系統——linux上實現LDAP
  已經有很多關於LDAP的文獻所以我不想在這裡再重復什麼我不准備討論高級的LDAP概念計劃以及第二版和第三版LDAP的區別等等事實上我對這類問題也所知不多相反地我將嘗試用簡單明了的語言解釋什麼是LDAP 它能給我們帶來的好處以及我們如何使用它
  我不是一個LDAP專家我只是一個LDAP的初學者本文介紹的是我用LDAP做了些什麼以及如何做我不會使你再像以前的我一樣感到迷惑
  問題既然你是個LDAP初學者為什麼還要寫一篇關於LDAP的文章?
  最近我在一個項目上需要一位同事的幫助 這個項目的基礎就是LDAP 我的同事可以在perl郵件服務器等等方面幫助我但是他對LDAP一無所知事實是每一次他想要深入學習LDAP 反而會對LDAP越來越迷惑 因為該項目的基礎是LDAP 所以我給了這位同事半小時來學習LDAP結果是一切反而變得清晰明了了 原因很簡單 LDAP是在前端的 只需要集中一點點注意力或者一些生動的例子就可以了
  在本文中我也正想這樣做
  你可以在文中發現好多對學習LDAP有用的url
  
  LDAP是什麼?
  LDAP是輕量目錄訪問協議(Lightweight Directory Access Protocol)的縮寫其實是一種目錄服務類似於我們在文件系統中所使用的目錄類似於我們查詢電話號碼使用的電話號碼簿類似於我們所使用諸如NIS(Network Information Service)DNS (Domain Name Service)等網絡目錄也類似於你在花園中所看到的樹木
  LDAP是一種特殊的數據庫但是LDAP和一般的數據庫不同明白這一點是很重要的 LDAP對查詢進行了優化與寫性能相比LDAP的讀性能要優秀很多
  
  一般地目錄服務提供什麼樣的服務呢?
  通常是根據查詢的標准返回一定的信息
  
  實例
  文件系統目錄
  ls /etc
  返回/etc目錄下所有的文件和子目錄
  
  ls /etc/p*
  返回/etc下所有以p開頭的文件和子目錄
  
  find /usr/local/apache name l
  這將在/usr/local/apache目錄下搜索名為l的文件/子目錄
  
  NIS目錄
  ypcat passwd
  這將從NIS數據庫返回用戶名密碼用戶id等信息
  
  ypmatch atif passwd
  返回用戶atif的密碼
  
  DNS目錄
  nslookup
  返回的ip地址
  
  nslookup type MX
  返回主機名符合的MX記錄信息
  
  LDAP目錄
  (我們將在下面詳細闡述)
  ldapsearch uid=aghaffar
  返回關於用戶aghaffar的所有公開信息
  這和find / uid aghaffar unix命令很類似
  
  ldapsearch uid=aghaffar mail
  返回用戶ughaffar的郵件信息
  
  目錄基礎或根
  在上面我們所提到的任何一種目錄服務中都有一個我們開始浏覽或搜索的開始點 這個開始點就是通常所謂的根 這和一棵數的根也很類似每棵都有一個根以及很多的樹枝樹葉
  * 文件系統的根是 /
  * NIS 的根是域名比如
  * DNS 根是Internic(譯者注Internet網絡信息中心 Internet的管理組織)
  * LDAP同樣有一個可定義的根比如 o= 這裡o表示組織
  每個根都可以衍生出好多枝葉(正如同你鄰居的花園中的樹木一樣) 對於文件系統來說它的枝葉就是一個個文件及子目錄每一個枝葉都有一些屬性比如文件系統的枝葉(文件及子目錄)有以下的屬性
  * 名稱
  * 修改時間
  * 所有者
  * 組(譯者注所有者所在的組)
  * 等等
  下圖顯示了一個文件系統目錄
  屬性由unix命令ls ld /usr得到
  
  下面是一個LDAP目錄的圖示
  
  我們將在下面討論這張圖
  
  區分名(DNDistinguished Name)
  和自然界中的樹不同文件系統/LDAP/電話號碼簿目錄的每一片枝葉都至少有一個獨一無二的屬性這一屬性可以幫助我們來區別這些枝葉
  在文件系統中 這些獨一無二的屬性就是帶有完整路徑的文件名比如/etc/passwd該文件名在該路徑下是獨一無二的當然我們可以有/usr/passwd /opt/passwd但是根據它們的完整路徑它們仍然是唯一的
  類似於DNS系統的FQDN正式域名FQDN也是唯一的
  在LDAP中一個條目的區分名稱叫做dn或者叫做區分名在一個目錄中這個名稱總是唯一的比如我的dn是uid=aghaffar ou=People o=developerch不可能有相同的dn但是我們可以有諸如uid=aghaffar ou=Administrators o=developerch的dn這同上面文件系統中/etc/passwd 和 /usr/passwd的例子很類似
  我們有獨一無二的屬性ou=Administrators o=developerch 中uid和在ou=People o=developerch中的uid這並不矛盾
  
  LDAP服務器
  現在市場上有很多LDAP服務器大多數都可以在linux上運行本文將介紹openLDAP的使用
  我為什麼選擇openLDAP? 為什麼你應該選擇openLDAP?
  * openLDAP是開放源碼的
  openLDAP的官方網站是你可以下載其源代碼包自己編譯或者看看你的linux發行版是否已經包含了該軟件包如果已經包含了就可以安裝預先編譯好的版本從而少花費些力氣
  我已經成功地在SuSEx 和 RedHatx上測試過openLDAP
  構建LDAP目錄
  下面我們將介紹設置一個LDAP服務器的步驟
  步驟
  * 下載並安裝openLDAP
  * 配置 LDAP server
  * 配置本地環境指向LDAP 安裝
  * 初始化LDAP 數據庫
  * 查詢 LDAP
  * 添加/修改 LDAP 條目
  下載並安裝openLDAP
  正如前面所提到的可以從下載源代碼包並根據它的相關文檔進行安裝或者安裝預先編譯好的包(包的安裝或如何編譯應用程序已經超出了本文討論的范疇)
  配置LDAP服務器
  在我們的例子中我將為構建LDAP服務器你可以用你喜歡的編輯器編輯nf和f配置文件來更改名稱等參數以適應你的具體需求
  在我的服務器上配置文件在/etc/openldap目錄下你的配置文件可能在/usr/local/etc/openldap或者別的地方這要根據你的linux發行版本或者編譯openldap的具體情況而定
  ######### /etc/openldap/nf ###################################
  # 下面的部分是我的suse linux 發行版本預先定義的
  # 我們設置的部分在本文的第二和第三部分
  include /etc/openldap/nf
  include /etc/openldap/nf
  schemacheck off
  
  pidfile /var/run/slapdpid
  argsfile /var/run/slapdargs
  
  #######################################################################
  # ldbm database definitions
  #######################################################################
  
  # 定義使用的數據庫類型 缺省是ldbm
  database ldbm
  
  # 後綴或者根 這是你LDAP目錄的頂節點
  suffix o=
  
  # LDAP的dbs 保存的位置
  directory /var/lib/ldap
  
  # 目錄管理員的區分名
  rootdn cn=Manager o=
  
  # 保存ldap目錄管理員的明文密碼是很糟糕的但是我們將在剛剛開始使用ldap時這樣做
  rootpw secret
  
  # 這就是所有的一切
  
  編輯你的 /etc/openldap/nf配置文件
  該文件位於ldap客戶端(我們將使用同一計算機作為服務器和客戶端當然這可以在同一計算機或不同的計算機上)
  通常諸如ldapdelete ldapadd等等的ldap客戶端會讀該文件的內容
  
  ##########/etc/openldap/nf#########
  # LDAP 的缺省設置
  #
  # 查看 nf() 可以獲取更多的信息
  # 本文件應該設置為對所有人可讀
  
  # 定義ldap服務器可以用主機名或ip地址
  host
  
  # 定義我們要查詢的目錄的根
  # 我們將要使用的頂節點這不一定是目錄的根比如我們可以使用
  # base = ou=users o=linuxfocusch
  # 這時我們的一切查詢都將從樹根o=的分支開始
  
  現在啟動ldap服務器
  如果你使用SuSE預先編譯好的openldap服務器你可以通過下面的命令啟動ldap服務
  /etc/rcd/ldap start
  在RedHat該命令為
  /etc/rcd/initd/ldap start
  如果你是使用缺省設置自己編譯並安裝的你可以用/usr/local/libexec/slapd &啟動ldap服務器如果沒有使用缺省設置請找到slapd文件並運行它
  
  在新安裝的LDAP服務器上添加數據
  到現在
From:http://tw.wingwit.com/Article/program/Oracle/201311/17322.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.