ちなみにCentos6にopenldapをインストールする前提です。
まずは、openldapをインストールします。
yum install openldap openldap-servers openldap-clients
そしてActiveDirectory用スキーマダウンロードします。
wget http://lism.sourceforge.jp/docs/ad.schema -O /etc/openldap/schema/ad.schema
openldapはsyslogのlocal4にログを出力するようになっているらしいので、出力できるようにします。
vi /etc/rsyslog.conf
以下の内容を追記します。
------------------------------------------------------ # openldap slapd log local4.* /var/log/ldap. log ------------------------------------------------------
変更を反映させるためにsyslogを再起動します。
service rsyslog restart
ActiveDirectoryのプロキシーになるように設定をします。
vi /etc/openldap/slapd.conf
以下のように記載します。
以下peername.ipの部分は接続を許可するサーバのIPアドレスを記載しますが、接続制限をしないならばAccess Controllの部分はなしでOKです。
------------------------------------------------------
### Schema includes ###########################################################
include                 /etc/openldap/schema/core.schema
include                 /etc/openldap/schema/cosine.schema
include                 /etc/openldap/schema/inetorgperson.schema
include                 /etc/openldap/schema/misc.schema
include                 /etc/openldap/schema/nis.schema
include                 /etc/openldap/schema/ad.schema
# Allow LDAPv2 client connections.  This is NOT the default.
allow bind_v2
# Main settings ###############################################################
pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args
### Logging ###################################################################
loglevel                256
### Access Controll  ##########################################################
access to *
  by peername.ip=127.0.0.1 read
  by peername.ip=192.168.0.10 read
  by * none
### Database definitions  #####################################################
database        ldap
readonly        yes
suffix          "ActiveDirectoryのBaseDNを記載します"
uri             ldap://ActiveDirectoryサーバのホスト名かIPアドレス/
rebind-as-user
idassert-bind   bindmethod=simple
                binddn="ActiveDirectoryにBINDするユーザ"
                credentials=上記ユーザのパスワード
                mode=none
idassert-authzFrom      "*"
------------------------------------------------------
設定を反映させます。
rm -rf /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d
openldapを起動させます。
service slapd start
以下のような感じで接続できたらOKです。
ldapsearch -H ldap://localhost -x -b "上記で設定したActiveDirectoryのBaseDN" -LLL "sAMAccountName=jojo"
ちなみにldapsearchでActiveDirectory直接問い合わせるならば以下のような感じになります。 ldapsearch -D "ActiveDirectoryにBINDするユーザ" -w ユーザのパスワード -h ActiveDirectoryサーバのホスト名かIPアドレス -b "ActiveDirectoryのBaseDNを記載します" -x "sAMAccountName=jojo"
もう一つおまけで、この設定を行ったopenldapにrubyからActiveDirectory上のユーザパスワードの確認を行うとすると以下のような感じです。
require 'net/ldap'
ldap = Net::LDAP.new
ldap.host = "openldapが起動するホスト名またはIPアドレス"
username,password = "jojo", "jojopwd"
result = ldap.bind_as(:base => Settings.ad_base,:filter => "(cn=#{username})",:password => password )
パスワードがあっていればldapのオブジェクトが戻り、あってなければfalseが戻ります。
