ldap服務構建過程+phpldapadmin構建使用



基於centos 6.8系統:

1. 安裝openldap

yum install -y openldap openldap-servers openldap-clients openldap-devel compat-openldap

2. 安裝Berkeley DB

yum install -y db4 db4-utils

openldap使用Berkeley DB存儲數據。

3. 安裝nginx, php (php要安裝5.4的版本,否則會有不兼容情況)

這裏php還需要安裝對ldap支持的模塊:參考這篇文章:centos安裝php-ldap擴展,總結 https://blog.csdn.net/gpxxgpxx/article/details/60135356

這個用ansible自動安裝

nginx的配置文件:

    server {
            listen  8099;
            server_name ldap.anmav.cn;

            location / {
                root   /home/data/html/phpldapadmin;
                index  index.php index.html index.htm;
            }

            #error_page   500 502 503 504  /50x.html;
            #location = /50x.html {
            #    root   /home/www//html;
            #}

           # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            location ~ .php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /home/data/html/phpldapadmin/$fastcgi_script_name;
                include        fastcgi_params;
            }

           error_log           logs/phpldapadmin_error.log;
           access_log          logs/phpldapadmin_access.log main;

    }

4. 下載phpldapadmin

cd /home/workspace
wget http://sourceforge.net/projects/phpldapadmin/files/phpldapadmin-php5/1.2.3/phpldapadmin-1.2.3.zip/download
unzip phpldapadmin-1.2.3.zip
cp -R phpldapadmin-1.2.3 /var/www/html/phpldapadmin
cd /home/data/html/phpldapadmin/config
cp config.php.example config.php


5. 配置openldap
安裝完openldap後我們看到在/etc/openldap目錄下有certs、schema、slapd.d三個目錄和ldap.conf一個文件。
1)certs目錄用於存放TLS認證的CA證書等。
2)(該目錄用於舊的配置方法,已廢棄)schema目錄下有.schema文件和.ldif文件。
3)slapd.d目錄是openldap2.4.x的配置目錄。/etc/openldap/slapd.d/cn=config存放數據庫的配置文件,/etc/openldap/slapd.d/cn=config/cn=schema存放.ldif文件。 注意: /etc/openldap/slapd.d/cn=config.ldif會被/etc/openldap/slapd.d/cn=config/*裏面的配置文件覆蓋掉
4)ldap.conf是openldap client的配置文件。

    5.1首先生成管理員密碼:

        slappasswd

        輸完兩遍密碼後會生成一個加密散列字符串,保存下來。
        如:
        [root@gitlab openldap]# slappasswd
        New password:
        Re-enter new password:
        {SSHA}kk20rdNChGiPTP+Xoh4bdKZKrS+46sYM


    5.2 編輯數據庫配置文件,設置域名:
        vim /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif

        設置目錄樹後綴(域名),作用是定義根的名字。
        找到:

        olcSuffix: dc=my-domain,dc=com

        修改dc:
        olcSuffix: dc=ldap,dc=anmav,dc=cn

        設置管理員DN。
        PS:LDAP管理員cn默認爲Manager,可以改成自己需要的名字。

        找到:

        olcRootDN: cn=Manager,dc=my-domain,dc=com

        修改dc:

        olcRootDN: cn=anmavadmin,dc=ldap,dc=anmav,dc=cn


        設置管理員密碼。在olcDatabase={2}bdb.ldif最後添加:

        olcRootPW: {SSHA}kk20rdNChGiPTP+Xoh4bdKZKrS+46sYM

    5.3 指定監控權限:
        vim /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif

        找到:

        olcAccess: {0}to *  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=exter
         nal,cn=auth" read  by dn.base="cn=manager,dc=my-domain,dc=com" read  by * n
         one


        修改爲:

        olcAccess: {0}to *  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=exter
         nal,cn=auth" read  by dn.base="cn=anmavadmin,dc=ldap,dc=anmav,dc=cn" read  by * n
         one


    5.4 設置Database Cache:

        設置Database Cache:

        cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

        設置權限:

        chown -R ldap:ldap /var/lib/ldap/

        測試配置文件是否有錯:

        slaptest -u

        提示:

        config file testing succeeded

        測試通過。

        啓動slapd服務:

        service slapd start


#上面的ldif文件是推薦通過ldapmodify的方式修改的
修改方式可以參照這篇文章 https://www.server-world.info/en/note?os=CentOS_7&p=openldap&f=1



6. 配置phpldapadmin

    vim /home/data/html/phpldapadmin/config/config.php

    找到"Define your LDAP servers in this section"區塊。

    將:

    $servers->setValue('server','host','127.0.0.1');
    $servers->setValue('server','port',389);

    前的註釋去掉。

    將:

    $servers->setValue('server','base',array(''));

    修改爲:

    $servers->setValue('server','base',array('dc=ldap,dc=anmav,dc=cn'));

    在array中輸入設置的olcSuffix。

    將:

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

    前的註釋去掉。


    chown www. -R /home/data/html/phpldapadmin

    瀏覽器訪問:http://ldap.anamv.cn:8099/
    使用RootDN和RootPW登陸:
    用戶名:cn=anmavadmin,dc=ldap,dc=anmav,dc=cn
    密碼: 自己設置的密碼

    此時左側目錄樹會顯示:This base cannot be created with PLA.


    添加根節點:

    vim base.ldif
    dn: dc=ldap,dc=anmav,dc=cn
    o: anmav
    objectclass: dcObject
    objectclass: organization

    添加到ldap數據庫:

    ldapadd -f base.ldif -x -D cn=anmavadmin,dc=ldap,dc=anmav,dc=cn -W

    #-f 指定文件,相當於mysql的.sql類文件
    #-x 簡單用戶認證
    #-D 綁定的dn
    #-W 提示輸入綁定dn的密碼

    輸入密碼後會提示:

    adding new entry "dc=ldap,dc=anmav,dc=cn"

    在瀏覽器裏刷新一下條目就會顯示出根節點。


7. 剩下來就可以登錄phpldapadmin進行條目的添加了

也可以使用openldap的LAM工具進行管理


#注意事項:

#如果ldap裏面沒有對應的objectClass,可以進行導入,centos 7下yum安裝可能需要手動導入,centos6下,在vim /etc/openldap/slapd.d/cn\=config.ldif裏面配置了olcConfigFile: /usr/share/openldap-servers/slapd.conf.obsolete, 而slapd.conf.obsolete裏面include這些ldif了,那麼系統會自動導入進去的

cd /etc/openldap/schema/
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f cosine.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f nis.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f collective.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f corba.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f core.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f duaconf.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f dyngroup.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f inetorgperson.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f java.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f misc.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f openldap.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f pmi.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f ppolicy.ldif


#參考文檔:

LDAP服務原理詳解(原創)  http://czmmiao.iteye.com/blog/1561597
CentOS Linux安裝OpenLDAP服務器    http://www.live-in.org/archives/1731.html  (安裝過程也是根據這篇文章做的)
Centos7 Ldap統一認證部署   http://blog.chinaunix.net/uid-21926461-id-5676013.html



概念:

olc : on-line configuration 在線配置
objectClass:表示使用什麼對象類,這個對象類可以自定義的,比如說inetOrgPerson,olcDatabaseConfig等
olcAccess: acl訪問控制列表


openldap相關縮寫:

dn - distinguished name(區別名,主鍵)
o - organization(組織-公司)
ou - organization unit(組織單元-部門)
c - countryName(國家)
dc - domainComponent(域名)
sn - sure name(真實名稱)
cn - common name(常用名稱)


openldap組件:

slapd:主LDAP服務器
slurpd:負責與複製LDAP服務器保持同步的服務器
對網絡上的目錄進行操作的客戶機程序。下面這兩個程序是一對兒:
ldapadd:打開一個到LDAP服務器的連接,綁定、修改或增加條目
ldapsearch:打開一個到LDAP服務器的連接,綁定並使用指定的參數進行搜索
對本地系統上的數據庫進行操作的幾個程序:
slapadd:將以LDAP目錄交換格式(LDIF)指定的條目添加到LDAP數據庫中
slapcat:打開LDAP數據庫,並將對應的條目輸出爲LDIF格式.


相關命令:

slapd -V      查看版本
slappasswd  生產加密密碼
slaptest -u   測試ldap配置文件是否有錯
ldapadd   man ldapadd 或者ldapadd -h   增加ldap條目
    例子:     ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
            ldapadd -f base.ldif -x -D "cn=anmavadmin,dc=ldap,dc=anmav,dc=cn" -W
ldapmodify  修改ldap條目
    例子:    ldapmodify -Y EXTERNAL -H ldapi:/// -f xxx.ldif
            ldapmodify -f changebase.ldif -D "cn=admin,dc=ldap,dc=myjason,dc=org" -W
ldapdelete  刪除ldap條目
    例子:    ldapdelete -x -D "cn=admin,dc=netsafe,dc=qa,dc=net" -W "uid=seabird,ou=People,dc=netsafe,dc=qa,dc=net"
    或者:    vim delete.ldif
            內容爲:
            dn: dc=ldap,dc=myjason,dc=org
            changetype: delete
            然後執行:
            ldapmodify -Q -Y EXTERNAL -H ldapi:///  -f delete.ldif
            
ldapsearch  搜索ldap條目
    例子:     ldapsearch -x -b 'dc=ldap,dc=anmav,dc=cn'
            ldapsearch -LLL -W -x -H ldap://192.168.3.21 -D "cn=anmavadmin,dc=ldap,dc=anmav,dc=cn" -b "dc=dev,dc=com" "(uid=*)"
slapcat 查看ldap數據庫條目,輸出爲ldif格式
    例子:    slapcat -b "dc=ldap,dc=anmav,dc=cn"




8、 自定義一個添加一個schema(添加自定義項)

需要給ldap用戶添加mobile和sex這個屬性,但是發現暫時上面只有mobile,沒有sex。所以要麼自定義一個schema,然後用繼承,要麼在現有的裏面添加

 1)、新建自定義schema

     cd /etc/openldap/schema
     vi localperson.schema

attributetype ( 2.16.840.1.113730.3.1.930
  NAME 'userType'
  DESC 'normalperson,doctor,citizen'
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
  SINGLE-VALUE )
attributetype ( 2.16.840.1.113730.3.1.931
  NAME 'idType'
  DESC 'person id cardtype'
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.932
  NAME 'idNumber'
  DESC 'person id cardnumber'
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype (2.16.840.1.113730.3.1.933
  NAME 'age'
  DESC 'person age'
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.934
  NAME 'sex'
  DESC 'person id cardnumber'
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.935
  NAME 'userRole'
  DESC 'user role '
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.936
  NAME 'firstLogin'
  DESC 'whether firstlogin flag '
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.937
  NAME 'securityQuestion'
  DESC 'SecurityQuestion'
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.938
  NAME 'securityAnswer'
  DESC 'SecurityAnswer'
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
# inetOrgPerson
# The inetOrgPerson represents people who are associatedwith an
# organization in some way. It is a structural class and is derived
objectclass ( 111111.3.2.8
    NAME 'localPerson'
    DESC 'Local py Person attributes'
    SUP person
    STRUCTURAL
    MAY ( uid $ userType $ idType $ idNumber $ age $ sex $ title $ postalAddress $ postalCode $ displayName $ mail $ mobile $ userRole$firstLogin $ securityQuestion $ securityAnswer ) )


vim /etc/openldap/slapd.conf

加入include                /etc/openldap/schema/localperson.schema
在include         /etc/openldap/schema/inetorgperson.schema前面


還需要修改/etc/openldap/schema/inetorgperson.schema,讓其繼承localperson的objectclass

vim /etc/openldap/schema/inetorgperson.schema

修改
objectclass     ( 2.16.840.1.113730.3.2.2
    NAME 'inetOrgPerson'
        DESC 'RFC2798: Internet Organizational Person'
    SUP organizationalPerson
    STRUCTURAL
        MAY (
                audio $ businessCategory $ carLicense $ departmentNumber $
                displayName $ employeeNumber $ employeeType $ givenName $
                homePhone $ homePostalAddress $ initials $ jpegPhoto $
                labeledURI $ mail $ manager $ mobile $ o $ pager $
                photo $ roomNumber $ secretary $ uid $ userCertificate $
                x500uniqueIdentifier $ preferredLanguage $
                userSMIMECertificate $ userPKCS12 )
        )

改成

objectclass     ( 2.16.840.1.113730.3.2.2
    NAME 'inetOrgPerson'
        DESC 'RFC2798: Internet Organizational Person'
    SUP ( organizationalPerson $ localPerson )
    STRUCTURAL
        MAY (
                audio $ businessCategory $ carLicense $ departmentNumber $
                displayName $ employeeNumber $ employeeType $ givenName $
                homePhone $ homePostalAddress $ initials $ jpegPhoto $
                labeledURI $ mail $ manager $ mobile $ o $ pager $
                photo $ roomNumber $ secretary $ uid $ userCertificate $
                x500uniqueIdentifier $ preferredLanguage $
                userSMIMECertificate $ userPKCS12 )
        )

然後用slaptest -u,測試是否有問題

如果沒有問題再重啓service slapd restart

但是這裏面發現其實是有問題的,有可能會抱找不到localPerson這個objectClass,這個具體原因有待去查明


所以這裏我使用了第二種方法,直接修改inetOrgPerson,這個objecclass,添加一個sex屬性

    2)、 添加sex屬性

    vim /etc/openldap/schema/inetorgperson.schema

    添加
attributetype ( 2.16.840.1.113730.3.1.934
  NAME 'sex'
  DESC 'person sex'
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

  說明:
  1、 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15  這個數字對應這個Directory String類型,詳細可參照http://ldap.anmav.cn:8099/htdocs/cmd.php?cmd=schema&server_id=1&view=objectclasses&viewvalue=inetOrgPerson 選擇“語法規則”
  2、 2.16.840.1.113730.3.1.934這個是個OID,是每個屬性唯一的id號,不能重複



   再修改
objectclass     ( 2.16.840.1.113730.3.2.2
    NAME 'inetOrgPerson'
        DESC 'RFC2798: Internet Organizational Person'
    SUP organizationalPerson
    STRUCTURAL
        MAY (
                audio $ businessCategory $ carLicense $ departmentNumber $
                displayName $ employeeNumber $ employeeType $ givenName $
                homePhone $ homePostalAddress $ initials $ jpegPhoto $
                labeledURI $ mail $ manager $ mobile $ o $ pager $
                photo $ roomNumber $ secretary $ uid $ userCertificate $
                x500uniqueIdentifier $ preferredLanguage $
                userSMIMECertificate $ userPKCS12 )
        )


    添加個sex
objectclass     ( 2.16.840.1.113730.3.2.2
    NAME 'inetOrgPerson'
        DESC 'RFC2798: Internet Organizational Person'
    SUP organizationalPerson
    STRUCTURAL
        MAY (
                audio $ businessCategory $ carLicense $ departmentNumber $
                displayName $ sex $ employeeNumber $ employeeType $ givenName $
                homePhone $ homePostalAddress $ initials $ jpegPhoto $
                labeledURI $ mail $ manager $ mobile $ o $ pager $
                photo $ roomNumber $ secretary $ uid $ userCertificate $
                x500uniqueIdentifier $ preferredLanguage $
                userSMIMECertificate $ userPKCS12 )
        )


    然後vim /etc/openldap/slapd.conf

    #include                /etc/openldap/schema/localperson.schema

    再用slaptest -u,測試是否有問題, 再重啓service slapd restart


    說明:
    1、 SUP是繼承的意思,表示inetOrgPerson繼承了organizationalPerson的所有屬性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章