CentOS7にLDAPの環境を作る
開発環境でちょっとLDAP認証したいなって思ったけどちょうどよい資料がなかったのでメモ。
基本は以下で良いのだけれど「slapd.d」の再作成のところをちょっと変更。
あと、何度も手順をやり直すときのためにDB_CONFIGのコピーも入れてある。
CentOS 7 : OpenLDAP インストールと設定 : Server World
まずはインストール。clientsも入れる。
sudo yum install openldap-servers openldap-clients
ldap自体の設定を初期化して再作成。
以前はslapd.confベースだったみたいだけれどslapd.dディレクトリベースで。
sudo sh -c 'rm -rf /etc/openldap/slapd.d/*' sudo /usr/libexec/openldap/convert-config.sh -f /usr/share/openldap-servers/slapd.ldif -F /etc/openldap/slapd.d
ldapデータベースを初期化して再作成。
sudo sh -c 'rm -rf /var/lib/ldap/*' sudo cp -av /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG sudo chown ldap:ldap /var/lib/ldap/DB_CONFIG
このあとslapのコマンドを使うのでこの時点で起動/自動起動登録しておく。
sudo systemctl start slapd sudo systemctl enable slapd
管理者のパスワードのハッシュを取得。
後述の【管理者パスワード】にはここで標準出力に表示された文字列を入れる。
この文字列は「{アルゴリズム}ハッシュ値」というフォーマットだがセキュリティ的に気にしなくてもよい場合はそのまま平文を書いてもよい。
当メモでも「user001」〜「user002」は平文で「password」と書いている。
slappasswd
ldap自体の設定を変更するファイルを作成。
vi ~/example.local.ldif
dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=example,dc=local dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=systemadmin,dc=example,dc=local dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcRootPW olcRootPW: 【管理者パスワード】 dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcAccess olcAccess: {0}to attrs=userPassword by self read by dn="cn=systemadmin,dc=example,dc=local" write by anonymous auth by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by self read by dn="cn=systemadmin,dc=example,dc=local" write by * read
ldap自体の設定を変更。
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f ~/example.local.ldif
ユーザを登録するファイルを作成。
vi ~/people.example.local.ldif
# Domain dn: dc=example,dc=local objectClass: dcObject objectClass: organization dc: example o: example # People Container dn: ou=people,dc=example,dc=local objectClass: organizationalUnit ou: people # People dn: cn=user001,ou=people,dc=example,dc=local objectClass: person cn: user001 sn: user001 userPassword: password dn: cn=user002,ou=people,dc=example,dc=local objectClass: person cn: user002 sn: user002 userPassword: password
ユーザを登録。
sudo ldapadd -w 【管理者パスワード】 -D cn=systemadmin,dc=example,dc=local -f ~/people.example.local.ldif
管理者ユーザで登録一式を確認。
sudo ldapsearch -x -w 【管理者パスワード】 -D cn=systemadmin,dc=example,dc=local -b dc=example,dc=local
user001で自身の情報を確認。
sudo ldapsearch -x -w password -D cn=user001,ou=people,dc=example,dc=local -b dc=example,dc=local '(cn=user001)'
必要ならファイアーウォールに設定を追加して任意のゾーン(例はpublic)でldapに接続できるように設定。
sudo firewall-cmd --add-service=ldap --zone=public sudo firewall-cmd --add-service=ldap --zone=public --permanent
ファイアーウォールの設定を確認。
sudo firewall-cmd --list-all
以上で完了。
補足
slapd.ldifの中でcore.ldifがincludeされているがcore.ldifにないオブジェクトクラスを使いたい場合は以下のような感じで任意のスキーマを追加すること。
例えば今回の例ではユーザを「person」にしているがもうちょっとリッチなアカウント系のものにする場合は追加が必要。
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif