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