2017年7月20日木曜日

CentOS7 で OpenLDAP を試してみた

概要

CentOS7 に OpenLDAP をインストールしてグループの追加とユーザの追加までやってみました
結構クセのある操作なので慣れるまで大変かもしれません

環境

  • CentOS 7.3.1611
  • openldap (servers, clients) 2.4.40-13

インストール

  • yum -y install openldap openldap-clients openldap-servers

作業用ディレクトリの作成

OpenLDAP では .ldif というファイルを手動で作成してそれをコマンドで追加することで設定を反映させます
ldif ファイルを作成するディレクトリを作成しておきます

  • cd
  • mkdir ldap_work

設定と起動

データベース用の設定ファイルをコピーしてから起動します

  • cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
  • systemctl start slapd

admin 用の LDAP パスワードを設定

まずは admin 用のパスワードを登録します
このパスワードは設定を反映させるときに使うので忘れないようにしてください

  • slappasswd

でパスワードを入力して以下のようなハッシュが表示されれば OK です

{SSHA}Gtys4HSlB4NAbEY+/524hxN+Lcr60z7K

まだこの状態ではパスワードは LDAP に反映されていません
冒頭述べたように LDAP への設定の反映は基本的に .ldif ファイルを作成して ldapadd で反映します

  • touch ldap_work/add_admin_pass.ldif
  • vim ldap_work/add_admin_pass.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}Gtys4HSlB4NAbEY+/524hxN+Lcr60z7K

すべてがおまじないのような文法です
dn は識別子のことで「Distinguished Name」の略です
OpenLDAP では設定の追加や削除をするのに、この dn を使って重複や削除する項目を判断します

  • ldapadd -Y EXTERNAL -H ldapi:// -f ldap_work/add_admin_pass.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

作成した ldif ファイルの設定の追加は ldapadd コマンドを使います
-Y EXTERNAL -H ldapi:// のオプションにしてはおまじないだと思ってください
パスワードの登録は OpenLDAP が持つグローバルな設定に対して追加するのでその場合にこのオプションが必要になります
これでパスワードの登録が完了しました

基本スキーマの登録

グループの登録をするときに必要になるクラスがあるので登録します
インストール時に用意されている ldif ファイルがあるのでそれを ldapadd していきます

  • ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
  • ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
  • ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

Domain Component (dc) の変更

ここからがメインの設定になります
dc は「Domain Component」の略で ldap 内で管理されるドメインになります
今回は example.com をドメインとして登録します
もちろんダミーのドメインですがダミーでも問題ありません

  • touch ldap_work/modify_dc.ldif
  • vim ldap_work/modify_dc.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
  read by dn.base="cn=Manager,dc=example,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=example,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}Gtys4HSlB4NAbEY+/524hxN+Lcr60z7K

自分もよくわかってないのですが、上から

  • monitor というスキーマへ権限情報の変更
  • hdb というスキーマへ olcSuffix の変更
  • hdb というスキーマへ olcRootDN の変更
  • hdb というスキーマへ olcRootPW の変更

をそれぞれ行っています
上記 dc=example,dc=com の部分を書き換えれば別のドメインを設定することができます

設定の変更は ldapmodify コマンドを使って行います

  • ldapmodify -x -D cn=config -W -f ldap_work/modify_dc.ldif

を実行して変更を反映しましょう
先程登録した admin 用のパスワードを入力してください (slappasswd で設定したパスワード)
「-w」オプションを使用すれば引数でパスワードを指定することもできますが「-W」を使って入力したほうが良いと思います

modifying entry "olcDatabase={1}monitor,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"

こんな感じで反映されれば OK です
反映後の実体のファイルは /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif などにあるので確認してみると良いと思います

Organization Unit (ou) の登録

登録したドメインに今度は ou (組織) を登録していきます
この組織の中にグループやユーザを登録することになります
グループやユーザを管理する上位の概念になるのでそれっぽい名前を付けましょう

  • touch ldap_work/add_ou.ldif
  • vim ldap_work/add_ou.ldif
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.

dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group

今回は People (ユーザを管理する組織) と Group (グループを管理する組織) を作成しました
追加なので ldapadd コマンドを使って登録します

  • ldapadd -x -D “cn=Manager,dc=example,dc=com” -W -f ldap_work/add_ou.ldif
adding new entry "dc=example,dc=com"
adding new entry "ou=People,dc=example,dc=com"
adding new entry "ou=Group,dc=example,dc=com"

グループの追加

Group ou 内にグループを作成していきます

  • touch ldap_work/add_group.ldif
  • vim ldap_work/add_group.ldif
dn: cn=develop,ou=Group,dc=example,dc=com
objectClass: posixGroup
cn: develop
gidNumber: 1000

cn に追加するグループ名を設定することができます
今回は cn=develop としました
ちなみにここで設定したグループ名は後に連携する SSH 認証のログイン後に id コマンドなどで確認できるグループ名になります

あとは ldapadd で追加すれば OK です

  • ldapadd -x -D “cn=Manager,dc=example,dc=com” -W -f ldap_work/add_group.ldif

ユーザの追加

最後にユーザを追加しましょう
ユーザは People 組織配下に作成します
同時に初期パスワードも設定する必要があるので slappasswd でハッシュ値を生成します

  • slappasswd -h ‘{CRYPT}’
    • パスワードを入力してハッシュ値を取得しておきます
    • {CRYPT}vUOIOBK7ku0LU
  • touch ldap_work/add_user.ldif
  • vim ldap_work/add_user.ldif
dn: uid=hawk,ou=People,dc=example,dc=com
objectclass: posixAccount
objectclass: inetOrgPerson
sn: hawk
cn: snowlog
displayName: hawksnowlog
uid: hawk
uidNumber: 1001
gidNumber: 1000
homeDirectory: /home/hawk
loginShell: /bin/bash
userPassword: {CRYPT}vUOIOBK7ku0LU
mail: hawk@hawksnowlog.cf

hawk さんを登録します
グループとの紐付けは gidNumber で行います
slappassword で作成したパスワードは userPassword に設定します
ログインしたときにホームディレクトリを作成しデフォルトで使用するログインシェルを指定しています
あとは ldapadd で追加すれば OK です

  • ldapadd -x -D “cn=Manager,dc=example,dc=com” -W -f ldap_work/add_user.ldif

確認してみる

作成したグループとユーザ情報を ldapsearch コマンドで確認してみます

  • ldapsearch -x -LLL -D “cn=Manager,dc=example,dc=com” -W -b “ou=Group,dc=example,dc=com”
  • ldapsearch -x -LLL -D “cn=Manager,dc=example,dc=com” -W -b “ou=People,dc=example,dc=com”

Group 配下と People 配下に登録したグループとユーザが存在するのが確認できると思います

最後に

CentOS7 上に LDAP サーバを構築してみました
これだけだとタダのユーザ管理にしか使えないので次回は SSH と連携して認証管理までやらせてみようと思います

Tips

作成したユーザを作成した場合は以下のコマンドで削除できます

  • ldapdelete -x -D “cn=Manager,dc=example,dc=com” -W “uid=hawk,ou=People,dc=example,dc=com”

cn=config 配下の設定をすべて表示します

  • ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config

参考サイト

0 件のコメント:

コメントを投稿