2015-11-26

openldapをActiveDirectoryのプロキシーとして設定する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
openldapをActiveDirectoryのプロキシーになるように設定して、openldap経由でActiveDirectoryの内容を確認する方法です。

ちなみに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が戻ります。


コメントを投稿