天天看點

完整版的OpenLDAP搭建全過程

完整版的OpenLDAP搭建全過程

總結:

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

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

文檔資訊

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

1:OpenLDAP服務端的搭建

2:PhpLDAPAdmin的搭建

3:OpenLDAP的打開日志資訊

4:OpenLDAP與migrationtools實作導入系統賬号的相關資訊

5:OpenLDAP用戶端的配置

6:OpenLDAP與SSH

7:OpenLDAP限制使用者登入系統

8:OpenLDAP強制使用者一登入系統更改密碼

9:OpenLDAP與系統賬号結合Samba

10:OpenLDAP的主從

11:OpenLDAP的雙主

系統環境資訊

作業系統: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

s e r v e r s − > s e t V a l u e ( ′ l o g i n ′ , ′ a t t r ′ , ′ d n ′ ) ; 這 一 行 的 注 釋 去 掉 / / servers->setValue('login','attr','dn'); 這一行的注釋去掉 // 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:重新生成配置檔案資料庫:

[[email protected] openldap]# vim /etc/openldap/slapd.conf

[[email protected] openldap]# rm -rf /etc/openldap/slapd.d/*

[[email protected] openldap]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

config file testing succeeded

[[email protected] openldap]# chown -R ldap.ldap /etc/openldap/slapd.d/

[[email protected] 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這個的一些屬性值

[[email protected] ~]# 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做測試

[[email protected] ~]# 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 (這裡的格式一定要注意,中間這一段要用Tab鍵Tab一下,如果不的話會報錯如下)

  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 (這裡的格式一定要注意,中間這一段要用Tab鍵Tab一下)

  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

測試:在兩台機上分别建立一個使用者,看是否在對方能重新整理到,主從與雙主都隻是備份的關系,若一台挂了,立即切換到另一台,則需做高可用和負載均衡