LDAP認証
LDAP認証を構成する方法
概要
LDAP認証モードの宣言
その場でユーザー作成
グループベースのLDAPログイン
トラブルシューティング
コーナー状況
概要
LDAP(ライトウェイトディレクトリアクセスプロトコル)は、公共のインターネットまたは企業のイントラネットに関係なく、誰でも組織、個人、およびネットワーク内のファイルやデバイスなどの他のリソースを見つけることができるソフトウェアプロトコルです。 LDAPは、ネットワークのディレクトリサービスの標準であるX.500の一部であるDirectory Access Protocol(DAP)の「軽量」(コードの量が少ない)バージョンです。 LDAPは、初期バージョンにはセキュリティ機能が含まれていなかったため、軽量です。 Easy Projectは、1つまたは複数のLDAPディレクトリを使用したLDAP認証をネイティブでサポートします。 サポートされるディレクトリサービスの種類には、Active Directory、OpenLDAP、eDirectory、Sun Java System Directory Server、およびその他の互換性のあるディレクトリサービスが含まれます。
LDAPディレクトリは、次のレベルで構成される単純な「ツリー」階層に編成されます。
- に分岐するルートディレクトリ(開始場所またはツリーのソース)
- それぞれに分岐する国
- に分岐する組織
- に分岐する(エントリを含む)組織単位(部門、部門など)
- 個人(人、ファイル、プリンターなどの共有リソースを含む)
LDAP認証モードの宣言
[管理]に移動し、メニューの[LDAP認証]をクリックします。 ここでは、テストまたは削除するオプションを含む、既存のすべてのLDAP認証モードのリストがあります。 新しいものを作成するには、右上隅にある緑色の[新しい認証モード]ボタンをクリックします。
LDAPサービスプロバイダーは、URLを使用してディレクトリサーバーへの接続を構成します。 LDAP接続URLを生成するには、次のフィールドを指定する必要があります。
- お名前: ディレクトリの任意の名前。
- ホスト: LDAPホスト名(テストサーバー).
- ポート: LDAPポート(デフォルトは389)。
- LDAPS: LDAPSを使用してディレクトリにアクセスする場合、または必要な場合は、これをチェックします。
- アカウント: LDAPへの読み取りアクセス権を持つユーザー名を入力します。LDAPを匿名で読み取ることができる場合は、このフィールドを空のままにします(通常、Active Directoryサーバーは匿名アクセスを許可しません)。
- パスワード: アカウントのパスワード。
- ベースDN: LDAPディレクトリツリーの最上位DN(例:dc = example、dc = com)。
-
LDAPフィルター: フィルタを使用して、アプリケーションへのアクセスを許可するユーザーまたはグループの数を制限できます。 本質的に、フィルターは、アプリケーションがLDAPツリーのどの部分から同期するかを制限します。 フィルタは、ユーザーメンバーシップとグループメンバーシップの両方に対して作成でき、作成する必要があります。 これにより、アクセスを必要としないユーザーやグループでアプリケーションが氾濫することがなくなります。
サンプルフィルター
これらのフィルターは、Active Directory用に作成されています。 それらをOpenLDAPなどの何かに使用するには、属性を変更する必要があります。
これにより、「CaptainPlanet」グループのユーザーのみが同期されます。これは、 ユーザーオブジェクトフィルター:
(&(objectCategory=Person)(sAMAccountName=*)(memberOf=cn=CaptainPlanet,ou=users,dc=company,dc=com))
そして、これはこのグループのメンバーであるユーザーを、直接またはネストを介して検索します:
(&(objectCategory=Person)(sAMAccountName=*)(memberOf:1.2.840.113556.1.4.1941:=cn=CaptainPlanet,ou=users,dc=company,dc=com))
Active Directoryが持つことが重要 memberOf:1.2.840.113556.1.4.1941 CaptainPlanetグループ内でネストされたグループ(数値文字列を置き換えないでください)を検索する場合。
これにより、一部またはすべての4グループ(火、風、水、心)のメンバーであるユーザーが検索されます。
(&(objectCategory=Person)(sAMAccountName=*)(|(memberOf=cn=fire,ou=users,dc=company,dc=com)(memberOf=cn=wind,ou=users,dc=company,dc=com)(memberOf=cn=water,ou=users,dc=company,dc=com)(memberOf=cn=heart,ou=users,dc=company,dc=com)))
- タイムアウト(秒単位): LDAPプロバイダーは、指定された期間内にLDAP応答を取得しない場合、読み取り試行を中止します。 整数はゼロより大きくなければなりません。 ゼロ以下の整数は、読み取りタイムアウトが指定されていないことを意味します。これは、応答が受信されるまで無限に待機することに相当し、デフォルトで元の動作になります。 このプロパティが指定されていない場合、デフォルトでは、応答が受信されるまで待機します。
- オンザフライのユーザー作成: これをチェックすることにより、LDAPユーザーは、Easy Projectに初めてログインしたときに、Easy Projectアカウントが自動的に作成されます。 それ以外の場合は、ログインするLDAPユーザーごとにEasy Projectでユーザーを手動で作成する必要があります。
属性(例):
- ログイン属性: ユーザーがログインして認証されるログイン名。
- 名属性: 名の属性。
- 姓属性: 姓の属性。
- メール属性: メールアドレスの属性。
Easy Projectユーザーは、アカウントが認証にLDAPを使用するように設定されている場合、LDAPユーザー名とパスワードを使用して認証できるようになります(ユーザーのプロファイルを編集するときに「認証モード」設定を確認してください)。
これをテストするには、LDAPアカウントと一致するログインでEasy Projectユーザーを作成し(通常、Easy ProjectはLDAPデータを検索してアドバイスします)、Authentication modeドロップダウンリストで新しく作成したLDAPを選択します(このフィールドはLDAPが宣言されている場合にのみアカウント画面に表示されます)、パスワードは空のままにします。 LDAPユーザー名とパスワードを使用してEasy Projectにログインしてみてください。
その場でユーザー作成
チェックすることにより オンザフライのユーザー作成、LDAPユーザーは、Easy Projectに初めてログインしたときに、Easy Projectアカウントが自動的に作成されます。
そのためには、Easy Projectアカウントの作成に使用されるLDAP属性名(名、姓、電子メール)を指定する必要があります。
Active Directoryを使用した典型的な例を次に示します。
名前=マイディレクトリホスト= host.domain.orgポート= 389 LDAPS =アカウントなし= MyDomain \ UserName(またはADサーバーによってはUserName @ MyDomain)パスワード= ベースDN = CN = users、DC = host、DC = domain、DC = orgオンザフライのユーザー作成=はい属性ログイン= sAMAccountName名= givenName姓= sN電子メール=メール
区分化されたイントラネットを持つActive Directoryの別の例を次に示します。
名前=認証モードページの説明ホスト= DepartmentName.OrganizationName.localポート= 389 LDAPS =アカウントなし= DepartmentName \ UserName(またはADサーバーまたはバインドDNによってはUserName @ MyDomain uid = Manager、cn = users、dc = MyDomain、dc = com)パスワード= ベースDN = DC = DepartmentName、DC = OrganizationName、DC = localオンザフライユーザー作成=はい属性ログイン= sAMAccountName名= givenName姓= sN電子メール=メール
LDAP属性名は 大文字と小文字を区別.
動的バインドアカウント
上記のセットアップでは、Easy Projectが事前認証に使用するディレクトリサーバーに特別なアカウントが必要です。 キーワードを使用することは可能です $ login 現在のログインによって置き換えられるアカウントフィールドに。 この場合、パスワードは空のままにしておくことができます。次に例を示します。
アカウント:$login@COMPANY.DOMAIN.NAME
or
アカウント:company \ $ login
ベースDNバリアント
上記のベースDNがActive Directoryの標準である可能性は十分にありますが、雇用主のサイトのActive Directoryは標準ユーザー用のUsersコンテナーを使用していないため、これらの指示は長く苦痛な道を歩みました。 ログインに失敗した場合は、「DC = host、DC = domain、DC = org」だけを設定することをお勧めします。
グループベースのLDAPログイン
特定のLDAPグループに属するユーザーへのログインのみを許可する場合は、以下の手順に従う必要があります。 OpenLDAP LDAPサーバーとEasy Projectに基づいています。
1。 (OpenLDAPサーバー)memberofオーバーレイを有効にする
1.1。 ファイルを作成します。
vim〜/ memberof_add.ldif
以下のコンテンツで:
dn:cn = module、cn = config
objectClass:olcModuleList
cn:モジュール
olcModulePath:/ usr / lib / ldap
olcModuleLoad:memberof
1.2。 ファイルを作成します。
vim〜/ memberof_config.ldif
以下のコンテンツで:
dn:olcOverlay = memberof、olcDatabase = {1} hdb、cn = config
objectClass:olcMemberOf
objectClass:olcOverlayConfig
objectClass:olcConfig
objectClass:top
olcOverlay:memberof
olcMemberOfDangling:無視
olcMemberOfRefInt:TRUE
olcMemberOfGroupOC:groupOfNames
olcMemberOfMemberAD:メンバー
olcMemberOfMemberOfAD:memberOf
1.3。 それらをロードします。 OpenLDAPの設定に依存するため、いくつかの可能性を提案します。
sudo ldapadd -c -Y EXTERNAL -H ldapi:/// -f memberof_add.ldif
sudo ldapadd -c -Y EXTERNAL -H ldapi:/// -f memberof_config.ldif
または:
ldapadd -D cn = admin、cn = config -w "password" -H ldapi:/// -f memberof_add.ldif
ldapadd -D cn = admin、cn = config -w "password" -H ldapi:/// -f memberof_config.ldif
動的ランタイム構成エンジン(slapd-config)を使用する場合、再起動は必要ありません。
1.4。 (オプション)テストします:
ldapsearch -D cn = admin、dc = example、dc = com -x -W -b'dc = example、dc = com '-H'ldap://127.0.0.1:389 /' '(&(objectClass = posixAccount )(memberOf = cn = ldapeasyproject、ou = groups、dc = example、dc = com)) '
2。 (OpenLDAPサーバー)グループを作成します。 この例では、ユーザーは「ldap_user_1」であり、グループは「ldapeasyproject」です。
dn:cn = ldapeasyproject、ou = groups、dc = example、dc = com
cn:ldapeasyproject
説明:Easy Projectチケットシステムへのログインを許可されたスタッフメンバー
メンバー:cn = ldap_user_1、ou = people、dc = example、dc = com
オブジェクトクラス:groupOfNames
オブジェクトクラス:トップ
「dn」と「cn」をDIT構造に合わせて調整します
3。 (Easy Project)LDAP認証モードを編集します。 私の場合、「ldap_user_1」は「posixAccount」オブジェクトクラスです。
ベースDN:dc = example、dc = com
フィルタ:(&(objectClass = posixAccount)(memberOf = cn = ldapeasyproject、ou = groups、dc = example、dc = com))
トラブルシューティング
オンザフライのユーザー作成を使用する場合は、Easy ProjectがLDAPから有効なユーザーを作成するために必要なすべての情報を取得できることを確認してください。
たとえば、ディレクトリに有効なメールアドレスがない場合、その場でユーザーを作成することはできません(ログインしようとすると「無効なユーザー名/パスワード」エラーメッセージが表示されます)。
(これは、新しいEasy Projectバージョンでは当てはまりません。ユーザー作成ダイアログには、LDAPサーバーから検出できるすべてのものが入力され、新しいユーザーに残りを入力するように求められます。)
また、カスタムフィールドとしてマークされていないことを確認してください の提出が必要です ユーザーアカウント用。 これらのカスタムフィールドは、ユーザーアカウントがその場で作成されないようにします。
ログインシステムのエラーは、Easy Projectログの実際の情報とともに報告されないため、トラブルシューティングが困難になります。 ただし、使用する必要がある情報のほとんどを見つけることができます Wiresharkの Easy ProjectホストとLDAPサーバーの間。 これは、これら2つのホスト間のネットワークトラフィックを読み取る権限がある場合にのみ機能することに注意してください。
また、ツール「ldapsearch」を使用して、設定が正しいかどうかをテストすることもできます。 Easy ProjectをホストしているLinuxマシンにログインし(場合によってはldaputilsをインストールします)、次を実行します。
ldapsearch -x -b "dc=example,dc=com" -H ldap://hostname/ -D "DOMAIN\USER" -w mypassword [searchterm]
成功した場合は、検索クエリに一致するADのコンテンツのリストを取得します。 次に、Easy ProjectのLDAP設定のフィールドに入力する方法を理解します。
機能を検証する代替方法
- 誤って設定されている場合、検索するユーザーを削除できるLDAPフィルターを削除してください。
- 「ログイン属性」の隣には本のアイコンがあります。 それをクリックして、LDAPが正しく設定されている場合、「通常の属性」は実際のLDAPサーバーによって自動的に事前入力されます。 テキストフィールドの代わりに、ユーザーが設定を変更するケースの選択ボックスが表示されます。 ほとんどの場合、ユーザーはこれをすべて埋める必要はありません。 これが機能する場合、他のすべてが機能する可能性があります。
- 接続の問題については、LDAPサーバーリストの[テスト]ボタンを使用できます。 注意してください、これはLDAPに接続できるかどうかをテストするだけです。 一般的な問題は、LDAP設定がまだ保護されている場合でも、管理者がLDAPシステムユーザーを入力しないことです。 この場合、接続は機能するが、LDAPが「表示」しないためユーザーを追加できないため、テストは正常に実行されます。
- LDAPが実際に機能するかどうかをテストするには、「使用可能なユーザー」番号も使用できます。その値が0の場合、LDAPはデータを返さず、おそらく正しく設定されていません。 番号がある場合は、それをクリックして展開し、LDAPが表示する内容を確認します(それに応じてフィルターを調整します)。
値の形式
バインド資格情報のユーザー名は、UPN()ではなくDNとして指定する必要がある場合があります。user@domain.com)または ドメイン\ユーザー、このコメントで指摘されているように ソース:trunk / vendor / plugins / ruby-net-ldap-0.0.4 / lib / net / ldap.rb:
##bindで説明したように、ほとんどのLDAPサーバーでは、パスワードなどの認証者とともに、完全なDNをバインディング資格情報として提供する必要があります。
したがって、MyDomain \ MyUserNameまたは MyUserName@MyDomain.com ユーザー名は、Easy Projectログイン名としてMyUserNameのみを入力する場合があります。
遅いLDAP認証
LDAP認証が遅く、ADクラスターがある場合、AD物理サーバーの1つを[ホスト]フィールドに指定してみてください。 役立つかもしれません。
OpenDS
OpenDSサーバーを使用している場合、指定されたログイン属性によってユーザーを検索する最初のクエリで送信される要求コントロール「ページング結果」に問題がある可能性があります。 このリクエスト制御1.2.840.113556.1.4.319は、デフォルトでは匿名ユーザーには許可されていないため、バインドが行われる前であっても、Easy Projectがディレクトリ内のユーザーを見つけることができません。
このようなグローバルACIを追加します
./dsconfig -h SERVER_IP -p 4444 -D cn = "Directory Manager" -w PASSWORD -n set-access-control-handler-prop --trustAll --add global-aci:\(targetcontrol = \ "1.2.840.113556.1.4.319 \" \)\ \(version \ 3.0 \; \ acl \ \ "Anonymous \ control \ access \ to \ 1.2.840.113556.1.4.319 \" \; \ allow \ \(read \)\ userdn = \ "ldap:/// anyone \" \ ; \)
注:コマンドを1行で入力し、指示どおりにエスケープを使用します(「acl」の後の\はスペースを表す「\」を意味します)。
一部のユーザーはログインできません
問題: ユーザーの特定のOUは、他のすべてのユーザーがログインしている間はログインできません(無効なユーザーまたはパスワード)。 ユーザーはリモートサイトにいますが、同じサイトの他のOUのユーザーにはこのエラーは発生しません。
解決法: 問題はおそらく、誤った設定に関連しているのではなく、Active Directory(AD)の問題に関連しています。 接続できなかったユーザーは、ADユーザーのプロパティ(AD管理)で[ログオン先]フィールドが特定のPCに設定されていました。 「どこからでもログオン」に変更すると、動作するはずです。 具体的には、このフィールドを次のように設定する必要があります。ADユーザー->プロパティ->アカウント->どこからでもログオン。
有効な証明書なしでLDAPSを使用する場合のログインの問題
有効な証明書なしでLDAPSを使用すると、ログインで問題が発生する場合があります。 Easy Projectでは、LDAPS証明書は常に検証されます。 無効な証明書を使用すると、ユーザーはログインできなくなります。もちろん、 正しい長期的な解決策は、有効な証明書を使用することです。 ただし、これを達成するまでの一時的な解決策は、[管理] >> [LDAP認証] >> [それぞれの認証モードの編集]に移動することです。
設定を変更します LDAPS(証明書チェックなし).
Easy Project Serverソリューションを使用すると、Railsコンソールから一括で変更できます
rails r "AuthSource.update_all(verify_peer:false)" -e production
またはSQL経由
UPDATE auth_sources set verify_peer = 0;
コーナー状況
- LDAPからユーザーを自動的にインポート/作成する場合、ユーザー作成フォームに入力されたデフォルトのユーザータイプ設定が、LDAPに入力されたデフォルトのユーザータイプ設定よりも優先されます。 ユーザーが作成されると、この設定は後で変更できません(新しいLDAPを作成しない限り)。