IDAP出現的問題彙總

目錄

如何修改LDAP默認端口呢?

修改phpldapadmin的默認端口  https://www.ilanni.com/?p=14000

如何查看yum安裝了那些軟件

如何查看yum安裝的軟件在哪裏?

LINUX所有服務的啓動腳本都存放在___目錄中   /etc/init.d

linux 將自己的服務添加到系統service服務

LDAP錯誤碼

                   LDAP的相關概念與objectClass介紹


 

問題:

linux上的LDAP服務,遠程windows程序訪問超時和拒絕 ping ip地址是通的,但是端口一直訪問不了

所以使用telnet測試端口號是否可以訪問  389爲無加密端口,636爲加密端口

telnet 20.23.13.249 389  發現連接不通

登上服務主機,使用netstat -anptu  //查看當前所有tcp端口·

netstat命令各個參數說明如下:

  -t : 指明顯示TCP端口

  -u : 指明顯示UDP端口

  -l : 僅顯示監聽套接字(所謂套接字就是使應用程序能夠讀寫與收發通訊協議(protocol)與資料的程序)

  -p : 顯示進程標識符和程序名稱,每一個套接字/端口都屬於一個程序。

  -n : 不進行DNS輪詢,顯示IP(可以加速操作)

 

發現389端口是開啓的

於是,使用telnet命令繼續測試,發現端口號在1024以下的端口使用telnet一直連接不通,但是在1024以上的卻可以

然後,想到通過改LDAP的默認端口389

如何修改LDAP默認端口呢?

CentOS通過yum默認安裝的 openldap 在 slapd 服務啓動後,默認 listen 的配置是ldap:/// ldapi:///這兩個參數,也就是會監聽默認的 TCP:0.0.0.0:389 和一個IPC (Unix-domain socket)

查看 openldap 的官方手冊,發現修改自定義的監聽端口和指定bind的IP地址的方法,都是通過命令行的方式在啓動 slapd 進程的命令後面加 -h 參數來指定監聽的地址和端口,比如:

/usr/sbin/slapd -h ldap:/// ldapi:///

但是我在CentOS下用yum安裝的opldap並不需要我們手動執行上面的命令來啓動,而是由/etc/init.d/slapd這個專門的服務控制腳本來進行啓動和停止的;

一開始我想到的是直接修改/etc/init.d/slapd這個啓動腳本,將 -h 參數寫死到start函數中。但總覺得這有點不夠科學,應該有更加合理的配置參數或選項可以讓我自定義纔對;

於是完整看了一遍/etc/init.d/slapd的處理邏輯,發現它會從/etc/sysconfig/ldap文件來讀取SLAPD_URLS這個變量的參數,並用來設置成啓動時的-h參數;

於是直接將/etc/sysconfig/ldap中的SLAPD_URLS變量取消註釋,並修改成了我需要的如下這樣:

SLAPD_URLS="ldap://0.0.0.0:489/"

重啓slapd服務器,發現除了我新定義的 0.0.0.0:489 有在正常監聽以外,原本默認的 389 也有在監聽中,如下:

從slapd進程的指令可以發現,是把自定義SLAPD_URLS的值附加在了原本的啓動指令上,所以會將新的 port 和原本默認的 port 同時監聽起來了;那麼如何關閉和禁止監聽 default 的 port 呢?

於是繼續查看啓動腳本,在start函數中發現瞭如下配置啓動參數的代碼:

harg="$SLAPD_URLS"
if test x$SLAPD_LDAP = xyes ; then
    harg="$harg ldap:///"
fi
if test x$SLAPD_LDAPS = xyes ; then
    harg="$harg ldaps:///"
fi
if test x$SLAPD_LDAPI = xyes ; then
    harg="$harg ldapi:///"
fi

所以在生成啓動參數時,腳本會做三個判斷,分別是檢查SLAPD_LDAP,SLAPD_LDAPS,SLAPD_LDAPI這三個選項是否爲yes如果是的話,就會在我們自己定義的 SLAPD_URLS 後面附加默認的監聽參數,所以最後拼接出來的啓動參數 -h後面就會同時包含自定義的端口和系統默認的端口;

這三個系統默認的監聽選項開關同樣也是定義在 /etc/sysconfig/ldap或者/etc/sysconfig/slapd配置文件中;將其默認的 yes修改爲no,修改後如下:

SLAPD_LDAP=no    //禁用默認的389
SLAPD_LDAPI=no   //禁用默認的IPC(Unix-domain socket)
SLAPD_LDAPS=no   //禁用默認的ldaps 636
SLAPD_URLS="ldap://0.0.0.0:489/"

之後再重啓服務,終於按我的要求實現僅監聽自定義的端口了;

總結

修改CentOS yum 安裝的 openldap (slapd) 服務默認監聽端口的方法如下:

  1. /etc/sysconfig/ldap文件中的SLAPD_LDAP,SLAPD_LDAPI,SLAPD_LDAPS 三個選項設置爲 no
  2. /etc/sysconfig/ldap文件中啓用,或者是添加一行SLAPD_URLS=的設置定義自己想要綁定監聽的地址和端口
  3. 重啓slapd服務

修改phpldapadmin的默認端口  https://www.ilanni.com/?p=14000

cat > /etc/phpldapadmin/config.php

$servers = new Datastore();

$servers->newServer(‘ldap_pla’);

$servers->setValue(‘server’,’name’,’Ilanni LDAP Server’);

$servers->setValue(‘appearance’,’password_hash’,”);

$servers->setValue(‘login’,’attr’,’dn’);

$servers->setValue(‘server’,’host’,’192.168.123.8′);

$servers->setValue(‘server’,’port’,389);

$servers->setValue(‘server’,’base’,array(‘dc=ilanni,dc=com’));

$servers->setValue(‘login’,’auth_type’,’session’);

$servers->setValue(‘server’,’tls’,false);

$servers->setValue(‘unique’,’attrs’,array(‘uid’,’sn’));

以上配置文件修改完畢後,現在我們來啓動httpd。命令如下:

systemctl start httpd

systemctl enable httpd

systemctl status httpd

如何查看yum安裝了那些軟件

yum list installed

如何查看yum安裝的軟件在哪裏?

先查出其對應的rpm包名。

rpm -qa|grep php-fpm

命令 rpm -ql php71-php-fpm-7.1.2-1.el6.remi.x86_64 
/etc/logrotate.d/php71-php-fpm 
/etc/opt/remi/php71/php-fpm.conf 
/etc/opt/remi/php71/php-fpm.d 
/etc/opt/remi/php71/php-fpm.d/www

LINUX所有服務啓動腳本都存放在___目錄中   /etc/init.d

 

linux 將自己的服務添加到系統service服務

 

LDAP錯誤碼

Ldap load error: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 525, vece]

其中紅字部分的意思如下(這些錯誤碼跟語言無關):

525 - 用戶沒有找到

52e - 證書不正確

530 - not permitted to logon at this time

532 - 密碼期滿

533 - 帳戶不可用

701 - 賬戶期滿

773 - 用戶必須重設密碼

LDAP: error code 32 - No Such Object   https://blog.csdn.net/fireofjava/article/details/79344339

LDAP error Code 及解決方法  https://blog.csdn.net/techchan/article/details/5440775

LDAP的相關概念與objectClass介紹

一,部分LDAP專用名詞的解釋

Objectclass
LDAP對象類,是LDAP內置的數據模型。每種objectClass有自己的數據結構,比如我們有一種叫“電話薄”的objectClass,肯定會內置很多屬性(attributes),如姓名(uid),身份證號(uidNumber),單位名稱(gid),家庭地址(homeDirectory)等,同時,還有一種叫“同學錄”的objectClass,具備“電話薄”裏的一些attributes(如uid、homeDirectory),還會具有“電話薄”沒有的attributes(如description等)。

Entry
entry可以被稱爲條目,一個entry就是一條記錄,是LDAP中一個基本的存儲單元;也可以被看作是一個DN和一組屬性的集合。注意,一條entry可以包含多個objectClass,例如zhang3可以存在於“電話薄”中,也可以同時存在於“同學錄”中。

DN
Distinguished Name,LDAP中entry的唯一辨別名,一條完整的DN寫法:uid=zhang3,ou=People,dc=163,dc=com。LDAP中的entry只有DN是由LDAP Server來保證唯一的。

LDAP Search filter
使用filter對LDAP進行搜索。 Filter一般由 (attribute=value) 這樣的單元組成,比如:(&(uid=ZHANGSAN)(objectclass=person)) 表示搜索用戶中,uid爲ZHANGSAN的LDAP Entry.再比如:(&(|(uid= ZHANGSAN)(uid=LISI))(objectclass=person)),表示搜索uid爲ZHANGSAN, 或者LISI的用戶;也可以使用*來表示任意一個值,比如(uid=ZHANG*SAN),搜索uid值以 ZHANG開頭SAN結尾的Entry。更進一步,根據不同的LDAP屬性匹配規則,可以有如下的Filter: (&(createtimestamp>=20050301000000)(createtimestamp<=20050302000000)),表示搜索創建時間在20050301000000和20050302000000之間的entry。

Filter中 “&” 表示“與”;“!”表示“非”;“|”表示“或”。根據不同的匹配規則,我們可以使用“=”,“~=”,“>=”以及“<=”,更多關於LDAP Filter讀者可以參考LDAP相關協議

Base DN
一條Base DN可以是“dc=163,dc=com”,也可以是“dc=People,dc=163,dc=com”。執行LDAP Search時一般要指定basedn,由於LDAP是樹狀數據結構,指定basedn後,搜索將從BaseDN開始,我們可以指定Search Scope爲:只搜索basedn(base),basedn直接下級(one level),和basedn全部下級(sub tree level)。

二,objectClass介紹

LDAP中,一個條目(Entry)必須包含一個對象類(objectClass)屬性,且需要賦予至少一個值。每一個值將用作一條LDAP條目進行數據存儲的模板;模板中包含了一個條目必須被賦值的屬性和可選的屬性。

objectClass有着嚴格的等級之分,最頂層是top和alias。例如,organizationalPerson這個objectClass就隸屬於person,而person又隸屬於top。

objectClass可分爲以下3類:
結構型(Structural):如account、inetOrgPerson、person和organizationUnit;
輔助型(Auxiliary):如extensibeObject;
抽象型(Abstract):如top,抽象型的objectClass不能直接使用。

每種objectClass有自己的數據結構,比如我們有一種叫“電話薄”的objectClass,肯定會內置很多屬性(attributes),如姓名(uid),身份證號(uidNumber),單位名稱(gid),家庭地址(homeDirectory)等,這些屬性(attributes)中,有些是必填的,例如,account就要求userid是必填項,而inetOrgPerson則要求cn(common name,常用名稱)和sn(sure name,真實名稱)是必填項。

accout內置的attributes有:userid、description、host、localityName、organizationName、organizationalUnitName、seeAlso;

inetOrgPerson內置的attributes有cn、sn、description、seeAlso、telephoneNumber、userPassword、destinationIndicator、facsimileTelephoneNumber、internationaliSDNNumber、l、ou、physicalDeliveryOfficeName、postOfficeBox、postalAddress、postalCode、preferredDeliveryMethod、registeredAddress、st、street、telephoneNumber、teletexTerminalIdentifier、telexNumber、title、x121Address、audio、usinessCategory、carLicense、departmentNumber、isplayName、employeeNumber、employeeType、givenName、homePhone、homePostalAddress、initials、jpegPhoto、labeledURI、mail、manager、mobile、o、pager、photo、preferredLanguage、roomNumber、secretary、uid、userCertificate等;

由上可見,accout僅僅預置了幾個必要且實用的屬性(完成登陸驗證肯定是夠了),而inetOrgPerson內置了非常之多的屬性,例如電話號碼、手機號碼、街道地址、郵箱號碼,郵箱地址,房間號碼,頭像,經理,僱員號碼等等。

因此,在配置LDAP時,如果僅僅是基於驗證登陸的目的,建議將objectClass類型設置爲accout,而如果希望打造一個大而全的員工信息寶庫,建議將objectClass設置爲inetOrgPerson。

當然,對於一個Entry來說,僅僅有accout或者inetOrgPerson是不夠的,在安裝配置LDAP時,本文介紹了使用migrationtools工具,將Linux系統用戶轉化爲ldif格式的文件,進而導入到LDAP中。在這個過程裏,導出的user,會同時具備accout、posixAccount、shadowAccount、top這4個objectClass,而導出的group,則會同時具備和posixGroup、top兩個objectClass。

上面已經寫出,account的必要屬性是userid,而
posixAccount的必要屬性是cn、gidNumber、homeDirectory、uid、uidNumber;
shadowAccount的必要屬性是uid,可選屬性有shadowExpire、shadowInactive、shadowMax、shadowMin、userPassword等;
top必要屬性是objectClass(可見,top和其它objectClass是繼承的關係)。

========================================

2016.02.03補充:今天在Ubuntu14.04系統上,使用migrationtools工具Linux系統用戶轉化爲ldif格式的文件時,發現導出的user僅僅具備accout、posixAccount、top這3個objectClass(已經最終測試過,可以完成正常登陸功能),而根據Ubuntu官方的OpenLDAP配置guide,建立新增的用戶具備inetOrgPerson、posixAccount、shadowAccount這3個objectClass。看來,在配置OpenLDAP時,需要注意的地方還是很多。

 

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