# 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時沒有帳號,將會自動創建帳號