導航:首頁 > 編程語言 > ldapphpsearch

ldapphpsearch

發布時間:2022-06-30 10:31:05

1. 我的linux系統中怎麼沒有ldapsearch命令

先查看一下,系統有沒有該命令。

whichldapsearch

如果沒有的話安裝一個

yumlist"*ldap*"
yuminstallopenldap-clients

再查看一下,是否安裝好了。

rpm-qlopenldap-clients
whichldapsearch

2. 什麼是 php LDAP模塊

LDAP(Lightweight Directory Access Protocol)的意思是"輕量級目錄訪問協議",是一個用於訪問"目錄伺服器"(Directory Servers)的協議。php要能夠連接上ldap伺服器,必須安裝php-ldap模塊,並修改php.ini配置,增加配置項extension=ldap.so,之後重啟apache伺服器。

3. 什麼情況適合使用LDAP

今天安裝了下wordpress,主要用於團隊內部技術交流和分享。它的安裝倒是非常簡單,修改下資料庫配置文件就可以了。但由於團隊的賬號全部採用LDAP進行管理,因此希望wordpress能與ldap進行集成。 好在wordpress比較成熟,有多種LDAP插件可以使用,在嘗試了Simple LDAP Login和Active Directory Integration均告知失敗的情況下,只好潛心去看下它的代碼,代碼倒簡單,加上之前寫過一個簡單的PHP修改LDAP密碼的頁面,很快就定位問題並圓滿解決了。 1、現將問題的修改過程和大家分享,先說下我們LDAP的組織情況,我們在LDAP創建了2個組,一個用戶組,一個角色分組,用戶分組按照組織架構進行區分,如下圖所示: Java代碼 +dc=foo,dc=bar,dc=com -+ou=roles -+ou=users --+ou=dev ---+ou=dev09 ----+uid=zhangsan 因此我們base_dn為 dc=foo,dc=bar,dc=com 2、Simple LDAP Login插件修改: a).下載並啟用Simple LDAP Login b).在設置項中找到Simple LDAP Login的配置頁面,填寫Simple選項卡中配置baseDN、LDAP的伺服器IP地址,並在Advance配置LDAP Login Attribute為uid。 c).保存後,發現輸入正確的用戶名和密碼後,無法登陸。 d).翻了翻插件的源碼才發現在Simple-LDAP-Login.php中ldap_auth方法存在問題。他將我們配置的uid、輸入的用戶名和配置baseDN鏈接在一起,即得到的是「uid=zhangsan,dc=foo,dc=bar,dc=com」作為用戶的dn查找,而該正確的查找應該為「uid=zhangsan,ou=dev1,ou=dev1,ou=dev,ou=users,dc=foo,dc=bar,dc=com」,因此總是提示我們無法登陸。 Php代碼 function ldap_auth( $username, $password, $directory ) { $result = false; if ( $directory == "ad" ) { $result = $this->adldap->authenticate( $username, $password ); } elseif ( $directory == "ol" ) { $this->ldap = ldap_connect( join(' ', (array)$this->get_setting('domain_controllers')), (int)$this->get_setting('ldap_port') ); ldap_set_option($this->ldap, LDAP_OPT_PROTOCOL_VERSION, (int)$this->get_setting('ldap_version')); if ( str_true($this->get_setting('use_tls')) ) { ldap_start_tls($this->ldap); } $ldapbind = @ldap_bind($this->ldap, $this->get_setting('ol_login') .'=' . $username . ',' . $this->get_setting('base_dn'), $password); $result = $ldapbind; } return apply_filters($this->prefix . 'ldap_auth', $result); } e).修改查找部分,先用uid去查找正確的dn,然後用正確的dn和password去綁定,紅色部分為修改。 f).最終代碼如下: Php代碼 function ldap_auth( $username, $password, $directory ) { $result = false; if ( $directory == "ad" ) { $result = $this->adldap->authenticate( $username, $password ); } elseif ( $directory == "ol" ) { $this->ldap = ldap_connect( join(' ', (array)$this->get_setting('domain_controllers')), (int)$this->get_setting('ldap_port') ); ldap_set_option($this->ldap, LDAP_OPT_PROTOCOL_VERSION, (int)$this->get_setting('ldap_version')); if ( str_true($this->get_setting('use_tls')) ) { ldap_start_tls($this->ldap); } //add by gogo1217 $search=@ldap_search($this->ldap,$this->get_setting('base_dn'),$this->get_setting('ol_login') .'=' .$username); $dn=@ldap_get_entries($this->ldap,$search); //從獲取到的數組取出用戶dn,沒有用戶dn修改不了密碼。 for ($i=0; $i<$dn["count"]; $i++){ $user_dn= $dn[$i]["dn"]; } $ldapbind = @ldap_bind($this->ldap, $user_dn, $password); //end by gogo1217 //$ldapbind = @ldap_bind($this->ldap, $this->get_setting('ol_login') .'=' . $username . ',' . $this->get_setting('base_dn'), $password); $result = $ldapbind; } return apply_filters($this->prefix . 'ldap_auth', $result); } g).LDAP中姓名中文亂碼問題: 這是因為插件中對中文進行了轉碼,去掉轉碼即可,刪除紅顏色部分中的sanitize_title函數包裹: 3、Active Directory Integration插件修改: a).下載並啟用Active Directory Integration; b).在配置模塊中找到Active Directory Integration Settings,填寫Server選項卡中的LDAP的伺服器IP地址和baseDN。 c).保存後,發現輸入正確的用戶名和密碼後,無法登陸。 d).翻了翻插件的源碼,發現使用ad_ldap/adLDAP.php來鏈接LDAP,他將輸入的用戶名和我們在User配置頁面中用戶後綴鏈接在一起,由於我沒有配置後綴即得到的是「zhangsan」作為用戶的dn查找,而該正確的查找應該為「uid=zhangsan,ou=dev1,ou=dev1,ou=dev,ou=users,dc=foo,dc=bar,dc=com」,因此總是提示我們無法登陸。 Php代碼 /** * Validate a user's login credentials * * @param string $username A user's AD username * @param string $password A user's AD password * @param bool optional $prevent_rebind * @return bool */ public function authenticate($username, $password, $prevent_rebind = false) { // Prevent null binding if ($username === NULL $password === NULL) { return false; } if (emptyempty($username) emptyempty($password)) { return false; } // Bind as the user $ret = true; $this->_bind = @ldap_bind($this->_conn, $username . $this->_account_suffix, $password); if (!$this->_bind){ $ret = false; } e).修改查找部分,先用uid去查找正確的dn,然後用正確的dn和password去綁定,紅色部分為修改。 f).最終代碼如下: Php代碼 /** * Validate a user's login credentials * * @param string $username A user's AD username * @param string $password A user's AD password * @param bool optional $prevent_rebind * @return bool */ public function authenticate($username, $password, $prevent_rebind = false) { // Prevent null binding if ($username === NULL $password === NULL) { return false; } if (emptyempty($username) emptyempty($password)) { return false; } // Bind as the user $ret = true; //add by liushimin $search=@ldap_search($this->_conn,$this->_base_dn,"uid=".$username); $dn=@ldap_get_entries($this->_conn,$search); //從獲取到的數組取出用戶dn,沒有用戶dn修改不了密碼。 for ($i=0; $i<$dn["count"]; $i++){ $user_dn= $dn[$i]["dn"]; } //end by liushimin $this->_bind = @ldap_bind($this->_conn, $user_dn, $password); //$this->_bind = @ldap_bind($this->_conn, $username . $this->_account_suffix, $password); if (!$this->_bind){ $ret = false; } 4、對比2個插件,都是在用戶登陸的時候去LDAP檢索,並且發現本地沒有用戶,則創建一個新的用戶並賦予指定的角色。

4. php中,ldap驗證的錯誤: 這個報錯始終解決不了,可否相告~

在 LDAP 的協議之中,很像硬碟目錄結構或倒過來的樹狀結構。LDAP 的根就是全世界,第一級是屬於國別 (countries) 性質的層級,之後可能會有公司 (organization) 的層級,接著是部門 (organizationalUnit),再來為個人。而就像文件,每個人都會有所謂的顯名 (distinguished name, 簡稱 dn),dn 可能像醬子 cn=John Smith,ou=Accounts,o=My Company,c=US。

<?php
// 本例使用到 connect, bind, search, interpret search
// result, close connection 等等 LDAP 的功能。
echo "<h3>LDAP 搜尋測試</h3>";
echo "連接中 ...";
$ds=ldap_connect("localhost"); // 先連上有效的 LDAP 伺服器
echo "連上 ".$ds."<p>";

if ($ds) {
echo "Binding ...";
$r=ldap_bind($ds); // 匿名的 bind,為只讀屬性
echo "Bind 返回 ".$r."<p>";
echo "Searching for (sn=S*) ..."; // 找尋 S 開頭的姓氏
$sr=ldap_search($ds,"o=My Company, c=US", "sn=S*");
echo "Search 返回 ".$sr."<p>";
echo "S 開頭的姓氏有 ".ldap_count_entries($ds,$sr)." 個<p>";
echo "取回姓氏資料 ...<p>";
$info = ldap_get_entries($ds, $sr);
echo "資料返回 ".$info["count"]." 筆:<p>";
for ($i=0; $i<$info["count"]; $i++) {
echo "dn 為: ". $info[$i]["dn"] ."<br>";
echo "cn 為: ". $info[$i]["cn"][0] ."<br>";
echo "email 為: ". $info[$i]["mail"][0] ."<p>";
}
echo "關閉鏈接";
ldap_close($ds);
} else {
echo "<h4>無法連接到 LDAP 伺服器</h4>";
}
?>

5. ldap search實現查詢manager下管轄的所有員工

ldapsearch 時 base指定為manager的dn,scope指定sub,我想這樣就可以了。

6. 回復技術提問中的一個問題:php如何讀取域用戶信息 - PHP進階討論

給你一個完整的示例,我自己搭了個AD伺服器測試過代碼了。可以運行。這段代碼將test.local域中,找到OU為「測試組織單元」中找出所有對象,並且發送成CSV文件的例子。另外,AD外圍開發應用不是冷門,很多的保險證券銀行等金融機構都會部署AD服務,並且將不同的應用與AD集成。同樣一套可以集成到AD的應用和不帶有AD的應用在價格不是一點點的差距。通過與AD集成還可以開發各種基SHAREPOINT、Exchange等的應用,還可以利用微軟的像CRM等等產品,開發工作流等應用。應該說是很有錢途的。$value) {? ?? ???if (!is_array($value)) { ? ?? ?? ?? ?? ?continue;? ?? ???}? ?? ???echo $value[\'name\'][0], \',\';? ?? ???echo $value[\'mail\'][0], \',\';? ?? ???echo $value[\'mobile\'][0], \',\';? ?? ???echo $value[\'telephonenumber\'][0], \',\'; ? ?? ???echo $value[\'title\'][0], \',\';? ?? ???echo $value[\'physicaldeliveryofficename\'][0], \',\';? ?? ???echo $value[\'company\'][0], \"\\r\\n\";}?>

7. php要支持LDAP需要什麼模塊

今日需要部署一套ldap的測試環境,但發現現有php在編譯的時候忘加上--with-ldap了,遂打算重新編譯,但這種方式比較麻煩並且繁瑣,如果僅僅是增加一個ldap模塊可以通過phpize和configure的方式編譯外掛載入ldap的so文件來使php支持ldap擴展拓展。
第一步是找到當前運營環境的php版本,並將此版本的源碼包放入運營機器某個目錄,解壓
第二步

1 cd /xxx/xxx/php-5.2.17/ext/ldap/
2 /usr/local/php/bin/phpize
3 ./configure --with-php-config=/usr/local/php/bin/php-config --with-ldap

但是檢查過程異常退出,提示如下錯誤:

1 checking for LDAP support... yes, shared
2 checking for LDAP Cyrus SASL support... no
3 checking for 3 arg ldap_set_rebind_proc... yes
4 checking for ldap_parse_result... no
5 checking for ldap_parse_reference... no
6 checking for ldap_start_tls_s... no
7 checking for ldap_bind_s... no
8 configure: error: LDAP build check failed. Please check config.log for more information.

始終驗證不通過,這時候排查openldap2-devel版本,以為此版本比較老,就往高版本升級,但是依舊是同樣的錯誤,最終排查覺得有可能是openldap2-client的版本和openldap2-devel版本不一致導致,於是在網上找了一個和client版本完全匹配的devel rpm包,重新configure順利通過校驗。這個問題比較奇怪,通常情況下編譯php是不需要開發包和二進制包版本完全一致,但ldap的編譯卻需要client和devel包版本完全一致。
記得在make ,make install之後在php.ini上將ldap.so寫入extension擴展配置中。

8. 我想從LDAP中獲取所有的用戶信息,用ldapTemplate中的search方法 ,請問應該怎麼寫,過濾器 filter怎麼寫

如果你的用戶屬性里有uid
這可以這樣寫 (uid=*)
如果沒有,可以寫任何一個有的屬性,然後屬性值=*

閱讀全文

與ldapphpsearch相關的資料

熱點內容
雲伺服器建設原理 瀏覽:256
javajunit4for 瀏覽:843
華為伺服器如何進陣列卡配置 瀏覽:433
apache伺服器ip地址訪問 瀏覽:718
如何買到安卓手機預裝軟體 瀏覽:537
冤罪百度雲不要壓縮 瀏覽:85
蘇州雲存儲伺服器 瀏覽:173
解壓收納原聲 瀏覽:384
java注冊驗證 瀏覽:374
火花app怎麼上推薦 瀏覽:980
什麼app能游戲投屏到電視上 瀏覽:455
伺服器託管到雲端是什麼意思 瀏覽:835
app保存草稿怎麼用 瀏覽:808
安卓如何進入proumb 瀏覽:144
主機虛擬雲伺服器 瀏覽:619
刪除分區加密的空間會不會恢復 瀏覽:706
京東app客戶上門怎麼看搜索量 瀏覽:741
怎麼在農行app購買黃金 瀏覽:46
c型開發板和單片機 瀏覽:146
虛擬機建立用戶的模板文件夾 瀏覽:904