各類度娘!各類歌哥!網上教程良莠不齊,歷時1天,終於完成,不敢獨享,遂,總結分享之,有問題能夠留言,知無不言。。。開始吧linux
Note:數據庫
本次配置的服務器環境是<redhat enterprise linux 6.5>, Centos/Suse相似, Debian/Ubuntu安裝包可能略有不一樣,可是大體過程應該類似。vim
PS:LDAP 是C/S結構的,因此接下來咱們要設計好哪臺機器上搭建LDAP Server,剩下的機器上安裝LDAP Client.bash
LDAP Server Machine:192.168.1.10 (此IP爲機器的實際IP,本身配置時根據實際狀況而定)服務器
LDAP Client Machine:192.168.1.11 (此IP爲機器的實際IP,本身配置時根據實際狀況而定)session
LDAP Client Machine N...... (其他N多的client機器不一一列舉,完成一個client配置後,其餘機器Clone整個過程便可 :-))數據結構
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××app
1.LDAP Server Setup:
a.安裝LDAP服務(使用YUM本地光盤安裝)dom
rpm -qa | grep openldapssh
查看是否包含這四個包:
openldap-devel-2.4.23-26.el6.x86_64
openldap-clients-2.4.23-26.el6.x86_64
openldap-2.4.23-26.el6.x86_64
openldap-servers-2.4.23-26.el6.x86_64
若不包含,那就須要安裝了。保證你機器能連外網,而後運行以下命令:
# yum install openldap-* -y
會提示安裝如下幾個必須的包,另外鑑於依賴,可能還會安裝一些其餘的包,因此咱們選擇-y:
openldap-devel-2.4.23-26.el6.x86_64
openldap-clients-2.4.23-26.el6.x86_64
openldap-2.4.23-26.el6.x86_64
openldap-servers-2.4.23-26.el6.x86_64
....
OpenLDAP 使用Berkely-DB來做爲數據庫存儲信息,咱們能夠去官網下載解壓到本地安裝。But,用Yum的話,應該會幫咱們作好這一切事情。 咱們只要在安裝完後檢查一下是否安裝了db4*相關的rpm包就能夠了。If true,那恭喜,咱們能夠進行下一步了。If not,請用yum命令安裝。
查看rpm安裝包的命令:rpm -qa | grep db4
b.拷貝LDAP配置文件到LDAP目錄(redhat6.3):
# cd /etc/openldap/
# cp /usr/share/openldap-servers/slapd.conf.obsolete slapd.conf
Note: redhat6.0或6.1版本配置文件在主目錄有備份:
# cd /etc/openldap/
# cp slapd.conf.bak slapd.conf
c.建立LDAP管理員密碼:
# slappasswd
這裏我輸入的密碼是redhat,輸入完密碼後,返回一串密文,先保存到剪貼板,以後要複製到LDAP配置文件中使用:
{SSHA}pfAJm+JJa4ec2y8GjTc8uMEJpoR5YKLy
d.編譯配置文件
# vi /etc/openldap/slapd.conf
....
# enable server status monitoring (cn=monitor)
database monitor
access to *
by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
by dn.exact="cn=admin,dc=test,dc=com" read
by * none
#######################################################################
# database definitions
#######################################################################
database bdb
suffix "dc=test,dc=com"
checkpoint 1024 15
rootdn "cn=admin,dc=test,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoided. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw secret
# rootpw {crypt}ijFYNcSNctBYg
rootpw {SSHA}pfAJm+JJa4ec2y8GjTc8uMEJpoR5YKMn
.......
保存退出。
e.拷貝DB_CONFIG文件到指定目錄
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
刪除默認/etc/openldap/slapd.d下面的全部內容,不然後面在使用ldapadd的時候會報錯:
# rm -rf /etc/openldap/slapd.d/*
f.啓動LDAP的slapd服務,並設置自啓動:
# service slapd restart
# chkconfig slapd on
賦予配置目錄相應權限:
# chown -R ldap:ldap /var/lib/ldap
# chown -R ldap:ldap /etc/openldap/
g.測試並生成配置文件:
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
返回config file testing succeeded,則配置成功。
賦予生成的配置文件予權限並重啓:
# chown -R ldap:ldap /etc/openldap/slapd.d
# service slapd restart
h.建立一個帳號,以備客戶端測試登錄
# useradd ldapuser1
# passwd ldapuser1
至此,這些用戶僅僅是系統上存在的用戶(存儲在/etc/passwd和/etc/shadow上),並無在LDAP數據庫裏,因此要把這些用戶導入到LDAP裏面去。但LDAP只能識別特定格式的文件 即後綴爲ldif的文件(也是文本文件),因此不能直接使用/etc/passwd和/etc/shadow。 須要migrationtools這個工具把這兩個文件轉變成LDAP能識別的文件。
i.安裝配置migrationtools
# yum install migrationtools -y
j.進入migrationtool配置目錄
# cd /usr/share/migrationtools/
首先編輯migrate_common.ph
# vi migrate_common.ph
...
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "test.com";
# Default base
$DEFAULT_BASE = "dc=test,dc=com";
.......
保存退出。:-)
K.下面利用pl腳本將/etc/passwd 和/etc/shadow生成LDAP能讀懂的文件格式,保存在/tmp/下
# ./migrate_base.pl > /tmp/base.ldif
# ./migrate_passwd.pl /etc/passwd > /tmp/passwd.ldif
# ./migrate_group.pl /etc/group > /tmp/group.ldif
L.下面就要把這三個文件導入到LDAP,這樣LDAP的數據庫裏就有了咱們想要的用戶
# ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f /tmp/base.ldif
# ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f /tmp/passwd.ldif
# ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f /tmp/group.ldif
過程若無報錯,則LDAP服務端配置完畢
M.重啓slapd完成配置
# service slapd restart
N.現安裝NFS,並把ldapuser1的家目錄作NFS共享.
默認REDHAT已安裝
# yum install nfs* -y
配置NFS共享:
# vi /etc/exports
--------------
/home/ldapuser1 *(rw,no_root_squash)
--------------
重啓nfs服務:
# service rpcbind restart
# service nfs restart
PS.本地須要作ldap控制的帳號都要導入到LDAP DB中,不然客戶端配置沒法正常識別登陸。
2.LDAP Client Setup:
a.安裝LDAP client認證須要的pam包:
yum install nss-pam-ldapd pam_ldap -y
安裝完成後,配置ldap 客戶端配置文件:
vim /etc/openldap/ldap.conf
添加
BASE:dc=test,dc=com
URL:192.168.1.10 --->此處爲LDAP Server IP
b.配置客戶端,是機器使用LDAP進行帳戶驗證:
LANG=C authconfig-tui
vim /etc/pam.d/system-auth 註釋掉建立家目錄,重啓sssd服務。
c. vim /etc/sssd/sssd.conf
添加enumerate=true,(因該不是必須的,可是加上爲妙)
d. service sssd restart 並重啓服務。
e.進行客戶端測試,看可否讀到LDAP user 相關信息
getent passwd |grep ldapuser1
f.編輯系統認證文件,保證使用LDAP來認證:
vim /etc/pam.d/system-auth update: pam_sss.so --> pam_ldap.so 能夠實現用戶su之間切換
******Please Makre sure all this updated*****************************************************************
其中/etc/pam.d/
vim /etc/pam.d/system-auth
vim /etc/pam.d/password-auth
auth required pam_env.so
auth sufficient pam_fprintd.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth sufficient pam_ldap.so
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_ldap.so
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3 type=
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
password sufficient pam_ldap.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=ok default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
session optional pam_ldap.so
配置文件是RHEL6實現用戶名驗證機制配置文件,大多數服務的配置將都會調用它們。
vim /etc/pam.d/system-auth update: pam_sss --> pam_ldap 能夠實現用戶su之間切換
*********************************************************************************************************
service nslcd restart
服務重啓以後因該就可使用LDAP 服務了。
能夠 su ldapsuer1或者ssh ldapuser1@xxxxx來使用。
客戶端配置完成!
3. LDAP數據庫相關增刪查改操做:
操做LDAP的方式有不少,下面以bash下用openldap-clients 套件提供的工具來進行。
一、初始化數據
這一步一般是由特定的應用程序根據其自身使用的須要建立的。包括兩部分的內容:
a、建立.schema文件,該文件定義了後面ldap 中存放對象的類型和屬性,這已經在上面sldapd.conf文件中定義;
b、初始化數據結構,其結構必須由上面的.schema文件已經定義的,並由應用程序讀取和使用。
初始化文件一般爲.ldif 結尾,稱爲LDIF數據交換格式。這種格式是行界定、冒號分隔的屬性-值對。例如:
引用
dn: dc=ldapuser1,ou=People,dc=test,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
....
導入時,執行:
# ldapadd -x -h 192.168.1.10 -D 'cn=admin,dc=test,dc=com' -W -f info.ldif
ldapadd 命令各參數含義以下:
-x 爲使用簡單密碼驗證方式
-D 指定管理員DN(與slapd.conf中一致)
-W 爲管理員密碼,可使用-w password 直接輸入密碼
-f 爲初始化數據LDIF的文件名
-h 爲操做的服務器IP地址
二、搜索操做
LDAP是讀優化數據庫,所以,讀的速度很快,也很經常使用。但與關係數據庫不一樣,其以樹結構形式讀取數據,若不添加過濾,會顯示匹配節點下全部節點的內容。若以ldif 的形式表達,剛開始可能不太習慣。
# ldapsearch -x -b 'dc=test,dc=com'
首先要留意的是,ldapsearch 不須要提供驗證信息。由於正如前面提到的,LDAP 默認供任何人可讀。
-b 後面定義搜索節點位置,即從該節點往其子節點進行搜索
三、身份驗證
修改或添加內容需進行用戶驗證,可經過下面的命令確認驗證信息:
# ldapwhoami -x -D 'cn=ldapuser1,dc=test,dc=com' -w 'yourpasswd'
dn:cn=admin,dc=test,dc=com
Result: Success (0)
四、修改操做
修改內容一般由LDIF 文件提供。所以,可先用ldapsearch 導出節點內容:
# ldapsearch -x -LLL -b 'dc=test,dc=com'
-LLL 表示不輸出註釋內容,以便後續從新導入。
其實也可使用文件進行批量修改,咱們只要把須要修改信息寫入文件便可,好比:
dn: uid=ldapuser1,ou=People,dc=test,dc=com
changetype: modify
replace: uidNumber
uidNumber: 1000
把以上內容寫入test.ldif中,運行以下命令:
ldapmodify -x -D "cn=admin,dc=test,dc=com" -w yourpasswd -f test.ldif
a、ldapadd 與ldapmodify -a 做用相同
b、若是在添加或修改時,報Naming violation等錯誤,則說明添加或修改的內容不符合schema中定義的對象屬性規範,需修改後才能從新操做。
五、刪除操做
刪除時,給出DN便可:
# ldapdelete -x -D 'cn=admin,dc=test,dc=com' -w yourpasswd -r 'dc=test,dc=com'
-r 表示以遞歸模式刪除,即刪除該節點下面的全部子節點。
OK,到這裏基本上完整的LDAP配置和使用方法已經比較完整了,你們能夠按照步驟自由的去嘗試,遇到新問題也能夠去google上找答案(Google is a great teacher! :-)).
Good Luck!