LDAPでActiveDirectoryに接続する。
LDAPからActiveDirectoryに接続する方法について、
興味本位から調べてみた。
たとえば、example.comというドメインツリーに
Administratorというユーザで接続する際、
通常のLDAPであれば、BaseDNを
CN=Administrator,DC=example,DC=comと記載するが、ActiveDirectoryの場合、
Administrator@example.comと記述するだけでアクセスできる。
詳細については、機会があれば改めて記述したいと思う。
初めてのS2JDBC
情報ばかり知っていても意味がない。JavaでWebアプリを作ってみようと
一念発起し、Seasar2(SAStruts+Mayaa+S2JDBC)を試しています。
Eclipse+Doltengでプロジェクトを作成したのですが、S2JDBCの導入部分で
ハマってしまったので対処メモ。ちなみにDBはMySQL5.1を利用してます。
Antで"Feature 'http://apache.org/xml/features/xinclude' is not recognized"
JDBCドライバや、jdbc.dicon/s2jdbc.diconの準備を終え、
いざ、Entityクラス・Serviceクラスを生成!!
> cd [ProjectDir] > ant -f s2jdbc-gen-build.xml gen-entity gen-ddlとしたところ、
"Feature 'http://apache.org/xml/features/xinclude' is not recognized"といわれて、ビルドがこける。
調べたところ、/src/main/resources/services/に
テキストファイル「javax.xml.parsers.SAXParserFactory」を作成し、一行。
「com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl」
と記述することで解決。
参考:http://ml.seasar.org/archives/seasar-user/2008-October/016149.html
プロパティ(dialect)の設定に失敗しました。
Antもとおり、Entity/Serviceクラスも出来たので、とりあえず
ActionクラスからServiceを呼び出してみる。
Tomcatを立ち上げ、ブラウザからみると500エラー、、、
s2jdbc.diconも間違いないはずなのになぜ?
原因は、JDBCドライバの設置場所にありました。
プロジェクトにはlibディレクトリが、2箇所あり
Tomcatから利用するには、/src/main/webapp/WEB-INF/libに
設置する必要があるそうです。
参考:http://ml.seasar.org/archives/seasar-user/2007-June/008375.html
今月の読本
このところ、忙しくしていたせいで書きかけになってしまった
LDAPの話が気掛かりではありますが、、、
給料日を迎えると、ついつい書店へ足が向いてしまうのは悪い癖。
今月はこの本。
- 作者: 中村成洋,相川光,竹内郁雄
- 出版社/メーカー: 秀和システム
- 発売日: 2010/03/17
- メディア: 単行本
- 購入: 25人 クリック: 810回
- この商品を含むブログ (94件) を見る
今しがた購入したばかりなので、内容はなんとも言えませんが、
GCとは何なのか。とても興味深いです。
LDAPについて綴ってみる(その1)
ようやく、OpenSolarisのOpenLDAP連携が「とりあえず動く」状態に!!
とはいうものの、LDAPについて語るにはあまりにも知識不足。
LDAPという迷宮に迷い込んでしまったようです。
そこで、今回は「LDAP」とはなにか自分の知識をまとめるという意味で
綴ってみたいと思います。
※いろいろと勘違いがあるかと思いますので、ご指摘いただければ幸いです。
LDAPとは
LDAP(Lightweight Directory Access Protocol)とは、ディレクトリサービスに接続
するためのプロトコルのひとつです。
ディレクトリサービスというと、WindowsのActive DirecotryやSun Microsystemsの
Direcotry Serverなどが有名ですが、要はコンピュータネットワーク上のさまざまな
資源(ユーザアカウントやグループ、ホスト情報など)を一元管理するためのサービス
です。
RFC(LDAPv2) | RFC1777 Lightweight Directory Access Protocol |
---|---|
OSI参照モデル | プレゼンテーション層(第6層) |
トランスポート | TCP port289 |
取り扱うデータは?
LDAPを一言でいうならば、資源情報を管理するための「データベース」なのですが、
一般的なOracleやMySQL、PostgreSQLなどのRDBMSとはデータ構造が異なります。
LDAP | RDBMS | |
---|---|---|
用途 | 検索性能重視、頻繁な更新には向かない | 検索だけでなく頻繁な更新も重視 |
データ構造 | ツリー構造 | 表構造 |
スキーマ | 既存のスキーマ(objectClass) | 業務にあわせて個別に設計 |
操作 | LDAP(ネットワークプロトコル) | SQL(プログラマブル言語) |
検索 | 木の枝葉をたどるイメージ | 表の行を走査するイメージ |
枝葉(Entry)は一意の情報でなくてはなりません。
スキーマ
さて、データ構造について説明しましたが、どのようにデータを保持するのでしょうか。
RDBMSでは、「CREATE TABLE」文を使用してスキーマ(表)を作成します。
LDAPでは、「Attribute」と「objectClass」によって取り扱う情報を定義します。
Attribute(アトリビュート)とは、取り扱うデータの属性が定義されます。RDBMSでいう
ところのフィールドに該当します。
objectClassは、このAttributeをまとめ制約条件を記載したオブジェクトとなります。
一般的にはAttributeとobjectClassはRFCにて定義されているものを使用します。
たとえ話ですが、以下の3つの入力項目をもつアドレス帳があったとるすと、、、
項目名 | 入力規制(型) |
---|---|
氏名 | 文字列 |
電話番号 | 数字、ハイフン、#、* |
住所 | 文字列 |
備考 | 文字列 |
まとめるのがobjectClassになります。
そして、制約条件とは「氏名」は必須で、「電話番号」または「住所」を記載。「備考」は
任意でなどという情報の適正化を指定する機能となります。
クラウドマガジンvol.1を買ってみる
みてわかるクラウドマガジンvol.1 (日経BPパソコンベストムック)
- 出版社/メーカー: 日経BP社
- 発売日: 2010/04/01
- メディア: 雑誌
- 購入: 6人 クリック: 402回
- この商品を含むブログ (20件) を見る
ぷらっと本屋に立ち寄った際、目に付いたので思わず購入。
Ubuntu+eucalyptusネタにつられてしまいました。
VMWareで試そうと思ったのですが、Ubuntuで構築する場合、
KVMを利用するので物理マシンが必要なんですね、、、
Xenであればいけるかな?
OpenLDAPをインストールする(トラブルシュート)
せっかくSolaris系OSを使用するわけなので、Solarisコンテナを使用したい。
コンテナついでに、PAMのLDAPモジュールを利用してユーザの一元管理をと
一意奮闘しております。
今回は、SUNWopenldapパッケージを使用したのですが、
妙なところでハマッたのでそのメモ。
※シューティングメモのため細かい内容は今回は割愛します
まずはパッケージをインストール
OpenSolarisは便利です。
pkgコマンドを利用すると、インストールされていないパッケージを
リモートのパッケージリポジトリからインストールできます。
# #パッケージを調べる。結果はSUNWopenldap # pkg search openldap # #SUNWopenldapの依存パッケージを調べる。 # pkg contents -m SUNWopenldap # #依存パッケージのインストール状況を調べる # pkg info SUNWcsl SUNWlibsasl SUNWlibnet SUNWicu SUNWopenssl SUNWopenldap # #パッケージ管理されているのでとりあえず、依存パッケージ全部入れちゃえ # pkg install -v SUNWcsl SUNWlibsasl SUNWlibnet SUNWicu SUNWopenssl SUNWopenldapこれで、インストール完了です。
設定ファイルが/etc/openldapに保存されますので、自己の環境にあわせ、
slapd.confを設定します。
なお、起動・停止スクリプトも一緒にインストールされるので、
以下の部分はそのままにしました。
pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args
いざslapdを起動する
Solaris10から、SMF(Service Management Facility)というサービス
管理機能が追加されました。OpenSolarisも例外なくSMFがあります。
※SMFについてはいつか別の機会にふれたいと思います。
今回インストールした、SUNWopenldapパッケージもSMFにより
サービスの制御が可能です。
# svcs -a | grep ldap disabled 21:45:28 svc:/network/ldap/client:default disabled 21:45:54 svc:/network/ldap/server:openldap_24 # svcadm enable -t svc:/network/ldap/server:openldap_24よし!! これで起動
# ps -ef | grep slapdと思いきや、slapdのプロセスが、、、無い。
さて、原因追求。
svcsコマンドでサービスの起動状況を確認し、maintenace状態であることがわかった。
svcs -vx でSMFのメッセージを確認する。
# svcs -a | grep openldap_24 maintenance 22:50:45 svc:/network/ldap/server:openldap_24 # svcs -vx svc:/network/ldap/server:openldap_24 (slapd - OpenLDAP LDAP server) State: maintenance since 2010年04月xx日 xx時xx分xx秒 Reason: Method failed repeatedly. See: http://sun.com/msg/SMF-8000-8Q See: man -M /usr/openldap/man -s 8 slapd See: http://www.openldap.org See: /var/svc/log/network-ldap-server:openldap_24.log Impact: This service is not running.とりあえず、logファイルを確認すると、
[ 4月 xx xx:xx:xx Method "stop" exited with status 2. ] [ 4月 xx xx:xx:xx Executing stop method ("/usr/bin/kill `cat /var/run/openldap/slapd.pid`"). ] cat: /var/run/openldap/slapd.pid: cannot open [No such file or directory]pidファイルが無いとおっしゃっています。
/var/runのサブディレクトリopenldapということでこいつが存在しないことが
原因だとわかり、
# mkdir /var/run/openldap # chown openldap:openldap /var/run/openldap # svcadm enable svc:/network/ldap/server:openldap_24 # svcs -a | grep openldap_24 online 21:45:54 svc:/network/ldap/server:openldap_24これで無事起動!!
ほんとの原因は /var/run に
さて、これで設定完了と思いつつ、OS再起動。
ところが、再起動後プロセスを確認するとslapdは起動していなかった
ログファイルを確認すると、前回と同じくpidファイルが開けないと書いてある
また、/var/runを除いてみても、先に作成した/var/run/openldapが存在しない。
感に任せて dfをたたく、、、
# df -h Filesystem Size Used Avail Use% Mounted on rpool/ROOT/opensolaris 19G 3.0G 16G 17% / swap 923M 312K 923M 1% /etc/svc/volatile /usr/lib/libc/libc_hwcap1.so.1 19G 3.0G 16G 17% /lib/libc.so.1 swap 923M 4.0K 923M 1% /tmp swap 923M 40K 923M 1% /var/run rpool/export 16G 21K 16G 1% /export rpool/export/home 16G 21K 16G 1% /export/home rpool/export/home/hoge 16G 8.8M 16G 1% /export/home/hoge rpool 16G 79K 16G 1% /rpoolいやな予感的中。
/var/runがswapデバイスにのっていた。 swapデバイスとはその名の通り、swap領域を利用しているため、
揮発性のある領域で、OSの再起動をすると消えてしまうのである。
トラブルシュート
/var/run/openldapディレクトリが、OS起動毎になくなってしまうことが
原因のため、起動スクリプトの修正を行う必要がある。
まずは、どんなスクリプトが呼び出されているか確認する必要があるため
SMFの制御ファイルであるマニフェストと呼ばれるXMLベースのファイルを確認する
# vi /var/svc/manifest/network/ldap/ldap-olslapd.xml : : <exec_method type='method' name='start' exec='/usr/lib/slapd -u openldap -g openldap -f /etc/openldap/slapd.conf' timeout_seconds='60'> <method_context> <method_credential user='openldap' group='openldap' privileges='basic,net_privaddr' /> </method_context> </exec_method> <exec_method type='method' name='stop' exec='/usr/bin/kill `cat /var/run/openldap/slapd.pid' timeout_seconds='60' /> : : :マニフェストの一部で、
上記の通り、起動・停止がハードコーディングされてる。
そこで、下記のような起動スクリプトを/etc/openldap/slapdrc.shとして作成しました
※あくまで暫定の起動スクリプトです。
#!/bin/sh CONF_FILE='/etc/openldap/slapd.conf' RUN_DIR='/var/run/openldap' RUN_UID='openldap' RUN_GID='openldap' start() { if [ ! -d $RUN_DIR ]; then /usr/bin/mkdir -p $RUN_DIR /usr/bin/chown $RUN_UID:$RUN_GID $RUN_DIR fi /usr/lib/slapd -u $RUN_UID -g $RUN_GID -f $CONF_FILE } stop() { if [ -f $RUN_DIR/slapd.pid ]; then /usr/bin/kill `cat $RUN_DIR/slapd.pid` fi } case $1 in start) start;; stop) stop;; esac
また、マニフェスト上で実行ユーザ・グループがopenldapになっているため、
<method_credential user='openldap' group='openldap' privileges='basic,net_privaddr' />セキュリティ上好ましくありませんが、下記のようにパーミッションを設定
# chmod +x slapdrc.sh # chmod u+s slapdrc.sh
続いて、マニフェストを以下のように修正します。
<exec_method type='method' name='start' exec='/etc/openldap/slapdrc.sh start' timeout_seconds='60'> <method_context> <method_credential user='openldap' group='openldap' privileges='basic,net_privaddr' /> </method_context> </exec_method> <exec_method type='method' name='stop' exec='/etc/openldap/slapdrc.sh stop' timeout_seconds='60' />修正したマニフェストをsvccfgコマンドを利用して登録します
# svccfg import /var/svc/manifest/network/ldap/ldap-olslapd.xml
以上で、OS再起動後もslapdが立ち上がるようになります。
もっとも、作成したスクリプトは暫定的なものですので、
セキュリティを考慮して作り直す必要がありますが、それはまた別の機会に
OpenSolarisをインストールする
Solaris10のライセンス形態変更により、OpenSolarisへ乗換えを開始しました
せっかく、新規でインストールを行うのでインストール手順をメモ
OpenSolarisを入手する
OpenSolarisをダウンロードします。
http://www.opensolaris.com/get/index.jsp?lang=ja
2010/4/3日時点での最新は「OpenSolaris 2009.06」です。
今回、x86/x64 LiveCDイメージを利用しました。
インストール環境の準備
今回は試験環境ということもあり、ローカルVMWare Server1.0.10に環境を構築しました。
Select a Guest Operating Syste | Sun Solaris Solaris 10 64-bit |
Processors | One |
Memory | 1024MB |
Network Type | NAT |
Disk Type | SCSI(Recommended) |
Disk Capacity | 20GB |
とりあえず今回は何も考えずISO Imageからbootしました。
インストール時のスクリーンキャプチャとも思ったのですが、
結構画面数があるので、入力項目のみ記載します。
1.LiveCDの起動
GRUBメニュー | OpenSolaris 2009.06 |
USB KeyBoard | 20. Japanese |
Keyboard Layout | 14. Japanese |
2.インストーラ
正常に起動すると、GNOMEのディスクトップ画面が表示されます
ディスクトップ上に「OpenSolarisをインストールする」というアイコンがあるので起動します。
インストーラはウィザード形式になっており次の7項目で構成されています。
ようこそ | ||
---|---|---|
ディスク | ○ディスク全体を使用する | |
●ディスクをパーティション分割する | ||
スライス1 | Solaris(20GB) | |
スライス2 | 未使用(-) | |
スライス3 | 未使用(-) | |
スライス4 | 未使用(-) | |
タイムゾーン | 地域 | アジア |
場所 | 日本 | |
タイムゾーン | 日本 | |
日付 | デフォルト | |
時刻 | デフォルト | |
ロケール | 言語 | 日本語 |
地域 | 日本語 | |
ユーザ | rootパスワード | (任意) |
ユーザアカウント | (任意) | |
ユーザ名 | (任意) | |
ログイン名 | (任意) | |
ユーザパスワード | (任意) | |
コンピュータ名 | (任意) | |
インストール | ||
完了 |
以上で、デフォルトインストールが完了です。