概要
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 件のコメント:
コメントを投稿