# LDAP操作與連接筆記 ###### tags: `學生學習社群` ## 備份還原 ### ==備份== ![](https://i.imgur.com/duP9pVD.png) ### ==還原== #### 清除LDAP資料 ```bash= ldapdelete -x -D "cn=Manager,dc=cmrdb,dc=cs,dc=pu,dc=edu,dc=tw" -w "密碼" -r "dc=cmrdb,dc=cs,dc=pu,dc=edu,dc=tw" ``` #### 驗證清除是否成功 ```bash= ldapsearch -x -H ldap://127.0.0.1 -b "dc=cmrdb,dc=cs,dc=pu,dc=edu,dc=tw" ``` ![](https://i.imgur.com/MEjqibR.png) #### 導入備份 ```bash= #暫停服務 systemctl stop slapd #導入備份 slapadd -l ldapbackup.ldif #重新更改權限 chown -R ldap:ldap /var/lib/ldap #重啟 systemctl restart slapd ``` #### 驗證完成 - 收尋資料是否有匯入 ```bash= ldapsearch -x -H ldap://127.0.0.1 -b "dc=cmrdb,dc=cs,dc=pu,dc=edu,dc=tw" ``` - 查看服務狀態 ```bash= systemctl status slapd.service ``` ![](https://i.imgur.com/ma3SbPv.png) ## 加密 ### ==生成金鑰== #### 移動到金鑰存放位置 ```bash= cd /etc/openldap/certs ``` #### 生成金鑰 ```bash= openssl req -new -x509 -nodes -out 檔名.crt \ -keyout 私鑰檔名.key -days 3650 ``` #### 修改擁有者 ```bash= chown ldap:ldap 檔名.crt 檔名.key ``` ### ==撰寫ldif== #### 查看順序(CentOS7) ```bash= cat /etc/openldap/slapd.d/cn=config.ldif ``` - 紅框處是我們要修改的兩個欄位,這兩個的順序非常重要 ![](https://i.imgur.com/FIz8QCf.png) #### ldif內容 - 剛剛查看得知設定檔中olcTLSCertificateFile是在olcTLSCertificateKeyFile的上方,那麼ldif中也是要一樣的順序,不然將會噴錯 ```bash= dn: cn=config changetype: modify replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/openldap/certs/檔名.crt dn: cn=config changetype: modify replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/openldap/certs/檔名.key ``` #### ldif內容(CentOS8) - ```bash= dn: cn=config add: olcTLSCACertificatePath olcTLSCACertificatePath: /etc/openldap/certs dn: cn=config add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/openldap/certs/檔名.key dn: cn=config add: olcTLSCertificateFile olcTLSCertificateFile: /etc/openldap/certs/檔名.crt ``` #### 執行修改 ```bash= ldapmodify -Y EXTERNAL -H ldapi:/// -f 檔名.ldif ``` ### ==啟用ldaps== - CentOS8不需要修改設定檔,僅需要重啟就可以了 #### 修改設定檔 ```bash= vim /etc/sysconfig/slapd ``` - ldaps:/// 加在 ldap:/// 後 ![](https://i.imgur.com/8mjQeWY.png) #### 重啟ldap ```bash= systemctl restart slapd ``` #### 成功 ```bash= netstat -tlunp | grep slapd ``` - 636 port 是 ldaps的port ![](https://i.imgur.com/HsjGpqE.png) ### ==啟用TLS== #### 修改設定檔 ```bash= vim /etc/openldap/ldap.conf ``` - 在此設定檔中加入此行設定 ```bash= TLS_REQCERT allow ``` #### 測試是否成功 - 注意ldap已經變成ldaps了,如果有收尋成功,就代表TLS啟用成功了 ```bash= ldapsearch -x -H ldaps://127.0.0.1 -b "dc=cmrdb,dc=cs,dc=pu,dc=edu,dc=tw" ``` ## sssd ### ==安裝必要套件== ```bash= yum -y install sssd sssd-ldap sssd-tools ``` ### ==設定檔== - 這個設定檔原本是不存在的,所以vim打開檔案看到下方出現new file是正常的 ```bash= vim /etc/sssd/sssd.conf [sssd] services = nss, pam domains = LDAP [nss] [pam] [domain/LDAP] ldap_id_use_start_tls = true id_provider = ldap auth_provider = ldap # 這裡最重要!需要設定 ldaps 之外,主機名稱必需要寫當初在建立金鑰時的主機名稱!! ldap_uri = ldaps://ip # 這裡可以透過限制ou,來達到只有伺服器小組可以登入 ldap_search_base = ou=smt,ou=worker,ou=member,dc=cmrdb,dc=cs,dc=pu,dc=edu,dc=tw ldap_tls_reqcert = demand cache_credentials = true # 填寫放置金鑰的目錄即可!不需要額外寫憑證檔名! ldap_tls_cacertdir = /etc/openldap/certs ``` ### 確認設定檔完整性 - 更改設定檔權限 ```bash= chmod 600 /etc/sssd/sssd.conf ``` - 如果顯示結果是三個0,那麼代表設定檔沒問題 ```bash= sssctl config-check ``` ### 完成sssd設定 - 重啟服務 ```bash= systemctl restart sssd ``` ### 更改ldap設定 - 因為sssd會透過ldap去收尋帳號,所以我們必須將ldap的設定調整成只需輸入名字即可 ```bash= vim /etc/openldap/ldap.conf BASE ou=smt,ou=worker,ou=member,dc=cmrdb,dc=cs,dc=pu,dc=edu,dc=tw URI ldaps://127.0.0.1 TLS_CACERT /etc/openldap/certs/檔名.crt ``` ### 確定ldap設定成功 - 測試是否收尋的到使用者 ```bash= ldapsearch -x 'cn=laichenhsu' ``` - 查看狀態是否有下圖紅框處剛剛設定的資訊 ```bash= systemctl status slapd ``` ![](https://i.imgur.com/X05iPAT.png) ### 啟用sssd ## phpldapadmin ### ==安裝必要套件== - wget、apache2、php ```bash= yum -y install wget httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml ``` ### ==下載 & 安裝phpldapadmin== - 下載 ```bash= wget https://sourceforge.net/projects/phpldapadmin/files/phpldapadmin-php5/1.2.3/phpldapadmin-1.2.3.tgz/download ``` - 安裝 ```bash= tar -zxvf download mv phpldapadmin-1.2.3 phpldapadmin mv phpldapadmin /var/www/html ``` ### ==修改設定== #### 移動到設定檔資料夾 ```bash= cd /var/www/html/phpldapadmin/config ``` #### 複製範例設定檔 ```bash= cp config.php.example config.php ``` #### 進入設定檔 ```bash= vim config.php ``` #### 設定IP ##### 取消註解並更改server ip ```bash= $servers->setValue('server','host','SERVER_IP'); ``` #### 設定dc ##### 將dc=example,dc=com更改成你所使用的網域 ```bash= $servers->setValue('server','base',array('dc=example,dc=com)); ``` #### 關閉匿名登入 ##### 取消註解此行,並將參數改成false ```bash= $servers->setValue('login','anon_bind',false); ``` #### 隱藏警告(非必要) ##### 如果服務要對外公開時,在將此行取消註解並將參數改成true ```bash= $config->custom->appearance['hide_template_warning'] = true; ``` >未關閉會產生這些 ![](https://i.imgur.com/3X0FZmZ.png) ### ==啟動apache2== ```bash= sudo systemctl start httpd.service ``` # 連接服務 - WordPress #### ==請注意以下動作皆在WordPress主機上進行== ## 安裝 php-ldap ```bash= sudo apt-get install php-ldap ``` ## 安裝套件 ### ==進入套件資料夾== ```bash= cd /var/www/html/wordpress/wp-content/plugins ``` ### ==下載套件== #### 記得自行更新網址,我們所使用的是Active Directory Integration / LDAP Integration這個套件 ```bash= sudo wget https://downloads.wordpress.org/plugin/ldap-login-for-intranet-sites.3.5.2.zip ``` ### ==安裝unzip== ```bash= sudo apt-get install unzip ``` ### ==解壓縮== #### 記得檔名要換 ```bash= sudo unzip ldap-login-for-intranet-sites.3.5.2.zip ``` ## 套件設定 ### ==啟用套件== #### 至WordPress後台啟用套件 ![](https://i.imgur.com/4l4gIsv.png) ### ==至後台套件設定畫面== ![](https://i.imgur.com/IeUh3lP.png) ### ==警告排除 - php-curl/ldap== ### 以下操做以php5.6為主,請自己注意版本 #### 安裝套件 ```bash= sudo apt-get install php5.6-curl/ldap ``` #### 至/etc/php/5.6/apache2/php.ini #### 在php.ini中搜索“ extension = php_curl/ldap.so”。取消註釋此行,如果不存在,在文件中添加此行。 ![](https://i.imgur.com/aMZbI5G.png) ### ==連接帳號與ip設定== ![](https://i.imgur.com/ajQ0lqP.png) #### ==LDAP Server== 請依照ldap://ip:port,ldap的port都是389 #### ==Service Account Username==請輸入登入ldap時所使用的管理員帳號 #### ==Service Account Password==請輸入管理員密碼 #### 三個都出現打勾才代表連線成功 ### ==設定收尋使用者的方式== ![](https://i.imgur.com/ghilhsl.png) #### ==Search Base==請輸入要收尋的資料樹,這裡我是輸入一整棵樹,當然要縮小收尋範圍可以在前面加入ou #### ==Username Attribute==這裡請輸入下方的五種格式 cn , mail , sAMAccountName , userPrincipalName , customAttribute 中選一種,用意是在wordpress登入時要使用哪一種方式來當作帳號登入,我這裡使用的是cn #### 最後一樣要兩個都出現打勾才算成功 ### ==測試== ![](https://i.imgur.com/RgGl3ut.png) #### 最後這裡可以隨意輸入一組ldap帳號來做測試上面的設定是否是可行的 ### ==登入設定== ![](https://i.imgur.com/FV4yNPO.png) #### 最少要將第一個與最後一個打勾,第一個是正式開啟連接,最後一個是如果登入wordpress時沒有帳號,將會自動創建帳號