KaliにOpenLDAPを入れた記録

### インストール
実験環境にOpenLDAPをインストールした時の記録。
参考：[OpenLDAP](https://www.openldap.org/)

まずはおまじない。

```
└─$ sudo apt update -y && sudo apt upgrade -y
...
以下のパッケージには満たせない依存関係があります:
 libwacom9 : 依存: libwacom-common (= 2.4.0-3) しかし、1.8-2 はインストールされようとしています
E: 壊れたパッケージ
```
いきなりエラーが出たが都度怒られたパッケージをインストールしていく。

```
└─$ sudo apt install libwacom9 -y
...
以下のパッケージには満たせない依存関係があります:
 libwacom2 : 依存: libwacom-common (= 1.8-2) しかし、2.4.0-3 はインストールされようとしています
             推奨: libwacom-bin (= 1.8-2)
E: エラー、pkgProblemResolver::Resolve は停止しました。おそらく変更禁止パッケージが原因です。

└─$ sudo apt install libwacom2 -y
```
更新完了。

続けてOpenLDAPをインストールする。

```
└─$ sudo apt install slapd ldap-utils -y
...
以下のパッケージには満たせない依存関係があります:
 libc6-dev : 破壊: libglib2.0-dev (<= 2.72.3-1) しかし、2.72.2-2 はインストールされようとしています
E: エラー、pkgProblemResolver::Resolve は停止しました。おそらく変更禁止パッケージが原因です。

└─$ sudo apt install libc6-dev -y
```
しかしまたしてもエラー発生。ここも怒られたパッケージを追加してインストール完了。

### LDAPサーバーの設定
```
└─$ sudo dpkg-reconfigure -p low slapd
```

「OpenLDAPサーバの設定を省略しますか？」ではTabキーで「いいえ」を選択してEnterキーで決定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277081/ce69ff26-1d87-79d6-a7ac-d62b8c802187.png)

ドメイン名を指定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277081/9d71c6dc-49c3-2cb5-89f4-ddebe7e2e630.png)

組織の名前を指定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277081/67439b51-4115-4c74-5a7d-26fa699e2791.png)

管理者エントリーのパスワードを指定。（確認も）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277081/b5d1a92d-5e0a-d70c-9941-22fb023db18d.png)

「slapdをパージしたときにデータベースを削除しますか」で「いいえ」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277081/2b9be786-5b08-5ca7-03a8-6aac3e434cf7.png)

「古いデータベースを移動しますか？」で「はい」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277081/72c45ca2-f85c-99c5-03d5-872c6fc8b2f3.png)

### 認証機能のモジュールを追加する
supportedSASLMechanismsを確認する。初期状態では以下のとおり。
```
└─$ ldapsearch -x -H ldapi:/// -b "" -LLL -s base supportedSASLMechanisms
dn:
supportedSASLMechanisms: EXTERNAL
```

サポートされるSASL機能を追加する。
参考：[Cyrus SASL - pluggable authentication modules (LDAP) ](https://packages.ubuntu.com/ja/bionic/libsasl2-modules)
```
└─$ sudo apt install libsasl2-modules-ldap -y
```

再度supportedSASLMechanismsを確認する。
```
└─$ ldapsearch -x -H ldapi:/// -b "" -LLL -s base supportedSASLMechanisms
dn:
supportedSASLMechanisms: SCRAM-SHA-512
supportedSASLMechanisms: SCRAM-SHA-384
supportedSASLMechanisms: SCRAM-SHA-256
supportedSASLMechanisms: SCRAM-SHA-224
supportedSASLMechanisms: SCRAM-SHA-1
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: EXTERNAL
supportedSASLMechanisms: CRAM-MD5
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: LOGIN
supportedSASLMechanisms: PLAIN
```

### おまけ
この後実験のためあえてセキュリティ機能をダウングレードした。

ldifを作って適用する。（changetype: modifyはなくても大丈夫だった）
```
└─$ cat olcSaslSecProps.ldif
#olcSaslSecProps.ldif
dn: cn=config
#changetype: modify
replace: olcSaslSecProps
olcSaslSecProps: noanonymous,minssf=0,passcred

└─$ sudo ldapmodify -Y EXTERNAL -H ldapi:// -f ./olcSaslSecProps.ldif && sudo service slapd restart
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
```

結果こんなことに。
```
└─$ ldapsearch -H ldap:// -x -LLL -s base -b "" supportedSASLMechanisms
dn:
supportedSASLMechanisms: LOGIN
supportedSASLMechanisms: PLAIN
```

以上