デフォルトだとアカウントが自由に登録できちゃう。今回は特定ユーザだけどインターネット環境で利用することを考えると、さすがによろしくないなぁということで、ldap認証に変えようとopenldapの構築に思い立った・・
0.環境準備
CentOS : 6.5
openldap 2.4.
1.インストール
openldapのサーバー「openldap-servers」と、管理用コマンド「ldapadd」「ldapsearch」が含まれているクライアントパッケージ「openldap-clients」を入れる。
$ sudo yum install -y openldap-servers openldap-clients
初期の設定を削除する$ sudo rm -rf /etc/openldap/slapd.d/*
$ sudo rm -rf /var/lib/ldap/*
設定ファイルをコピーする
$ sudo cp -a /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
$ sudo chown ldap. /var/lib/ldap/DB_CONFIG
$ sudo cp -a /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
rootユーザ(管理者ユーザー)のパスワードを設定する
$ slappasswd -s [パスワード]
{SSHA}bl2YB5/i9fZ64tMNV/7dr9li4a3YsNc0 ・・・(*1)
設定ファイルの修正をする(/etc/openldap/slapd.conf)
# スキーマファイル設定
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
include /etc/openldap/schema/collective.schema
# 接続プロトコル
allow bind_v2
# 管理ファイル
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
# userPasswordに関するアクセス権
access to attrs=userPassword
by self write
by dn="cn=Manager,dc=example,dc=com" write
by anonymous auth
by * none
# その他の属性に対するアクセス権
access to *
by self write
by dn="cn=Manager,dc=example,dc=com" write
by * read
# monitorデータベースに対するアクセス権
database monitor
access to *
by dn.exact="cn=Manager,dc=example,dc=com" read
by * none
# データベース設定
database bdb
suffix "dc=example,dc=com"
checkpoint 1024 15
rootdn "cn=Manager,dc=example,dc=com"
rootpw {SSHA}bl2YB5/i9fZ64tMNV/7dr9li4a3YsNc0 ・・・(*1)
directory /var/lib/ldap
# indexの設定
index objectClass eq,pres
index ou,cn,mail,surname,givenname eq,pres,sub
index uid,memberUid eq,pres,sub
設定ファイルのチェック$ sudo su -
# sudo -u ldap slaptest -u -v -f /etc/openldap/slapd.conf
config file testing succeeded
※設定ファイルを、設定ディレクトリ(/etc/openldap/slapd.d)に配置する場合
# sudo -u ldap slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
config file testing succeeded
この設定をすると、起動時に設定ディレクトリが優先され、設定ファイルは無視される。
設定ファイルが無くなっても大丈夫になるが、簡単に設定変更ができなくなる。
どっちがいいんでしょう・・
ちなみに設定ディレクトリを作成しないと、デフォルトの起動スクリプトで起動すると、
ls: cannot access /etc/openldap/slapd.d//cn=config/olcDatabase*.ldif: そのようなファイルやディレクトリはありません
というエラーがでる。無視できそうだけど・・わかっていないので、設定ディレクトリを使って進める。
$ sudo service slapd start
$ chkconfig slapd on
あとはログの取得設定をしておく。rsyslogの設定ファイルに以下を追加する(/etc/rsyslog.conf)local4.* /var/log/ldap.log
でもって再起動。
$ sudo service rsyslog restart
2.データの登録・更新・削除
基本的にデータの登録・更新は、LDIFファイルを作成し、それをコマンドを使って反映というステップで行う。Apache Directory Studioを使うと楽にできたが、 とりあえず理解を深めるために、、地道に。 まずは、ベース ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f test.ldif.txt
登録データをコマンドで確認してみる。
ldapsearch -x -b dc=example,dc=com
削除は
ldapdelete -D "cn=Manager,dc=example,dc=com" -W "削除するDN"
ldapdelete -D "cn=Manager,dc=example,dc=com" -W "uid=bind,ou=Account,dc=example,dc=com"
修正は
ldapmodify -x -W -D cn=config -f loglevel.ldif
slappasswd -h '{CRYPT}'
3.その他
・登録ユーザのパスワード変更
$ ldappasswd -x -D "uid=<自分のアカウント>,ou=Account,dc=example,dc=com" -S -w <自分のパスワード> "uid=<自分のアカウント>,ou=Account,dc=example,dc=com"
・デバッグログ
openldapサーバーのログレベルの変更
vi /etc/openldap/slapd.conf
loglevel ACL
j設定ディレクトリを作成していると、上記の設定ファイルでログレベルを設定しても無視されて
しまう。ので動的にloglevelを変更する必要がある。ステップは、
・動的に設定変更をする際には、設定変更用のパスワードを設定する。
パスワードを生成する。
$ slappasswd -s [パスワード]
・パスワードを設定変ファイルに書き込む。
vi /etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif
==
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 b65956a0
dn: olcDatabase={0}config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by * none
olcAddContentAcl: TRUE
olcLastMod: TRUE
olcMaxDerefDepth: 15
olcReadOnly: FALSE
olcRootDN: cn=config
olcRootPW: {SSHA}bl2YB5/i9fZ64tMNV/7dr9li4a3YsNc0 (*)
olcSyncUseSubentry: FALSE
olcMonitoring: FALSE
structuralObjectClass: olcDatabaseConfig
entryUUID: ac9a77d2-a08f-1034-959f-516e801fdd3a
creatorsName: cn=config
createTimestamp: 20150606120240Z
entryCSN: 20150606120240.046232Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20150606120240Z
==
最初の2行を削除する
(*)の行を追加する。パスワードは上記で生成したものを指定する。
vi /etc/openldap/ldif/loglevel.ldif
===
dn: cn=config
changetype: modify
add: olcLogLevel
olcLogLevel: filter config ACL stats
===
2回目以降に更新する場合は、
add: olcLogLevel
を
replace: olcLogLevel
に変更する。
2回目以降に更新する場合は、
add: olcLogLevel
を
replace: olcLogLevel
に変更する。
・ldapmodifyコマンドで変更する
$ ldapmodify -x -W -D cn=config -f loglevel.ldif
Enter LDAP Password:
modifying entry "cn=config"
※パスワードは上記で生成したものを!
0 件のコメント:
コメントを投稿