OpenLDAP是輕型目錄訪問協議(Lightweight Directory Access Protocol, LDAP)的自由和開源實現,在其OpenLDAP許可證下發行,並已經被包含在衆多流行的Linux發行版中。php
使用輕量級目錄訪問協議(LDAP)構建集中的身份驗證系統能夠減小管理成本,加強安全性,避免數據複製的問題,並提升數據的一致性。
html
一般,在實際工做環境中,都會經過LDAP來構建一個統一的帳號管理、身份驗證平臺,實現SSO單點登陸機制。
linux
LDAP這個東西,是公司準備實現統一用戶身份認證所瞭解到的,以前徹底沒有概念, 網上搜索了一些基礎,理論知識,簡直蒙圈了,實在是太抽象了。後來一想, 理論的知識先大概有個瞭解, 先動手讓ldap跑起來再說其餘, 在動手作的時候,若是遇到問題在回頭過去查閱資料,說不定慢慢就會理解了。
數據庫
第一次搭建OpenLDAP的時候,查閱了不少論壇、博客的帖子,發現好多都是講的不夠完善,或者是點到即止,在安裝和配置遇到問題的時候,總要浪費很大一部分時間來遊走於各大搜索引擎去尋根問藥,至關痛苦,下面就是結合網友以及本身嘗試摸索的過程,總結成文,但願可以幫助到有須要的朋友。apache
配置環境:vim
服務器操做系統: CentOS 6.5 x86_64 , RHEL/Suse 應該都相似瀏覽器
OpenLDAP版本:OpenLDAP 2.4
緩存
其實若是不是對LDAP各類參數要求都十分嚴格的狀況下,比較建議採用 yum 的方式安裝。由於相關依賴環境,功能都十分全面,對於初學者,強烈建議第一次使用yum來安裝。
安全
準備環境:bash
確保SELinux關閉:
# getenforce 一、臨時關閉 # setenforce 0 二、永久關閉 # vi /etc/selinux/config 將SELINUX=enforcing 改成 SELINUX=disabled 重啓機器便可
設定iptables防火牆規則:
# vim /etc/sysconfig/iptables *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 389 -j ACCEPT -s 192.168.1.0/16 -A INPUT -m state --state NEW -m tcp -p tcp --dport 636 -j ACCEPT -s 192.168.1.0/16 -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT 從新加載後以下: # iptables -L ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http ACCEPT tcp -- 192.168.1.0/16 anywhere state NEW tcp dpt:ldap ACCEPT tcp -- 192.168.1.0/16 anywhere state NEW tcp dpt:ldaps
同步系統時間:
# ntpdate time.nist.gov
一、yum 安裝所需軟件
# yum install -y openldap-* # yum install -y compat-openldap # 這個包和主從配置有很大關係
二、安裝完成後,準備配置文件
# cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
OpenLDAP相關配置文件:
/etc/openldap/slapd.conf 主配置文件,管理員dn,密碼,日誌配置,權限等設置
三、建立LDAP管理員密碼
LDAP能夠支持明文密碼,可是咱們強烈建議使用加密密碼。 經過 slappasswd 命令建立加密密碼,返回一串密文,先複製保存一下,下一步須要在LDAP配置文件中使用。
ps. 這裏我輸入的密碼是: ldap
# slappasswd New password: Re-enter new password: {SSHA}5EkFHScR0hN0r3oRhd0aP4tyJ0ByopCd
四、進入 /etc/openldap 目錄下,編輯 slapd.conf 配置文件。
主要修改的地兒,suffix, rootdn, rootpw, rootdn 其實就是openldap的管理員。
優化:
checkpoint 2048 10 # 設置把內存中的數據寫回數據文件的操做,此處的設置表示每達到 2048K 或者 10分鐘執行一次 checkpoint, 即寫入數據文件的操做。
cachesize 1000 # 設置LDAP能夠緩存的記錄數
# cp /etc/openldap/slapd.conf /etc/openldap/slapd.conf.ori # 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=Manager,dc=test,dc=com" read by * none ####################################################################### # database definitions ####################################################################### database bdb suffix "dc=test,dc=com" checkpoint 1024 15 rootdn "cn=Manager,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}5EkFHScR0hN0r3oRhd0aP4tyJ0ByopCd ....... 保存退出。
固然,也能夠以下設置明文密碼:
五、BerkeleyDB配置。 拷貝 DB_CONFIG 文件到指定目錄, 不然後續會報錯: warning - no DB_CONFIG file found in directory /var/lib/ldap
PS: OpenLDAP默認使用的是伯克利數據庫做爲後臺數據存儲介質,在OpenLDAP-Servers包中已經包含了,直接把配置文件複製到相關目錄便可。
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
六、刪除 /etc/openldap/slapd.d 目錄下全部的文件,不然後續在使用 ldapadd 命令的時候會報錯
PS: 默認狀況下,/etc/openldap/slapd.d目錄下有一些默認的配置文件,必須刪除,而後從新建議,這一步很重要
這是由於 2.4 和 2.3 配置文件兼容性問題致使, 參考: http://www.openldap.org/doc/admin24/appendix-common-errors.html
# rm -rf /etc/openldap/slapd.d/*
七、配置相應目錄權限
# chown -R ldap:ldap /var/lib/ldap/ # chown -R ldap:ldap /etc/openldap/
八、啓動 LDAP 的 slapd 服務, 並設置開機啓動
# chkconfig slapd on # service slapd start
九、從新生成 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
十、從新啓動 LDAP 的 slapd 服務
# service slapd restart
使用 netstat -tulpn 查看服務是否正常啓動
十一、開啓 SSL
# vim /etc/sysconfig/ldap SLAPD_LDAPS=yes
咱們能夠看到, OpenLDAP監聽端口:
默認監聽端口: 389 (明文數據傳輸)
加密監聽端口: 636 (加密數據傳輸)
一、編輯 /etc/openldap/slapd.conf
# vim /etc/openldap/slapd.conf loglevel 296
二、編輯 /etc/rsyslog.conf
# vim /etc/rsyslog.conf local4.* /var/log/ldap.log
三、重啓服務
# service rsyslog restart # service slapd restart
系統用戶一般保存在 /etc/passwd, /etc/shadow文件內,因此咱們須要遷移用戶數據到openldap數據庫。可是LDAP只能識別特定格式的文件,即後綴爲 ldif 的文件(也是文本文件),因此不能直接使用 /etc/passwd, /etc/shadow直接導入。 最簡單的方法是使用padl提供的遷移工具包,是一系列perl編寫的腳本, migrationtools 工具,以前的openldap包中已經包含了這些腳本,可是在redhat6.5中已經沒有了,要單獨下載。
一、安裝配置 migrationtools
# yum install -y migrationtools
二、切換到 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"; ....... 保存退出。:-)
三、生成 ldif 文件
a、在目錄MigrationTools裏面使用migrate_base.pl腳本生成基本的數據結構
# ./migrate_base.pl > /tmp/base.ldif 導入數據: ## -w 指定你在slapd.conf中設置的管理員密碼,也可使用 -W,交互式輸入密碼 ## -f 指定數據文件的路徑 ## 咱們以前設定的密碼: ldap # ldapadd -x -D "cn=Manager,dc=test,dc=com" -w ldap -f /tmp/base.ldif 查詢已經導入數據庫的數據: # ldapsearch -h -H ldap://192.168.1.35 -b "dc=test,dc=com"
b、在目錄MigrationTools裏面使用migrate_passwd.pl 和 migrate_group.pl 腳本將 /etc/passwd, /etc/group文件中的用戶轉化爲 ldap 能夠識別的數據結構 ldif 格式的文件
# ./migrate_passwd.pl /etc/passwd /tmp/passwd.ldif # ./migrate_group.pl /etc/group /tmp/group.ldif 導入數據: # ldapadd -x -D "cn=Manager,dc=test,dc=com" -w ldap -f /tmp/passwd.ldif # ldapadd -x -D "cn=Manager,dc=test,dc=com" -w ldap -f /tmp/group.ldif
c、在實際生產環境中,並不會把 /etc/passwd 和 /etc/group 中的用戶所有用 ldap 管理起來, 咱們只須要讓實際用戶被 ldap 管理便可,因此生產中按照以下規則操做:
刪除 ldap 數據庫中的全部數據:
# ldapdelete -x -D "cn=Manager,dc=test,dc=com" -w ldap -r "dc=test,dc=com"
創建測試用戶 ldapuser01, ldapuser02,把這兩個用戶導入ldap數據庫中
# useradd ldapuser01 # useradd ldapuser02 # passwd ldapuser01 # passwd ldapuser02 咱們只把須要的用戶導入 ldap 數據庫中 # grep ldap* /etc/passwd > /tmp/passwd # grep ldap* /etc/group > /tmp/group # ./migrate_base.pl > /tmp/base.ldif # ./migrate_passwd.pl /tmp/passwd > /tmp/passwd.ldif # ./migrate_group.pl /tmp/group > /tmp/group.ldif # ldapadd -x -D "cn=Manager,dc=test,dc=com" -w ldap -f /tmp/base.ldif # ldapadd -x -D "cn=Manager,dc=test,dc=com" -w ldap -f /tmp/passwd.ldif # ldapadd -x -D "cn=Manager,dc=test,dc=com" -w ldap -f /tmp/group.ldif
至此,咱們就把用戶導入到OpenLDAP數據庫中了。
安裝EPEL倉庫
# rpm -ivh http://mirrors.ukfast.co.uk/sites/dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rp
安裝phpLDAPadmin
# yum install -y phpldapadmin
修改 phpldapadmin配置文件(該文件會自動建立),添加訪問權限
# vim /etc/httpd/conf.d/phpldapadmin.conf 在這行後面添加 Allow from ::1 Allow from 192.168.1 //這裏修改成你本身的ip段
修改php配置文件, 禁止自動登陸和php登陸配置
# vim /etc/phpldapadmin/config.php #(line 398) //$servers->setValue('login','attr','uid'); #(line 530) $servers->newServer('ldap_pla'); $servers->setValue('server','name','LDAP Server'); $servers->setValue('server','host','127.0.0.1'); $servers->setValue('server','port',389); $servers->setValue('server','base',array('dc=test,dc=com')); $servers->setValue('login','auth_type','session'); $servers->setValue('login','bind_id','dc=test,dc=com'); $servers->setValue('login','bind_pass','ldap'); $servers->setValue('server','tls',false);
配置完成後,啓動apache
# chkconfig httpd on # service httpd start
而後經過瀏覽器進行訪問: http://192.168.1.35/ldapadmin/ (這個ip 換成你本身的實際ip)
這裏須要注意的是: Login DN: 必定要是完整的 DN, 而不是 RDN。
密碼就是咱們前面 slappasswd 命令設置的密碼, 也就是ldap管理員 rootdn(Manager)的密碼,而後就登陸成功了。
下載ldap-account-manager包,我這裏下載的是較老的版本4.6 ,(最新版應該 6.0了)。
若是沒有lamp環境 # yum install -y httpd php php-ldap php-gd # unzip ldap-account-manager-4.6.RC1.zip # mv ldap-account-manager-4.6.RC1 /var/www/html/lam # chown -R apache:apache /var/www/html/lam 順便編輯以前的 /etc/phpldapadmin/conf.php 中增長一行 # vim /etc/httpd/conf.d/phpldapadmin.conf Alias /lam /var/www/html/lam
配置
# cd /var/www/html/lam/config # cp config.cfg_sample config.cfg # cp lam.conf_sample lam.conf # vim lam.conf serverURL: ldap://192.168.1.35:389 admins: cn=Manager,dc=test,dc=com treesuffix: dc=test,dc=org 其餘 dc=my-domain 所有更換爲: dc=yourdomain
重啓 httpd 服務
# service httpd restart
而後經過瀏覽器訪問便可, http://192.168.1.35/lam ,更改成你本身的 ip
而後經過 Manager 帳號以及密碼就能夠登陸成功了。
至此, 可能咱們基本能夠把 slapd 跑起來了, 可是OpenLDAP作起來感受仍是比較麻煩,也是本身結合網上的資料、教程,實際測試成功後,整理了這篇文章,但願可以幫助到有須要的朋友。
後續還有ldap的具體應用, 好比 wifi, jira, ×××, jenkins 等應用案例。