完整版的OpenLDAP搭建全過程

http://www.cnblogs.com/lemon-le/p/6266921.html

完整版的OpenLDAP搭建全過程

總結:

         先寫總結,再寫正文,嘿嘿嘿。這還是第一次認真的寫個文檔,寫個總結,哈哈。大概在一個月前,第一次聽說這個東西,完全沒有概念,剛開始的時候看理論的知識,看了幾次之後就沒看了,看不懂啊。太抽象了,真的太抽象了。然後就把它晾在一邊了,又過了一段時間,想了想,既然知道了這個東西,還是得好好學學,好好了解一下。整個過程是在虛擬機上測試完成,期間遇到了太多太多的坑,一個問題就是好幾天。這些只是基礎的一些東西,還得好好的看看官方文檔,嘿嘿嘿。

         最大的收穫就是整個學習過程中的解決問題的辦法和思想,理論的知識看不懂,沒關係,一定要一定要動手去做,有時候看書,覺得挺有理,但是不去動手做,永遠都學不會,當你動手做的過程中就慢慢的理解了這個東西是幹嘛的;還有一點就是不要怕難,就算一個東西再難,只要肯花時間,肯動手做,一定學的會;還有思考的方式,當你在一個問題是糾結一天了,幾天的時候,不要陷進去了,換個方向想想,另一種解決辦法馬上就出來了。

 

文檔信息

目        的:搭建一套完整的OpenLDAP系統,實現賬號的統一管理。

                    1:OpenLDAP服務端的搭建

                    2:PhpLDAPAdmin的搭建

                    3:OpenLDAP的打開日誌信息

                    4:OpenLDAP與migrationtools實現導入系統賬號的相關信息

                    5:OpenLDAP客戶端的配置

                    6OpenLDAP與SSH

                    7:OpenLDAP限制用戶登錄系統

                    8:OpenLDAP強制用戶一登錄系統更改密碼

                    9:OpenLDAP與系統賬號結合Samba

                   10:OpenLDAP的主從

                   11:OpenLDAP的雙主

                                     

        者:李   樂        

日        期:2017-01-09

聯繫方式:[email protected]

 

系統環境信息

操作系統:CentOS release 6.7

 

基礎的環境準備

關閉防火牆:/etc/init.d/iptables stop  && chkconfig iptables off

關閉NetworkManager:/etc/init.d/NetworkManager stop && chkconfig NetworkManager off

SeLinux設爲disabled:getenforce 是否爲Disabled,若不是,則修改:

         1:臨時的生效  setenforce 0,再getenforce的時候爲permissive

         2:修改配置文件,然後重啓  vim /etc/sysconfig/selinux 把SELINUX=disabled

yum源倉庫的配置

         1)mkdir /yum

         2)vim /etc/yum.repos.d/ll.repo

                  [local]

                  name = local

                  baseurl = file:///yum

                  gpgcheck = 0

                  enabled = 1

         3)掛載 mount /mnt/hgfs/軟件/CentOS-6.7-x86_64-bin-DVD1to2/CentOS-6.7-x86_64-bin-DVD1.iso /yum -o loop 

         4)yum clean all 清除緩存

         5)yum makecache 創建緩存

 

一:OpenLDAP服務器的搭建

 

1)安裝OpenLDAP的相關

         yum -y install openldap openldap-servers openldap-clients openldap-devel compat-openldap   其中compat-openldap這個包與主從有很大的關係

              

安裝完後,可以看到自動創建了ldap用戶:

      

             

可以通過rpm -qa |grep openldap查看安裝了哪些包:

      

 

2)OpenLDAP的相關配置文件信息

      /etc/openldap/slapd.conf:OpenLDAP的主配置文件,記錄根域信息,管理員名稱,密碼,日誌,權限等

      /etc/openldap/slapd.d/*:這下面是/etc/openldap/slapd.conf配置信息生成的文件,每修改一次配置信息,這裏的東西就要重新生成

      /etc/openldap/schema/*:OpenLDAP的schema存放的地方

      /var/lib/ldap/*:OpenLDAP的數據文件

      /usr/share/openldap-servers/slapd.conf.obsolete 模板配置文件

      /usr/share/openldap-servers/DB_CONFIG.example 模板數據庫配置文件

   

      OpenLDAP監聽的端口:

      默認監聽端口:389(明文數據傳輸)

      加密監聽端口:636(密文數據傳輸)

           

3)初始化OpenLDAP的配置

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

      cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf

          

4)修改配置文件

      首先,slappasswd生成密文密碼123456,拷貝這個到/etc/openldap/slapd.conf裏

      

 

     這裏的rootpw必須頂格寫,而且與後面的密碼文件用Tab鍵隔開                 

     

 

     修改對應的

     

 

    

            

5)重新生成配置文件信息文件

      先檢測/etc/openldap/slapd.conf是否有錯誤:slaptest -f /etc/openldap/slapd.conf

      

    這裏報錯是因爲在第三步後沒有重新生成配置文件,啓動slapd。而是直接修改配置文件去了。先啓動slapd:/etc/init.d/slapd restart

                

    

   這裏又報錯,這是因爲沒有給/var/lib/ldap授權,授權後chown -R ldap.ldap /var/lib/ldap/,再重啓slapd,/etc/init.d/slapd restart,可以看到成功的

    

 

  接着回到檢測/etc/openldap/slapd.conf是否有錯誤:slaptest -f /etc/openldap/slapd.conf

  

  可以看到沒問題,然後重新生成配置文件的配置信息:

  先刪除最先的配置文件生成的信息:rm -rf /etc/openldap/slapd.d/*

  重新生成:slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/

  查看是否生成的是自己修改的配置文件信息:cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif

  

 

 授權:chown -R ldap.ldap /etc/openldap/slapd.d/

 重啓:/etc/init.d/slapd restart

 

  

 到這裏爲止,OpenLDAP服務端基本上完成了,我們可以通過PhpLDAPAdmin來登錄看一下,那先得安裝PhpLDAPAdmin

 

二:PhpLDAPAdmin的搭建

 

1)安裝EPEL倉庫,鏡像裏沒有PhpLDAPAdmin這個的安裝包,所以得安裝EPEL倉庫

      rpm -ivh  http://mirrors.ukfast.co.uk/sites/dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm        

      yum clean all 

      yum makecache

 

2)安裝PhpLDAPAdmin

     yum install -y phpldapadmin

 

3)修改phpldapadmin的配置文件,訪問控制權限vim /etc/httpd/conf.d/phpldapadmin.conf,允許誰訪問

 

4)修改配置文件:vim /etc/phpldapadmin/config.php

      $servers->setValue('login','attr','dn');    這一行的註釋去掉

    //$servers->setValue('login','attr','uid');  這一行註釋掉

     

 

5)重啓httpd服務/etc/init.d/httpd restart

 

6)在瀏覽器輸入OpenLDAP服務端的IP        10.0.0.138/ldapadmin

     

                

7)登錄,輸入管理員的DN,也就是配置文件裏配置的

    

 

8)認證,報錯

 

 

 這是因爲在第一步搭建OpenLDAP服務端的時候,並沒有把管理員的賬號信息導入,編輯root.ldif,然後導入

 dn: dc=lemon,dc=com

 objectclass: dcObject

 objectclass: organization

 o: Yunzhi,Inc.

 dc: lemon

 

 dn: cn=Captain,dc=lemon,dc=com

 objectclass: organizationalRole

 cn: Captain

 這裏得注意每一個屬性: 後必須有空格,但是值的後面不能有任何空格

 然後導入:ldapadd -x -D "cn=Captain,dc=lemon,dc=com" -W -f root.ldif

 

 

 然後再通過瀏覽器去訪問的話:

 

                

  也可以通過命令行查詢:ldapsearch -x -b "cn=Captain,dc=lemon,dc=com"

 

 

 到這裏,PhpLDAPAdmin搭建完了,接下來,咱們得把日誌打開,這樣的話好排錯,嘿嘿嘿

                

三:OpenLDAP的打開日誌信息

 

1:現在配置文件里加上日誌行 ,這裏的日誌級別有很多種,-1的話會記錄很多日誌信息

     vim /etc/openldap/slapd.conf 加上loglevel -1

   

 

   這裏修改了配置文件,所有得重新生成配置文件的信息

    rm -rf /etc/openldap/slapd.d/*

    slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/

    chown -R ldap.ldap /etc/openldap/slapd.d/

 

2:在 vim /etc/rsyslog.conf加上

      local4.*                                                /var/log/slapd/slapd.log

      

     然後重啓/etc/init.d/rsyslog restart

 

3:創建日誌文件目錄,授權

      mkdir /var/log/slapd

      chmod 755 /var/log/slapd/

      chown ldap.ldap /var/log/slapd/

 

4:重啓slapd服務,/etc/init.d/slapd restart

5:就可以看到日誌信息了cat /var/log/slapd/slapd.log

 

OpenLDAP與migrationtools實現導入系統賬號的相關信息

 

1:安裝migrationtools

       yum -y install migrationtools

 

2:修改migrationtools的配置文件,在/usr/share/migrationtools/這個目錄下有很多migrationtools的文件

      vim /usr/share/migrationtools/migrate_common.ph 修改以下的兩個地方

      

 

 3:生成基礎的數據文件,可以自己修改這個生成的base.ldif文件,把不需要的去掉

      /usr/share/migrationtools/migrate_base.pl > base.ldif

     

 

4:把base.ldif導入OpenLDAP

 

      ldapadd -x -D "cn=Captain,dc=lemon,dc=com" -W -f base.ldif

 

      

      這裏會報錯,我們可以通過-c參數強制加入

       

      

導入之後,通過PhpLdapAdmin可以看到已經導入進來了:

  

 

 

 5:把系統的用戶生成ldif文件

        cd  /usr/share/migrationtools

       ./migrate_passwd.pl /etc/passwd passwd.ldif

       ./migrate_group.pl /etc/group group.ldif

      

      

   可以看到生成的文件,然後根據自己需要修改這兩個ldif文件:

   passwd.ldif只留一個test1測試用戶:

  

 

 group.ldif留對應的test1:

 

      

 把用戶導入進去:ldapadd -x -D "cn=Captain,dc=lemon,dc=com" -W -f passwd.ldif

 

 把組導進去:ldapadd -x -D "cn=Captain,dc=lemon,dc=com" -W -f group.ldif

 

 然後就可以看到:

 

 

在這裏就已經完成把系統的賬號屬性導入了OpenLDAP,然後就通過添加OpenLDAP用戶,來進行驗證,所以得先做好客戶端的設置

 

五:OpenLDAP客戶端的配置

 

1:停掉sssd服務  service sssd stop && chkconfig sssd off

 

2:安裝nslcd服務  yum install nss-pam-ldapd

 

3:修改vim /etc/nslcd.conf這個配置文件

     

 

4:修改vim /etc/pam_ldap.conf

     

    

 

5: vim /etc/pam.d/system-auth 修改,把sss行的註釋掉,改成ldap的

  

 

6:vim /etc/nsswitch.conf   修改nsswitch.conf配置文件,修改後,默認登錄的用戶通過本地配置文件進行查找並匹配。當匹配不到用戶信息時,會通過後端配置的LDAP認證服務進行匹配

 

7:vim /etc/sysconfig/authconfig   確保標記的已打開爲yes

     USESHADOW=yes 啓用密碼驗證

     USELDAPAUTH=yes 啓用OpenLDAP驗證

     USELOCAUTHORIZE=yes 啓用本地驗證

     USELDAP=yes  啓用LDAP認證協議

 

    

          

8:重啓nslcd服務 

     /etc/init.d/nslcd restart

 

9:驗證,先通過OpenLDAP增加一個用戶,在test1的基礎上,複製一個test2的條目

              

 

 

後面的根據自己的修改

 

 

可以看到已經成功的添加了test2的用戶,這是OpenLDAP添加的,在本地是沒有的,用cat /etc/passwd 看是沒有test2用戶的

測試:su - test2

 

/etc/pam.d/system-auth配置文件裏添加這一行:session     optional      pam_mkhomedir.so skel=/etc/skel/ umask=0022

 

重啓 /etc/init.d/nslcd restart

在進行測試:就可以了

 

查看系統用戶列表:

服務端查詢:ldapsearch -x -b "ou=People,dc=lemon,dc=com" |grep dn

客戶端查詢:ldapsearch -H ldap://10.0.0.138 -x -b "ou=People,dc=lemon,dc=com" |grep dn

 

查詢單個用戶:ldapsearch -x -b "uid=test1,ou=People,dc=lemon,dc=com" |grep dn

 

 

客戶端的配置到這裏ok啦。有賬號肯定要能通過ssh登錄系統

 

六:OpenLDAP與SSH

1:vim /etc/ssh/sshd_config 

 

2:vim /etc/pam.d/sshd  用於第一次登陸的賬戶自動創建家目錄

 

 

3:vim /etc/pam.d/password-auth

 

4:重啓sshd

 

 

七:OpenLDAP限制用戶登錄系統

在賬號中,不能讓每個用戶都能登錄系統,所以要限制用戶登錄

 

1:vim /etc/pam.d/sshd 在這裏加上pam_access.so模塊

 

 

2:vim /etc/security/access.conf  這裏限制test2用戶ssh登錄系統

 

測試:可以看到就只有test2登錄不上

 

八:OpenLDAP強制用戶一登錄系統更改密碼

 

1:修改配置文件

      在前面打開註釋

      moduleload ppolicy.la

      modulepath /usr/lib/openldap

      modulepath /usr/lib64/openldap

 

還要在database config前面加上這兩段

 

access to attrs=userPassword

        by self write

        by anonymous auth

        by dn="cn=Captain,dc=lemon,dc=com" write

        by * none

 

access to *

        by self write

        by dn="cn=Captain,dc=lemon,dc=com" write

        by * read

 

 

在文件的末尾添加:

overlay ppolicy

ppolicy_default cn=Captain,ou=pwpolicies,dc=lemon,dc=com

 

  

 

2:重新生成配置文件數據庫:

[root@lele openldap]# vim /etc/openldap/slapd.conf 

[root@lele openldap]# rm -rf /etc/openldap/slapd.d/*

[root@lele openldap]#  slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

config file testing succeeded

[root@lele openldap]# chown -R ldap.ldap /etc/openldap/slapd.d/

[root@lele openldap]# /etc/init.d/slapd restart

Stopping slapd:                                            [  OK  ]

Starting slapd:                                            [  OK  ]

 

 

可以通過配置文件的數據信息看到ppolicy模塊已經加進來了

cat /etc/openldap/slapd.d/cn\=config/cn\=module\{0\}.ldif

 

3:編輯

cat 1.ldif 

dn: ou=pwpolicies,dc=lemon,dc=com

objectClass: organizationalUnit

ou: pwpolicies

 

4:ldapadd -x -D "cn=Captain,dc=lemon,dc=com" -W -f 1.ldif

添加進去

可以在PhpLdapAdmin上看到:

 

5:添加cn=Captain,ou=pwpolicies,dc=lemon,dc=com這個的一些屬性值

[root@ll ~]# cat 2.ldif 

dn: cn=Captain,ou=pwpolicies,dc=lemon,dc=com

cn: Captain

objectClass: pwdPolicy

objectClass: person

pwdAllowUserChange: TRUE            

pwdAttribute: userPassword

pwdExpireWarning: 259200

pwdFailureCountInterval: 0

pwdGraceAuthNLimit: 5

pwdInHistory: 5

pwdLockout: TRUE

pwdLockoutDuration: 300

pwdMaxAge: 2592000

pwdMaxFailure: 5

pwdMinAge: 0

pwdMinLength: 8

pwdMustChange: TRUE

pwdSafeModify: TRUE

sn: dummy value

 

把屬性值添加進去

在PhpLdapAdmin可以看到:

 

 

6:在vim /etc/pam_ldap.conf中的末尾添加:使得客戶端能識別服務端的密碼策略

     pam_password md5

     bind_policy soft

     pam_lookup_policy yes

     pam_password clear_remove_old

 

7:重啓nslcd

     /etc/init.d/nslcd restart

 

8:測試

修改用戶的屬性,用test3做測試

[root@ll ~]# cat modify.ldif 

dn: uid=test3,ou=people,dc=lemon,dc=com

changetype: modify

replace: pwdReset

pwdReset: TRUE

 

ldapmodify -x -D "cn=Captain,dc=le,dc=com" -W -f modify.ldif  導入

 

ldapwhoami -x -D uid=test3,ou=people,dc=lemon,dc=com -W -e ppolicy -v   查看test3用戶的策略信息

 

這裏顯示輸入test3 的原始密碼,然後輸入新修改的密碼

 

 當修改完後,就沒有必須改變密碼的那一句話了

 

 這裏可以啦

 

九:OpenLDAP與系統賬號結合Samba

       默認的Samba服務器支持本地系統用戶(smbpasswd添加後)訪問Samba資源,不支持OpenLDAP服務器賬號訪問Samba共享資源,配置完後,OpenLDAP每新增一個用戶,就自動支持Samba,就可以用這個賬號直接訪問Samba,不需要存在於本地用戶,不用smbpasswd用戶

 

1:安裝samba

       yum -y install samba

2:把Samba.schema文件拷貝到LDAP的schema目錄下,把原來的覆蓋掉

       cp /usr/share/doc/samba-3.6.23/LDAP/samba.schema /etc/openldap/schema/

3:修改配置文件vim /etc/openldap/slapd.conf

      在include的地方,加上Samba的schema

      

 3:修改了配置文件,就有重新生成配置文件數據

      rm -rf /etc/openldap/slapd.d/*

      slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/

      config file testing succeeded

      chown -R ldap.ldap /etc/openldap/slapd.d/

      /etc/init.d/slapd restart

 

4:修改Samba的配置文件

      添加:

      security = user

        passdb backend = ldapsam:ldap://10.0.0.138

        ldap suffix = "dc=lemon,dc=com"

        ldap group suffix = "cn=group"

        ldap user suffix = "ou=people"

        ldap admin dn = "cn=Captain,dc=lemon,dc=com"

        ldap delete dn = no

        pam password change = yes

        ldap passwd sync = yes

        ldap ssl = no

 

 

 對應這裏的

         

 

在最後的時候添加共享的文件:

[public]

comment = Public Stuff

path = /tmp/lile

public = yes

writable = yes

printable = no

 

5:創建共享文件夾,並且授權

     mkdir /tmp/lile

     chmod 777 /tmp/lile/

 

6:把OpenLDAP的密碼傳給Samba,smbpasswd -w 123456  這裏的密碼是OpenLDAP的管理員密碼       

       

     若不加,會報錯:

      

  

7:重啓smb

      /etc/init.d/smb restart

      /etc/init.d/nmb restart

 

8:  Samba開通之後,可以看到這裏的開關也打開了

 

 

 9:測試

先把系統用戶test1用smbpasswd -a test1 加到Samba的用戶下,就可以看到:

test1用戶下多了Samba的特性,原來是沒有的

 

然後基於test1,在PhpLdapAdmin添加test2用戶,不用smbpasswd,就只是OpenLDAP用戶,複製的時候一定要重新改一下這裏的密碼,要不然登不進,

 

 

 

 然後,就可以用windos去訪問了,這裏有一個概念就是OpenLDAP添加了的用戶,不要再用smbpasswd去添加了,可以直接登錄Samba

 

 

 

十:OpenLDAP的主從

 

1:做主從和雙主的時候,一定要確認安裝了 compat-openldap這個包

2:在主上的配置文件   10.0.0.138

     備份原來的配置文件:cp /etc/openldap/slapd.conf /etc/openldap/slapd.bak

     先停掉服務 /etc/init.d/slapd stop

     vim /etc/openldap/slapd.conf 修改配置文件

             

     添加       index entryCSN,entryUUID                eq

     

 

     這裏的註釋去掉:

     

           

     

 

     在文件的最後添加:

     overlay syncprov                      後端工作再overlay模式

     syncprov-checkpoint 100 10   當滿足修改100個條目或者10分鐘的條件時主動以推的方式執行

     syncprov-sessionlog 100        會話日誌條目的最大數量

 

     

             

     然後重新生成配置文件的數據文件:

     rm -rf /etc/openldap/slapd.d/*

     slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/

     chown -R ldap.ldap /etc/openldap/slapd.conf 

     chown -R ldap.ldap /etc/openldap/slapd.d

     /etc/init.d/slapd restart

               

3:導出主的數據文件 ldapsearch -x -b 'dc=lemon,dc=com' > root.ldif,拷貝到從上scp    scp root.ldif 10.0.0.140:~/

4:把主的配置文件slapd.conf 拷貝到從10.0.0.140上 用scp /etc/openldap/slapd.conf 10.0.0.140:~/

5:從上從主上拷貝了配置文件,

去掉

      overlay syncprov

      syncprov-checkpoint 100 10

      syncprov-sessionlog 100

然後再加上

                

syncrepl rid=003

provider=ldap://10.0.0.138:389/

type=refreshOnly

retry="60 10 600 +"                                             嘗試時間

interval=00:00:00:10                                            設置同步更新時間(日:時:分:秒)

searchbase="dc=lemon,dc=com"                    

scope=sub                                                           匹配根域所有條目

schemachecking=off                                          同步更新時是否開啓schema語法檢測

bindmethod=simple                                            同步驗證模式爲簡單模式(即明文)

binddn="cn=Captain,dc=lemon,dc=com"        使用Captain用戶讀取目錄樹信息

attrs="*,+"                                                             同步所有屬性信息

credentials=123456                                             管理員密碼

 

 重新生成數據配置文件

  rm -rf /etc/openldap/slapd.d/*

  slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/

  chown -R ldap.ldap /etc/openldap/slapd.conf 

  chown -R ldap.ldap /etc/openldap/slapd.d

  /etc/init.d/slapd restart

 

6:測試

在主的10.0.0.138上添加一個test7的用戶,在從上刷新一下,是同步到的

 

 

 十一:OpenLDAP的雙主

 

在主從的基礎上,修改配置,這是主的

 

 

serverID 2

overlay syncprov

syncrepl rid=001

provider=ldap://10.0.0.140

type=refreshAndPersist

searchbase="dc=lemon,dc=com"

schemachecking=simple

binddn="cn=Captain,dc=lemon,dc=com"

credentials=123456

retry="60 +"

mirrormode on

 

 

 

這是從的

 

serverID 1

overlay syncprov

syncrepl rid=001

provider=ldap://10.0.0.138:389/

retry="60 10 600 +"

searchbase="dc=lemon,dc=com"

schemachecking=off

bindmethod=simple

binddn="cn=Captain,dc=lemon,dc=com"

credentials=123456

mirrormode on

 

 

測試:在兩臺機上分別新建一個用戶,看是否在對方能刷新到,主從與雙主都只是備份的關係,若一臺掛了,立即切換到另一臺,則需做高可用和負載均衡

 


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