OpenLDAPの”uid”属性について質問です。
【環境】
RHEL5(64-bit)
OpenLDAP2.3.43
【質問内容】
OpenLDAPを認証サーバとして、Webアプリケーションを構築しようと考えています。
ユーザID:オブジェクトクラスinetOrgPersonにおける”uid”属性
パスワード:オブジェクトクラスPersonにおける”userPassword”属性
で作成していますが、1点困っています。
ユーザIDに大文字小文字の区別がされないのです。
この件、調べてみたところ、
uid属性の等価比較する場合のルール(EQUALITY)が
、大文字/小文字を区別しない
状態になっているのでは?と考えました。
OpenLDAP(に標準添付されるスキーマ定義ファイル)のデフォルト値としても
EQUALITY caseIgnoreMatch
となっているようです。
そこで、/etc/openldap/schema/core.schema の内容を確認したところ、
該当箇所は以下のようになっていました。
#attributetype ( 0.9.2342.19200300.100.1.1
#NAME ( 'uid' 'userid' )
#DESC 'RFC1274: user identifier'
#EQUALITY caseIgnoreMatch
#SUBSTR caseIgnoreSubstringsMatch
#SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
また、他のスキーマ定義ファイルを見ても属性uidを定義している箇所は
存在しておりませんでした。
ここで疑問なのは、
・属性uidの定義箇所はコメントアウトされており、未設定に見える
・ですが、大文字小文字の判断の問題はあれど、属性値としてのuidは
登録できているように見える
です。
・未記載の場合に適用されるデフォルト値があり、そちらを参照している
等あるのでしょうか?
最終的に当方が実施すべきと考えていることは、属性uidに対し
EQUALITY caseExactMatch
を実施する、とかんがえておりますが、上記の通りその実施箇所が
わからなくなっております。
以上、ご存じの方がいらっしゃれば御回答頂きたく存じます。
(参考)
slapd.confにて以下のように定義しており、他のスキーマ定義ファイルを
参照していることは無いと認識しております。
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/その他、独自スキーマ
また、全てのスキーマ定義ファイルについて、キーワード”uid”で検索し、
有意な設定箇所が無いことを確認しております。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
>uid属性の等価比較する場合のルール(EQUALITY)が、大文字/小文字を区別しない
たしかにuid属性はRFCにおいて定義上そうなっていますね。
そして、OpenLDAPサーバーソフトウェアの中で、core.schemaなどにコメントで記述されているものはプログラムの中にハードコーディングされている模様です。試してみると分かりますがコメントを外してサーバーを起動してみると重複するスキーマというエラーになって起動できません。
> 最終的に当方が実施すべきと考えていることは、属性uidに対し
> EQUALITY caseExactMatch
> を実施する、とかんがえておりますが、上記の通りその実施箇所が
> わからなくなっております。
前述の通りuid属性の中身を書き換えてOpenLDAPサーバーを起動する事はできません。また、一応、なんといいますか、OIDを上書きするのはディレクトリーサービス上してはいけない事になっています。なので、実施すべきことは「スキーマの拡張」という作業になるのですが、ディレクトリーサービスというシステムの中で、スキーマはIANAで厳密に管理されており、いわば「オレオレスキーマ」というものは作ってはいけない決まりになっています。スキーマの拡張には最終的にIANAに届け出る必要があるのです。
以上の事より、3つの道のいずれかで対処する事になるかと思います。
1.スキーマには一切手を加えずに、検索時にcaseExactMatchルールを使う。
例えば、今使われているフィルターが、ユーザー名で置き換わる部分を%uと表現するとして &((objectClass=inetOrgPerson)(uid=%u)) などという場合、uidは定義の通りcaseIgnoreMatchになりますが、これを &((objectClass=inetOrgPerson)(uid:caseExactMatch:=%u)) とする事で、uidに対する条件としてcaseExactMatchマッチングルールを使用して検索を行う事ができます。
2.ディレクトリーサービスのルールの範囲内で実現可能な方法を検討する。
属性uid(のEQUALITY)がcaseIgnoreMatchなのは動かしようが無い事なので、caseExactMatchである別の属性を使用する事になります。
OpenLDAPのスキーマ定義ファイル(RHEL5であれば/etc/openldap/schemaの中にあるファイル)で言うと、core.schemaの中に入っているスキーマの中ではrefくらいでしょうか。java.schemaの中にはjavaClassNameなどの属性があります。それをMUST属性としているauxiliaryなオブジェクトクラスのjavaNamingReferenseなどを付与して、uid属性の変わりにjavaClassName属性を認証の名前として使用する事で、caseExactMatchルールを用いて検索する事ができます。
「ユーザー名なのに属性javaClassNameを使うのか?」という問いに対しては、こんな自由な事ができるのがLDAP(と言うかディレクトリーサービス)がLDAPたるゆえんであり、なおかつディレクトリーサービスの枠内で実現されています。他にも、(homeDirectoryなど)構文がIA5 StringでマッチングルールがcaseExactIA5Matchであるような属性にするという選択もあります。
3.あえてディレクトリーサービスのルールを破る。
前述の通り、ディレクトリーサービスでは、自分勝手に定義済み属性の属性値を変更したり、付与されていないOIDで属性やオブジェクトクラスを定義する事は許されません。
私も技術者の端くれでソフトウェアシステムのルールの中で生きている以上、積極的に賛成する事はできかねますが、閉じたシステム構築の中で属性の改ざんやオレオレスキーマを作成する事は技術的に不可能ではありません。自前でcaseExactMatchな属性myUidを作り、inetOrgPersonをスキーマ拡張してmyUid属性をMUSTに追加したmyInetOrgPersonオブジェクトクラスを作る事もできる訳です。
ただ、やはり後で収集がつかなくなる危険性もあるため、あえてこの手を選ぶのはどうしても1か2の方法が使えなかったら、だけにとどめておくのが良いでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 日本語 自立語/付属語という品詞区分の誤り 5 2022/09/05 00:20
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- 中途・キャリア 至急。転職試験合否について。 ご覧頂きありがとうございます。 転職を試みている社会人2年目20歳の第 4 2023/01/07 21:56
- Visual Basic(VBA) VBAにてメール作成した際、一部指定箇所のみ赤文字にしたいです。 下記の内容ですと作成されたメール本 1 2022/04/27 13:31
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- 哲学 物語における「魔法」は「実現可能性」というくびきがなく、作者がそれ故に恣意的に設定を決めることができ 2 2022/08/20 17:04
- 物理学 存在性 って分かりますか? 存在はエネルギー+性質です。性質とは何か? 1 2022/09/01 16:23
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
OpenLDAPの”uid”属性について質...
-
ApacheとJBossの組み合わのプロ...
-
TortoiseSVNがタイムアウトします
-
Windows セキュリティ 検出済み...
-
インストールした覚えがないア...
-
Windowsコマンドプロンプトのmo...
-
macでDocuWorks を使うのは無理?
-
VScodeでステップ実行が出来ない
-
VBA PDFで保存するマクロで実行...
-
libm.so.2: open に失敗しました
-
kali linuxのアーカイブ(過去の...
-
Windows11へのアップグレード
-
Eclipseでseasar2にmysql
-
マイクロソフトワンドライブア...
-
Notesの再セットアップ
-
ウインドウズ10のホームとプロ...
-
中国語のアンインストール
-
Ubuntuでローマ字入力できない
-
mint linuxのソフトがインスト...
-
Snow Leopardへアップグレード
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
QGISの使い方について(ポリゴ...
-
TortoiseSVNがタイムアウトします
-
SVNコミットエラー
-
httpd.confでのsvn設定でAuthzS...
-
subversionのBASIC認証の回数に...
-
OpenLDAPの”uid”属性について質...
-
ApacheとJBossの組み合わのプロ...
-
MySQLにて、SQLファイルの実行...
-
性能を満たしていない、パソコ...
-
インストールした覚えがないア...
-
Windowsコマンドプロンプトのmo...
-
VBA PDFで保存するマクロで実行...
-
VScodeでステップ実行が出来ない
-
Windowsの古いゲーム(32bit OS...
-
マイクロソフトワンドライブア...
-
macでDocuWorks を使うのは無理?
-
SolarisとLinuxの違い
-
MacOS10ですが11対応アプリをイ...
-
Windows8.1 AOS BOX coolnとは...
-
ソフトをインストールできない...
おすすめ情報