LISMの設定
ストレージの設定項目 †
ストレージの設定は<storage>タグの内部に記述します。
LISMは、標準で次のストレージを使用できます。
- LDAP: LDAPサーバ
- AD: Active Directory
- SQL: データベース
- CSV: CSVファイル
- GoogleApps: Google Apps
- GAE: Google App Engine
- SOAP: SOAP通信
LDAP/AD †
LDAPサーバ、Active DirectoryのID管理を行います。
- <uri>
- 接続先のLDAPサーバのURIを指定します。
例: ldap://localhost/dc=my-domain,dc=com
- <binddn>
- LDAPにバインドする際のDNを指定します。
- <bindpw>
- LDAPにバインドする際のパスワードを指定します。
- <break>
- データ内の改行コードを指定します(LF|CR|CRLF)。
- <connection>
- LDAPサーバへの接続方法を設定します。
- <type>
- 接続の種類を設定します。デフォルトではサーバへの接続を保持します。"every"を指定するとアクセス毎にサーバに対して接続を行います。
- <deleteflag>
- 削除処理時に、エントリの削除は行わずに指定した属性を指定した値に設定して、終了します。
属性:
filter:対象とするエントリをLDAP検索フィルタ形式で指定
name:設定する属性名
value:設定する値
- <ldapmap>
- LISMサーバの属性名、オブジェクトクラス名、RDNの属性名を接続先のLDAPサーバの別の属性名、オブジェクトクラス名、RDNの属性名に変換します。
属性:
type:変換対象として、attribute(属性名)、またはobjectclass(オブジェクトクラス名)、またはdn(RDNの属性名)を指定
local:LISMサーバの属性名、またはオブジェクトクラス名、またはRDNの属性名
foreign:接続先のLDAPサーバの属性名、またはオブジェクトクラス名、またはRDNの属性名
- <pagesize>
- Active Directoryから取得する検索結果の最大件数で、ストレージがADの場合のみ設定可能です。デフォルトは10000です。
SQL †
データベースのテーブルに格納されているユーザ、グループ、ロール等の情報を管理します。
- <dsn>
- 接続先のRDBサーバのDSNを指定します。
- <admin>
- RDBに接続する際のユーザを指定します。
- <passwd>
- RDBに接続する際のパスワードを指定します。
- <mbcode>
- RDBに格納されているマルチバイト文字の文字コードを指定します(utf8|euc-jp|shiftjis)。
- <break>
- データ内の改行コードを指定します(LF|CR|CRLF)。
- <paramset>
- <plugin>の引数で共通的に使用するものを定義します。<paramset>内に<plugin>の<param>と同様の形式で引数を設定します。
- <connection>
- RDBサーバへの接続方法を設定します。
- <type>
- 接続の種類を設定します。デフォルトではサーバへの接続を保持します。"every"を指定するとアクセス毎にサーバに対して接続を行います。
- <retry>
- リトライする回数を指定します。デフォルトは0で、リトライを行いません。
- <interval>
- リトライする間隔を秒数で指定します。デフォルトは10秒です。
- <object>
- データのオブジェクトを定義します。
属性:
name: オブジェクト名
- <container>
- オブジェクトを配下に格納するエントリ(以下、コンテナオブジェクト)の情報を定義します。コンテナオブジェクトに
は、<oname>タグにより他のオブジェクトを指定することが可能です。これにより、オブジェクト同士で階層構成を取ることが可能です。階
層の最上位のコンテナオブジェクトについては、オブジェクトを指定するのではな
く、<rdn>、<oc>、<attr>タグを使用してエントリの情報を定義する必要があります。
- <rdn>
- コンテナオブジェクトのRDNを指定します。
- <oc>
- コンテナオブジェクトに設定するLDAPのオブジェクトクラスを指定します。
- <attr>
- コンテナオブジェクトに設定するLDAPのアトリビュートとその値を指定します。RDNのアトリビュートについては、記述する必要はありません。
属性:
name: アトリビュート名
- <oname>
- コンテナオブジェクトの名前(<object>タグのname属性で指定した値)を指定します。
- <fromtbls>
- 上位に位置するコンテナオブジェクトのエントリを検索する際のSELECT文のFROM句の内容を指定します。<table>タグで指定したテーブルについては、記述する必要はありません。
- <joinwhere>
- 上位に位置するコンテナオブジェクトのエントリを検索する際のSELECT文のWHERE句の内容を指定します。<オブジェクトのidの列名>=<オブジェクトのidの値>という条件式は自動的に付加されるので、記述する必要はありません。
- <addproc>
- 上位に位置するコンテナオブジェクトの下にエントリを追加する際のSQL文を指定します。SQL文には、以下のパラメータを使用することができます。
%o: このオブジェクトのidの値
%c: コンテナオブジェクトのidの値
- <delproc>
- 上位に位置するコンテナオブジェクトからエントリを削除する際のSQL文を指定します。SQL文には、以下のパラメータを使用することができます。
%o: このオブジェクトのidの値
%c: コンテナオブジェクトのidの値
- <subcontainer>
- “ou=users”、”ou=groups”等、オブジェクトを格納すだけで、データベースにオブジェクトとして存在しないエントリを定義します。
- <rdn>
- エントリのRDNを指定します。
- <oc>
- エントリのオブジェクトクラスを指定します。
- <attr>
- エントリに設定するLDAPのアトリビュートとその値を指定します。RDNのアトリビュートについては、記述する必要はありません。
属性:
name: アトリビュート名
- <noop>
- SQLによるデータベースの更新を行はない更新オペレーション名を指定します(add|modify|delete)。
- <plugin>
- 更新オペレーションを受け付けた際に、実行するPerlの関数を指定します。呼び出す関数を含むライブラリは、SQLストレージの<libload>に指定しておいてください。
属性:
name: 関数名
- <op>
- 関数を実行する更新オペレーション名(add|modify|delete)を指定します。
- <param>
- 関数に渡す引数を指定します。
属性:
name: 引数名
value: 引数として渡す値
type: attributeを指定した場合、valueで指定したLDAPの属性の値を関数の引数として渡します。
templateを指定した場合、valueで指定した値に含まれる”%{引数名}”を指定した各引数の値で置き換えたものを関数の引数として渡します。
regexpを指定した場合、valueで指定した値を正規表現として、リクエストの値に適用し、正規表現のパターングループ”( )”にマッチした値を関数の引数として渡します。
paramsetを指定した場合、valueで指定した名前の<paramset>に設定されている引数が渡されます。
typeを指定しない場合、valueの値を関数の引数として渡します。
- <table>
- オブジェクトが存在するテーブルを指定します。
- <id>
- テーブル内でオブジェクトを一意に識別するidの列を指定します。
- <column>
- idの列名を指定します。
- <sequence>
- idの値として、SQLのSEQUENCEを使用する場合、値に設定するSQL構文を指定します。
- <oc>
- LDAPのオブジェクトクラスを指定します。
- <rdn>
- RDNとして使用するアトリビュート名を指定します。
- <attr>
- LDAPのアトリビュートを定義します。
アトリビュートの値が<table>タグで指定したテーブルに存在する場合は<column>タグに、アトリビュートの値が他の
テーブルに存在する場合
は<oname>、<fromtbls>、<joinwhere>、<addproc>、<delproc>
タグに設定を行います。
属性:
name: アトリビュート名(英字は全て小文字で記述してください)
- <column>
- アトリビュートの値に該当するテーブル内の列名を指定します。
- <oname>
- アトリビュートの値として他のLDAPオブジェクトのDNを取る場合、そのオブジェクトの名前(<object>タグのname属性で指定した値)を指定します。
- <fromtbls>
- アトリビュートの値を検索する際のSELECT文のFROM句の内容を指定します。<table>タグで指定したテーブルについては、記述する必要はありません。
- <selexpr>
- アトリビュートの値を検索する際のSELECT文に記述する列名を指定します。
- <joinwhere>
- アトリビュートの値を検索する際のSELECT文のWHERE句の内容を指定します。<オブジェクトのidの列名>=<オブジェクトのidの値>という条件式は自動的に付加されるので、記述する必要はありません。
- <addproc>
- アトリビュートの値を追加する際のSQL文を指定します。SQL文は複数指定することが可能です。SQL文には、以下のパラメータを使用することができます。
%o: このオブジェクトのidの値
%p: このオブジェクトのコンテナオブジェクトのidの値
%a: 属性の値、または<oname>タグが指定されている場合、そのオブジェクトのidの値
%c: 属性のオブジェクトの上位にあるコンテナオブジェクトのidの値
- <delproc>
- アトリビュートの値を削除する際のSQL文を指定します。SQL文は複数指定することが可能です。SQL文には、以下のパラメータを使用することができます。
%o: このオブジェクトのidの値
%p: このオブジェクトのコンテナオブジェクトのidの値
%a: 属性の値、または<oname>タグが指定されている場合、そのオブジェクトのidの値
%c: 属性のオブジェクトの上位にあるコンテナオブジェクトのidの値
- <strginfo>
- LDAPの属性にマッピングしないRDB固有の情報を定義します。
RDB固有の情報が<table>タグで指定したテーブルに存在する場合は<column>タグに、RDB固有の情報が他のテーブルに存在する場合は<addproc>、<delproc>タグに設定を行います。
- <value>
- 登録する値を指定します。値には定数、または値を生成するPerlの関数を指定することができます。
属性:
type: 値のタイプ(constant | function)
function(関数)を指定した場合、次の情報を利用することができます。
$dn: addリクエストまたはdeleteリクエストの対象エントリのDN
$entryStr: addリクエストで登録するエントリ情報(LDIF形式)
- <column>
- 値を登録するテーブル内の列名を指定します。
- <addproc>
- RDB固有の情報を登録する際のSQL文を指定します。SQL文は複数指定することが可能です。SQL文には、以下のパラメータを使用することができます。
%o: このオブジェクトのidの値
%v: <value>タグで指定した値
- <delproc>
- RDB固有の情報を削除する際のSQL文を指定します。SQL文は複数指定することが可能です。SQL文には、以下のパラメータを使用することができます。
%o: このオブジェクトのidの値
%v: <value>タグで指定した値
- <selwhere>
- オブジェクトとして表示するレコードの条件をwhere句で指定します。
- <libload>
- SQLストレージでロードするPerlのライブラリを指定します。<strginfo>タグの<value>等で関数を使用する場合に、その関数が定義されているライブラリを読み込むのに使用します。
- [例]
- 社員情報を次の4つのテーブルに格納しているものとします。
USERS PHONES
---------- -------------
id integer id integer
user_id varchar users_id integer references users(id)
user_name varchar phone
email varchar
...
GROUPS USERS_GROUPS_LINK
---------- -------------
id integer id integer
group_name varchar uid integer references users(id)
... gid integer references groups(id)
社員は複数の電話番号を持つことができ、複数のグループに所属することができます。これをLDAPのオブジェクトクラスで表すと次のようになります。
Person
inetOrgPerson
-------
MUST cn
MAY uid $ telephoneNumber $ businessCategory
...
この社員オブジェクトはテーブル"users"に格納され、社員ID(uid)、社員名(cn)は、それぞれ"user_id"、"user_name"
の列に格納されています。RDNに"uid"を使用する場合、<object>の設定は次のようになります。
<table>users</table>
<id>
<column>id</column>
</id>
<rdn>uid</rdn>
<attr name="uid">
<column>user_id</column>
</attr>
<attr name="cn">
<column>user_name</column>
</attr>
また、電話番号(telenphoneNumber)、所属グループ(businessCategory)はそれぞれ次のSQL文で取得、追加、削除することができます。
電話番号
取得
SELECT phones.phone FROM users,phones
WHERE users.id=phones.users_id AND users.id=usersの該当するID
追加
INSERT INTO phones(users_id, phone) values(usersの該当するID, '電話番号')
削除
DELETE FROM phones WHERE users_id=usersの該当するID AND phone='電話番号'
所属グループ
取得
SELECT groups.group_name FROM users,groups,users_groups_link
WHERE users.id=users_groups_link.uid AND groups.id=user_groups_link.gid
AND users.id=usersの該当するID
追加
INSERT INTO users_groups_link(uid, gid) values(usersの該当するID, groupsの該当するID)
削除
DELETE FROM users_groups_link WHERE uid=usersの該当するID and gid=groupsの該当するID
このとき、次の設定を<object>に追加します。
<attr name="telephonenumber">
<fromtbls>phones</fromtbls>
<selexpr>phones.phone</selexpr>
<joinwhere>users.id=phones.users_id</joinwhere>
<addproc>insert into phones(users_id, phone) values('%o', '%a')</addproc>
<delproc>delete from phones where users_id = '%o' and phone = '%a'</delproc>
</attr>
<attr name="businesscategory">
<fromtbls>groups,users_groups_link</fromtbls>
<joinwhere>users.id=users_groups_link.uid and groups.id=user_groups_link.gid</joinwhere>
<addproc>insert into users_groups_link(uid, gid) values('%o', '%a')</addproc>
<delproc>delete from users_gruops_link where uid = '%o' and gid = '%a'</delproc>
</attr>
以上で、データベースの社員情報をLISMから操作することができます。
CSV †
CSVファイルに格納されているユーザ、グループ、ロール等の情報を管理します。
- <delim>
- CSVのデリミタを指定します。デフォルトでは","が使用されます。
- <valdelim>
- 1つの列に複数の値を持つ場合、値を連結するためのデリミタを指定します。デフォルトでは":"が使用されます。
- <mbcode>
- CSVファイルに格納されているマルチバイト文字の文字コードを指定します(utf8|euc-jp|shiftjis)。
- <break>
- データ内の改行コードを指定します(LF|CR|CRLF)。
- <object>
- データのオブジェクトを定義します。
属性:
name: オブジェクト名
- <container>
- オブジェクトを配下に格納するコンテナオブジェクトの情報を定義します。コンテナオブジェクトには、<oname>タグにより他のオ
ブジェクトを指定することが可能です。これにより、オブジェクト同士で階層構成を取ることが可能です。階層の最上位のコンテナオブジェクトについては、オ
ブジェクトを指定するのではなく、<rdn>、<oc>、<attr>タグを使用してエントリの情報を定義する必要
があります。
- <rdn>
- コンテナオブジェクトのRDNを指定します。
- <oc>
- コンテナオブジェクトに設定するLDAPのオブジェクトクラスを指定します。
- <attr>
- コンテナオブジェクトに設定するLDAPのアトリビュートとその値を指定します。
属性:
name: アトリビュート名
- <oname>
- コンテナオブジェクトの名前(<object>タグのname属性で指定した値)を指定します。
- <idcolumn>
- <oname>を指定した場合、上位に位置するコンテナオブジェクトを一意に識別する値が格納される列の番号を指定します。
- <subcontainer>
- “ou=users”、”ou=groups”等、オブジェクトを格納すだけで、データベースにオブジェクトとして存在しないエントリを定義します。
- <rdn>
- エントリのRDNを指定します。
- <oc>
- エントリのオブジェクトクラスを指定します。
- <attr>
- エントリに設定するLDAPのアトリビュートとその値を指定します。RDNのアトリビュートについては、記述する必要はありません。
属性:
name: アトリビュート名
- <file>
- オブジェクトが存在するファイルを指定します。
- <command>
- ファイルではなく、コマンドの出力結果からデータを読み込む場合にそのコマンドラインを指定します。<command>を設定する場合は、<file>を設定しないで下さい。
- <mode>
- ファイルに書き込む際の方法を指定します。デフォルトでは、書き込むレコードが他のレコードと重複しないかチェックを行いますが、"append"を指定すると重複のチェックを行わずに書き込むため、より短時間での書き込みが可能です。
- <id>
- ファイル内でオブジェクトを一意に識別する列を指定します。
- <column>
- idの列番号を指定します。列の番号は0から始まります。
- <oc>
- LDAPのオブジェクトクラスを指定します。
- <rdn>
- RDNとして使用するアトリビュート名を指定します。
- <attr>
- LDAPのアトリビュートを定義します。
アトリビュートの値が<file>で指定したファイルに存在する場合は<column>タグに、アトリビュートの値が他のファイルに存在する場合は<oname>、<idcolumn>タグに設定を行います。
属性:
name: アトリビュート名(英字は全て小文字で記述してください)
- <column>
- アトリビュートの値に該当する列の番号を指定します。
- <rexpr>
- 属性の値を任意の文字列や列の値を含む文字列として指定します。列の値は、%<列番号>で指定することができます。
[例]: %1 %2(%3)
- <oname>
- アトリビュートの値として他のLDAPオブジェクトのDN を取る場合、そのオブジェクトの名前(<object>タグのname属性で指定した値)を指定します。
- <idcolumn>
- <oname>を指定した場合、そのオブジェクトを一意に識別する値が格納される列の番号を指定します。
- <strginfo>
- LDAPの属性にマッピングしないCSVファイル固有の情報を定義します。
- <value>
- 登録する値を指定します。値には定数、または値を生成するPerlの関数を指定することができます。
属性:
type: 値のタイプ(constant | function)
- <filter>
- CSVファイル内のデータで、LISMの管理対象となるデータの条件を指定します。CSVファイルの<column>列の値が<filter>の値と比較して、typeで指定した条件を満たすデータを管理対象とします。
属性:
type: "eq" 等しい、"not" 等しくない、"lt" 未満、"gt" より大きい、"le" 以下、"ge" 以上
- <column>
- 値を登録するCSVファイル内の列の番号を指定します。
- <libload>
- CSVストレージでロードするPerlのライブラリを指定します。<strginfo>タグの<value>等で関数を使用する場合に、その関数が定義されているライブラリを読み込むのに使用します。
- [例]
- 社員情報を次の2つのファイルに格納しているものとします。
users.csv
-----------------------
user_id,user_name,phone[;...],gid[;...],...
groups.csv
-----------------------
gid,group_name
社員は複数の電話番号を持つことができ、複数のグループに所属することができます。これをLDAPのオブジェクトクラスで表すと次のようになります。
Person
inetOrgPerson
-------
MUST cn
MAY uid $ telephoneNumber $ businessCategory
...
この社員オブジェクトはファイル"users.csv"に格納され、社員ID(uid)、社員名(cn)、電話番号は、それぞれ0(user_id)、
1(user_name)、2(phone)番目の列に格納されています。RDNに"uid"を使用する場合、<object>の設定は次の
ようになります。
<file>/CSVファイルを置いているディレクトリのパス/users.csv</file>
<id>
<column>0</column>
</id>
<rdn>uid</rdn>
<attr name="uid">
<column>0</column>
</attr>
<attr name="cn">
<column>1</column>
</attr>
<attr name="telephonenumber>
<column>2</column>
</attr>
また、所属グループ(businessCategory)情報はファイル"groups.csv"に格納され、Groupというオブジェクトとして定義さ
れているものとします。そして、"users.csv"には3(gid)番目の列に所属グループのグループIDが格納されています。
このとき、次の設定を<object>に追加します。
<attr name="businessCategory">
<oname>Group</oname>
<idcolumn>3</idcolumn>
</attr>
以上で、CSVファイルの社員情報をLISMから操作することができます。
GoogleApps †
Google AppsのID管理を行います。
- <domain>
- Google Appsのドメインを指定します。
- <admin>
- Google Appsの管理ユーザを指定します。
- <passwd>
- Google Appsの管理ユーザのパスワードを指定します。
- <object>
- データのオブジェクトを定義します。指定可能なオブジェクトは"User"、"EmailList"です。
属性:
name: オブジェクト名
- <subcontainer>
- “ou=users"等、オブジェクトを配下に格納するエントリを定義します。
- <rdn>
- エントリのRDNを指定します。
- <oc>
- エントリのオブジェクトクラスを指定します。
- <attr>
- エントリに設定するLDAPのアトリビュートとその値を指定します。RDNのアトリビュートについては、記述する必要はありません。
属性:
name: アトリビュート名
- <param>
- アトリビュートの値に該当するGoogle Appsのパラメータを指定します。
- <true>
- パラメータ"isSuspended"で値を真にする場合のLDAPの値です。
- <false>
- パラメータ"isSuspended"で値を偽にする場合のLDAPの値です。
GAE †
Google App Engineのデータストア内のID管理を行います。
- <appid>
- Google App EngineアプリケーションのアプリケーションIDを指定します。
- <admin>
- Google App Engineの管理ユーザを指定します。
- <passwd>
- Google App Engineの管理ユーザのパスワードを指定します。
- <command>
- Google App Engine連携用スクリプトgaesync.pyを実行する際のコマンドを指定します。
例:/usr/local/bin/python /opt/secioss/sbin/gaesync.py
gaesync.pyはhttps://sourceforge.jp/projects/secioss-auth/releases/のsecioss-idsuite-gaeから取得して下さい。
- <updatelog>
- 更新内容を一時的に記録するログファイル名を指定します。
ログの更新内容は、cronに"gaesync.py update <updatelogのログファイル名>"と設定することで、定期的にGoogle App Engineに反映されます。
- <object>
- データのオブジェクトを定義します。データストアで管理しているIDのモデルクラス名を指定します。
属性:
name: オブジェクト名
- <subcontainer>
- “ou=users"等、オブジェクトを配下に格納するエントリを定義します。
- <rdn>
- エントリのRDNを指定します。
- <oc>
- エントリのオブジェクトクラスを指定します。
- <attr>
- エントリに設定するLDAPのアトリビュートとその値を指定します。RDNのアトリビュートについては、記述する必要はありません。
属性:
name: アトリビュート名
- <param>
- アトリビュートの値に該当するGoogle Appsのパラメータを指定します。
SOAP †
SOAP通信ストレージを使用することで、LISMから他拠点のネットワークにあるLDAPサーバやLISMにHTTP経由でアクセスすることができます。従って、拠点をまたいだデータ同期が可能となります。
- <uri>
- アクセス先のSOAP URIを指定します。
- <proxy>
- アクセス先のSOAP Proxyを指定します。
- <basedn>
- LDAP、またはLISMのベースDNを指定します。
- <binddn>
- LDAP、またはLISMにバインドする際のDNを指定します。
- <bindpw>
- LDAP、またはLISMにバインドする際のパスワードを指定します。
アクセス先の拠点にあるWebサーバには、以下のファイルを設置し、外部からsoap2ldap.cgiへアクセスできるようにします。
- cgi/soap2ldap.cgi
- cgi/SoapLdap.pm
- cgi/soapdldap.conf