1. 程式人生 > >完整的 LDAP + phpLDAPadmin安裝部署流程 (ubuntu18.04)

完整的 LDAP + phpLDAPadmin安裝部署流程 (ubuntu18.04)

## LDAP 安裝部署以及基礎使用 因工作需求需要使用`ldap`管理使用者許可權,在踩了一系列坑之後,總結了一些流暢的文件,希望可以幫到和曾經的我一樣迷茫的人。 --- 基礎環境:Ubuntu 18.04 ### 一、安裝 ``` root@cky:~# apt install slapd ldap-utils -y Administrator password: 123456 Confirm password: 123456 ``` 安裝包版本 ```shell root@cky:~/ldap# dpkg -l slapd ldap-utils Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-===============================================-============================-============================-=================================================================================================== ii ldap-utils 2.4.45+dfsg-1ubuntu1.10 amd64 OpenLDAP utilities ii slapd 2.4.45+dfsg-1ubuntu1.10 amd64 OpenLDAP server (slapd) ``` ### 二、配置 配置組織名稱,輸入/驗證在安裝期間建立的管理員密碼。完成後,選擇`MDB`作為資料庫後端,然後在清除`slapd`時選擇`No`以刪除資料庫。最後,選擇`Yes`以移動舊資料庫,完成安裝和配置。 ```shell root@cky:~# dpkg-reconfigure slapd Omit OpenLDAP server configuration? No DNS domain name: company.com Organization name: company Administrator password: 123456 Confirm password: 123456 Database backend to use: MDB Do you want the database to be removed when slapd is purged? No Move old database? Yes ``` 驗證一下 通過LDAP協議(僅列出*dn*),這是slapd-config DIT的樣子: ```shell root@cky:~# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn dn: cn=config dn: cn=module{0},cn=config dn: cn=schema,cn=config dn: cn={0}core,cn=schema,cn=config dn: cn={1}cosine,cn=schema,cn=config dn: cn={2}nis,cn=schema,cn=config dn: cn={3}inetorgperson,cn=schema,cn=config dn: olcBackend={0}mdb,cn=config dn: olcDatabase={-1}frontend,cn=config dn: olcDatabase={0}config,cn=config dn: olcDatabase={1}mdb,cn=config ``` 條目說明: - *cn = config*:全域性設定 - *cn = module {0},cn = config*:動態載入的模組 - *cn = schema,cn = config*:包含硬編碼的系統級架構 - *cn = {0} core,cn = schema,cn = config*:硬編碼核心架構 - *cn = {1} cosine,cn = schema,cn = config*:餘弦模式 - *cn = {2} nis,cn = schema,cn = config*:nis模式 - *cn = {3} inetorgperson,cn = schema,cn = config*:inetorgperson模式 - *olcDatabase = {-1} frontend,cn = config*:前端資料庫,其他資料庫的預設設定 - *olcDatabase = {0} config,cn = config*:slapd配置資料庫(cn = config) - *olcDatabase = {1} mdb,cn = config*:您的資料庫例項(dc = example,dc = com) 這是*dc = company,dc = com* DIT的樣子: ```shell root@cky:~# ldapsearch -x -LLL -H ldap:/// -b dc=company,dc=com dn dn: dc=company,dc=com dn: cn=admin,dc=company,dc=com ``` 查詢當前使用者 ```shell root@cky:~# ldapwhoami -x anonymous root@cky:~# ldapwhoami -x -D cn=admin,dc=company,dc=com -W Enter LDAP Password: 123456 dn:cn=admin,dc=company,dc=com ``` 填充一波資料庫 建立`ldif`檔案 ```shell root@cky:~/ldap# pwd /root/ldap root@cky:~/ldap# cat ldap_data.ldif dn: ou=Dev,dc=company,dc=com objectClass: organizationalUnit ou: Dev dn: ou=Groups,dc=company,dc=com objectClass: organizationalUnit ou: Groups dn: cn=miners,ou=Groups,dc=company,dc=com objectClass: posixGroup cn: miners gidNumber: 5000 dn: uid=zhangsan,ou=Dev,dc=company,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: zhangsan sn: Zhang givenName: San cn: zhangsan displayName: ZS uidNumber: 10001 gidNumber: 10001 userPassword: zspwd gecos: zhangsan loginShell: /bin/bash homeDirectory: /mnt/zs ``` 使用以下命令將檔案內容新增到LDAP: ```shell root@cky:~/ldap# ldapadd -x -D cn=admin,dc=company,dc=com -W -f ldap_data.ldif Enter LDAP Password: 123456 adding new entry "ou=Dev,dc=company,dc=com" adding new entry "ou=Groups,dc=company,dc=com" adding new entry "cn=miners,ou=Groups,dc=company,dc=com" adding new entry "uid=zhangsan,ou=Dev,dc=company,dc=com" ``` 咱們來查一下: ```shell # 查一個 root@cky:~/ldap# ldapsearch -x -b "uid=zhangsan,ou=Dev,dc=company,dc=com" root@cky:~/ldap# ldapsearch -x -LLL -b dc=company,dc=com 'uid=zhangsan' ou Dev # 查多個 root@cky:~/ldap# ldapsearch -x -LLL -b dc=company,dc=com ou DEV ``` 此時我們可以看到,使用者已新增成功。 此時,ldap已安裝部署完成。 ### 三、基礎使用方法 #### **新增使用者:** ```shell root@cky:~/ldap# cat add_lisi.ldif dn: uid=lisi,ou=Dev,dc=company,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: lisi sn: Li givenName: Si cn: lisi displayName: LS uidNumber: 10002 gidNumber: 10002 userPassword: lspwd gecos: lisi loginShell: /bin/bash homeDirectory: /mnt/ls root@cky:~/ldap# ldapadd -x -D cn=admin,dc=company,dc=com -W -f add_lisi.ldif Enter LDAP Password: 123456 adding new entry "uid=lisi,ou=Dev,dc=company,dc=com" ``` #### 查詢使用者: ```shell root@cky:~/ldap# ldapsearch -x -LLL -b dc=company,dc=com 'uid=lisi' ou Dev dn: uid=lisi,ou=Dev,dc=company,dc=com ``` #### 修改使用者資訊: ```shell root@cky:~/ldap# cat modify_lisi.ldif dn: uid=lisi,ou=Dev,dc=company,dc=com changetype: modify replace: displayName displayName: LiSi root@cky:~/ldap# ldapmodify -x -D 'cn=admin,dc=company,dc=com' -W -f modify_lisi.ldif Enter LDAP Password: modifying entry "uid=lisi,ou=Dev,dc=company,dc=com" ``` #### 刪除使用者: ```shell root@cky:~/ldap# ldapdelete -x -D 'cn=admin,dc=company,dc=com' -w 123456 -r "uid=lisi,ou=Dev,dc=company,dc=com" root@cky:~/ldap# ldapsearch -x -LLL -b dc=company,dc=com 'uid=lisi' ou Dev root@cky:~/ldap# ``` #### 更改*rootDN*密碼: - 首先,執行 `slappasswd` 獲取所需的新密碼的雜湊值: ``` root@cky:~/ldap# slappasswd New password: 654321 Re-enter new password: 654321 {SSHA}PkliLbd6Dih/H34i626AA22Eok1vdG76 ``` - 準備一個 `changerootpw.ldif` 具有以下內容的檔案: ``` root@cky:~/ldap# cat changerootpw.ldif dn: olcDatabase={1}mdb,cn=config changetype: modify replace: olcRootPW olcRootPW: {SSHA}PkliLbd6Dih/H34i626AA22Eok1vdG76 ``` - 最後,執行 `ldapmodify` 命令: ``` root@cky:~/ldap# ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f changerootpw.ldif modifying entry "olcDatabase={1}mdb,cn=config" ``` #### 配置日誌 建立`logging.ldif`具有以下內容的檔案: ```ini dn: cn=config changetype: modify replace: olcLogLevel olcLogLevel: stats ``` 修改 ```shell root@cky_dev:~/cky/ldap# ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f logging.ldif modifying entry "cn=config" ``` -----------------------------------------------------分割線----------------------------------------------------- ## phpLDAPadmin 如果是和我一樣的初學者,建議搭起來看一下效果,會幫助你加深對`ldap`的理解。 ### 一、安裝 安裝`PHP`和Apache Web伺服器: ```shell # 該儲存庫包含迄今為止的所有發行版本的PHP。 root@cky:~# add-apt-repository ppa:ondrej/php root@cky:~# apt update root@cky:~# apt install php7.0 php7.0-xml php7.0-ldap php7.0-cgi apache2 libapache2-mod-php7.0 php-mbstring php-common -y ``` 啟用`php7.0-cgi`擴充套件: ```shell root@cky_test01:~# a2enmod php7.0 root@cky_test01:~# a2enconf php7.0-cgi root@cky_test01:~# systemctl reload apache2 ``` 安裝`phpLDAPadmin`: ```shell root@cky_test01:~# apt -y install phpldapadmin ``` 檢視一下版本 ```shell root@cky:~# dpkg -l phpldapadmin Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-===============================================-============================-============================-=================================================================================================== ii phpldapadmin 1.2.2-6ubuntu1.1 all web based interface for administering LDAP servers ``` 就這裡,`php`版本和`phpLDAPadmin`版本對應的坑就坑了我很久,別的版本我不太清楚,就我上面的版本肯定是沒問題的。 ### 二、配置 修改`phpLDAPadmin`配置: ```shell root@cky:~# vim /etc/phpldapadmin/config.php 286 $servers->setValue('server','name','company LDAP Server'); 300 $servers->setValue('server','base',array('dc=company,dc=com')); 326 $servers->setValue('login','bind_id','cn=admin,dc=company,dc=com'); ``` 修改`/etc/apache2/conf-enabled/phpldapadmin.conf`上的訪問許可權,以允許僅從你信任的子網進行訪問: ```shell # 大概在20行的位置,放行了自己就行 Order deny,allow Deny from all Allow from 127.0.0.1 192.168.1.0/24 ``` 重啟apache2 ```shell root@cky_test01:~# systemctl restart apache2 ``` 防火牆放行 ``` root@cky:~# ufw allow ldap Rules updated Rules updated (v6) # 測一下 root@cky:~# ldapwhoami -H ldap:// -x anonymous ``` ### 三、訪問 現在,登入訪問一下`phpldapadmin`吧 ``` http://xxx.xxx.xxx.xxx/phpldapadmin/ ``` 額外贈送一個小知識:[在已安裝的PHP版本之間切換](https://www.cnblogs.com/shu-sheng/p/1444836