NTLM認証

提供:MoodleDocs
移動先:案内検索

このドキュメントでは、Moodleで NTLM/Windows統合認証 を設定する方法を説明します。

概要

統合Windows認証は、Windowsクライアントとサーバのセキュリティ機能を使用します。ユーザにユーザ名とパスワードの入力を求めるプロンプトは表示されません。クライアントコンピューター上の現在のWindowsユーザ情報は、MoodleサイトのWebサーバを使用したチャレンジ/レスポンス認証プロセスを通じてブラウザから提供されます。

仮定

  1. 認証のためにMS Active Directoryを実行しています。
  2. Webサイトを管理するサーバは、ユーザが所属するActive Directoryドメインのメンバーです。
  3. コンピュータのIP範囲から、ネットワーク内のユーザを定義できます(ドメインに対して認証されます)。
  4. LDAP認証のドキュメントに精通しているか、読んだことがあります。
  5. ユーザーのActive Directoryドメイン証明書は、認証サービスから DOMAINNAME\username として返される。あなたがSambaプロジェクトのWinbindサービスを使用している場合、あなたのWinbind設定に応じて、これは真実ではありません。あなたがMoodle 2.4以降を使用している場合、ドメイン認証情報のフォーマットを指定することができます (下記参照)。あなたが古いバージョンを使用していて、この最後の仮定を満たすように設定を変更できない場合、次のような行を削除またはコメントアウトする必要があります。
   $username = substr(strrchr($username, '\\'), 1); //strip domain info

関連するコード行を追加して、ドメインユーザの資格情報からユーザ名の部分を抽出し、$usernameに保存します。


非常に重要 : NTLM認証はLDAP認証に依存し、NTLM構成はLDAP認証設定ページ(サイト管理 >> プラグイン >> 認証 >> LDAPサーバ)で指定されます。したがって、NTLMを構成する前に、LDAP認証が正しくセットアップされて機能していることを確認してください。

インストール

インストールは必要ありません。 NTLM構成オプションについては、サイト管理 >> プラグイン >> 認証 >> LDAPサーバを参照してください。必要なことは

  • NTLM SSOを有効にする
  • クライアントのIP /サブネットマスクを設定します(以下を参照)
  • (オプション)ドメインユーザの資格情報フォーマットに "リモートユーザ名フォーマット" を設定します(以下を参照)
  • IISの場合: Windows認証をオンにします
  • Apacheの場合 - 以下に概説する3つの方法のいずれかを使用します
  • クライアントPCでは、moodleサーバのip/moodle URLを "ローカルイントラネット" に設定する必要がある場合があります(IEから、ツール -> オプション -> セキュリティ -> ローカルイントラネット)

NTLM SSOを実行するには、次の条件を満たす必要があることに注意してください。

  • 1回のGETリクエストでログインページに到達した場合
  • あなたはldap-> ntlmsso_enabledを持っています
  • あなたはldap-> ntlmsso_subnetを持っています
  • あなたはログに記録されていません
  • クライアントのIPはntlmsso_subnetにあります

したがって、IPサブネットを設定する必要があります。

統合認証をオンにする方法

auth/ldap/ntlmsso_magic.phpファイルでは、サーバでNTLM/統合認証を有効にする必要があります。有効にしないと、認証が機能しません。

IIS構成

IIS管理コンソールを開き、auth/ldap/ntlmsso_magic.phpファイルに移動します。

IIS 6.0

  1. ファイルを右クリックし、プロパティを選択します
  2. "ファイルセキュリティ" タブで、認証とアクセス制御の "編集" ボタンをクリックします
  3. "匿名アクセスを有効にする" のチェックを外し、"統合Windows認証" にチェックマークを付ける

IIS 7.x

  1. 'auth/ldap' フォルダに移動した後、コンテンツビューに切り替えます
  2. ファイルを右クリックし、"機能ビューに切り替える" を選択します
  3. 右側の認証アイコンをクリックします
  4. '匿名認証' を選択し、'無効にする' ボタンをクリックします
  5. 'Windows認証' を選択し、'有効にする' ボタンをクリックします
  • この記事によると、IIS 7.5(Windows Server 2008 R2に付属)を使用している場合、'Windows認証' を選択し、'プロバイダ' をクリックする必要があります。すると、有効なプロバイダの一覧が表示されます(デフォルトではNegotiateとNTLM)。順番を変更して、NTLM がリストの一番上に来るようにします。
  • 'Windows認証' が利用できない場合は、別の認証プロバイダとして(コントロールパネルに)インストールする必要があります。

APACHE構成

現在、これには4つの可能な方法があります。

LinuxでのSambaforApacheのNTLM部分の使用

  • Ubuntu 12.04以降を使用している場合は、次を使用してこれをインストールできます。
sudo apt-get install php5-ldap libapache2-mod-auth-ntlm-winbind winbind smbfs smbclient samba
sudo a2enmod auth_ntlm_winbind 
sudo /etc/init.d/apache2 restart

注: Ubuntu 14.04では、smbfsはcifs-utilsに置き換えられました

  • 以前のバージョンのUbuntuまたは別のディストリビューションを使用している場合は、http://samba.org/ftp/unpacked/lorikeet/mod_auth_ntlm_winbind/ からプラグインを入手できます。リンクからすべてのファイルをダウンロードする必要がありますが、 contribおよびdebianディレクトリはダウンロードしないでください。 READMEファイル内の指示に従います。 Debian/Ubuntuを使用している場合は、次のコンパイル手順に従うことができます。
  • コンパイルしたら、Apacheのmodulesサブディレクトリ内に配置し(この場所は、Apacheを自分でコンパイルしたり、さまざまなLinuxディストリビューションパッケージを使用したりするなど、さまざまな要因によって異なります)、Apacheの構成でモジュールをロードして有効にします。たとえば、Apacheモジュールが/usr/lib/apache2/modulesの下にある場合、Apache構成ファイル(通常はapache2.confまたはhttp2.confと呼ばれます)に次のようなものが必要になります。
 <IfModule !mod_auth_ntlm_winbind.c>
      LoadModule auth_ntlm_winbind_module /usr/lib/apache2/modules/mod_auth_ntlm_winbind.so
  </IfModule>
  • Samba winbind デーモンパッケージをインストールします。このパッケージは、Sambaの構成ファイルに依存して、いくつかの重要な設定(Windowsドメイン名、uidおよびgid範囲のマッピングなど)を取得します。それに加えて、Linux/Unixマシンをドメインの一部にする必要があります。そうしないと、winbindはドメインコントローラからユーザとグループの情報を取得できません。この手順を実行するには、Sambaのドキュメントを読む必要がありますが、最も重要な部分は、smb.confファイルの[global]セクション内に次のような行があることです(既にあるものに加えて)。
 workgroup = DOMAINNAME
 password server = *
 security = domain
 encrypt passwords = true
 idmap uid = 10000-20000
 idmap gid = 10000-20000
およびコマンドの実行(rootとして):
 # net join DOMAINNAME -U Administrator
ここで、DOMAINNAME はNetBIOSウィンドウのドメイン名であり、 管理者 はドメインに新しいマシンを追加するのに十分なパーミッションを持つアカウントです。
コマンドを成功させるには、このアカウントのパスワードを入力する必要があります。
Windows環境では、コマンドを(rootとして)実行してみることもできます。
 # net join DOMAINNAME -S DCSERVER -U Administrator
ここで、DCSERVERはドメインコントローラーサーバです
また、SMBパケットに署名できるバージョンのSambaを使用している場合を除き、ドメインコントローラのセキュリティポリシーで "Microsoft Network Server:デジタル署名通信(常に)" が無効になっていることを確認してください。
  • winbindサービスを再起動して変更を適用し、以下を実行して正常に実行されていることをテストします。
 $ wbinfo -u
Windowsドメインユーザの完全なリストを取得する必要があります。-gを使用すると、ドメイングループリストが表示されます。
  • 後で必要になるため、winbindパッケージに認証ヘルパーコマンドntlm_authがインストールされていることを確認してください。ヘルパーは/usr/bin/ntlm_authにあると想定します。別の場所にいる場合は、以下の例のパスを調整してください。
  • このようなものをApache構成ファイル(通常はapache2.confまたはhttp2.confと呼ばれます)に追加します。この例では、Moodle $CFG->dirrootディレクトリが/var/www/moodleにあると想定します。
   <Directory "/var/www/moodle/auth/ldap/">
       <Files ntlmsso_magic.php>
           NTLMAuth on
           AuthType NTLM
           AuthName "Moodle NTLM Authentication"
           NTLMAuthHelper "/usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp"
           NTLMBasicAuthoritative on
           require valid-user
       </Files>
   </Directory>
  • Winbindパイプディレクトリのパーミッションを確認します(Ubuntuは/var/run/samba/winbindd_privilegedの下に配置します。別の場所に配置される場合があります)。 Apacheはそのディレクトリに入ることができる必要があるので、適切なパーミッションがあることを確認する必要があります。したがって、そのディレクトリのアクセス許可を確認し、それに割り当てられているグループの名前をメモしてください。次の例は、Ubuntu7.10マシンのものです。
 $ ls -ald /var/run/samba/winbindd_privileged
 drwxr-x--- 2 root winbindd_priv 60 2007-11-17 16:18 /var/run/samba/winbindd_privileged/
グループがwinbindd_privであることがわかります。
  • ディレクトリのアクセス許可を変更する代わりに(winbindを使用する他のサービスを壊す可能性があります)、Apacheユーザ(この例ではwww-dataですが、httpd、またはnobodyなど)を適切なグループの一部にします。 。 rootとして以下を実行します。
 # adduser www-data winbindd_priv
adduserは少なくともDebianとUbuntuで利用できます。ディストリビューションにadduserがない場合は、/etc/groupを手動で編集して同じ効果を得ることができます。
  • 変更を適用するには、Apacheサービスを停止して開始します。 Apacheのエラーログを見て、すべて問題がないことを確認してください。

行を次のように変更するだけです。

KeepAlive Off

を:

KeepAlive On

そしてapacheを再起動します(/etc/init.d/httprestart)

  • これはsamba winbindオプションが機能している人々からのいくつかのメモです
-- Ubuntu7.04を使用して動作させました。それは私がドキュメントを更新するために使用したものです。 IñakiArenaza 2007年9月30日10:43(CDT)
-- RM CC4 ActiveDirectoryドメインのUbuntu8.04LTSでこれを動作させています。 Ian 2009年12月15日16:31(GMT)
-- Ubuntu 10.04 Lucidで実行すると、Apache2はADv6ですぐにこれを実行できるようになりました。 IñakiArenazaのLDAPクローンプラグインを使用する場合は、新しいldapプラグインを指すDirectoryタグの別のコピーをapache2.confに追加する必要があることに注意してください。--Christopher O'Kelly 2012年4月16日10:09(WST)
--Ubuntu 14.04では、"ntlm_auth reports Broken Helper.BH NT_STATUS_UNSUCCESSFUL NT_STATUS_UNSUCCESSFUL" というエラーが発生していたため、NTLM認証を動作させるために以下の作業を行いました。(Launchpadより)ngmares
 usermod -a -G winbindd_priv www-data
 chgrp winbindd_priv /var/lib/samba/winbindd_privileged
 ln -s /var/lib/samba/winbindd_privileged/pipe /var/run/samba/winbindd_privileged/pipe

LinuxでのApache用のNTLM認証モジュールの使用

NTLM Authモジュールは少し古くなっており、その作成者でさえ、 Linux上のApacheを使用したSambaのNTLM部分を使用することを提案しています。

ここから入手してください

  1. モジュールの入手先: http://modntlm.sourceforge.net/
  2. パッケージに付属のREADME内およびそこに記載されている指示に従ってください。

私(IñakiArenaza)は、このモジュールよりも Linux上のApacheを使用したSambaのNTLM部分を使用することを強くお勧めします。それはより良く維持され、より堅牢で、より多くの機能を備えています。

WindowsでのApache2用のmod_auth_sspiモジュールの使用

注: このセットアップは現在、実稼働環境で使用されているため、正しく構成およびテストされていれば、このような使用に適しています。

これはWindows上のApache 2で推奨されている方法であるが、Linux/UNIX システムでは動作 しない。 他の NTLM モジュールと比較して、安定性とパフォーマンスに優れています。

  • mod_auth_sspiモジュールを http://sourceforge.net/projects/mod-auth-sspi/ からダウンロードします。これを書いている時点(2007.09.30)では、現在のバージョンはmod_auth_sspi 1.0.4であり、ダウンロードする2つの異なるZIPファイルがあります。
  • mod_auth_sspi-1.0.4-2.0.58.zip: Apache 2.0.xを使用している場合は、このファイルを使用してください。
  • mod_auth_sspi-1.0.4-2.2.2.zip: Apache 2.2.xを使用している場合は、このファイルを使用してください。

Apacheのx64バージョンを使用している場合mod_auth_sspix64バージョンは https://www.apachehaus.net/modules/mod_auth_sspi/ から入手できます。

これらのファイルはApacheバージョン2.4.xでは機能 しません

  • 適切なファイルを解凍し、mod_auth_sspi.so( bin サブディレクトリ内にあります)をApacheモジュールディレクトリにコピーします。
  • Apache 2構成ファイル(httpd.conf)を編集して、モジュールをロードします。
   <IfModule !mod_auth_sspi.c>
       LoadModule sspi_auth_module modules/mod_auth_sspi.so
   </IfModule>
  • 以下の2つの方法のいずれかを選択してください
方法1: この方法は、単一のMoodleインスタンスをホストするサーバに推奨されます。メイン設定ファイルからNTLMを設定し、以下をhttpd.confに追加します("C:\my-moodle" をMoodleインストールへのパスに置き換えます(例: "C:\my-moodle")。
   <Directory "C:\moodle\auth\ldap">
       <Files ntlmsso_magic.php>
           AuthName "Moodle at My College"
           AuthType SSPI
           SSPIAuth On
           SSPIOfferBasic Off
           SSPIAuthoritative On
           SSPIDomain <YOUR AD DOMAIN>
           require valid-user
       </Files>
   </Directory>
方法2: 別の方法は.htaccessファイルを使用することです
この方法は、複数のMoodleインスタンスをホストするサーバに推奨されます。これにより、Apacheを再起動せずに追加のMoodleインスタンスを構成できるようになり、ソリューションの移植性も少し向上します。 .htaccessファイル内で認証を構成できるようにするには、メインのhttpd.confにディレクティブを追加する必要があります。
   <Directory C:\moodle>
       AllowOverride AuthConfig
   </Directory>
ディレクトリ'C:\moodle\moodle\auth\ldap' に '.htaccess' という名前の新しいテキストファイルを作成し、次のディレクティブを追加します。
   <Files ntlmsso_magic.php>
       AuthName "Moodle at My College"
       AuthType SSPI
       SSPIAuth On
       SSPIOfferBasic Off
       SSPIAuthoritative On
       SSPIDomain mycollege.ac.uk
       require valid-user
   </Files>
これにより、Moodleフォルダを.htaccessによる認証構成を許可するように構成された任意のApache Webサーバに移動できます。

最後に、Internet Explorer 7以降では、httpd-ssl.confファイルの次の行も置き換える必要があります。

 BrowserMatch ".*MSIE.*" \ 

 BrowserMatch ".*MSIE [2-5]\..*" \

さらにヘルプとディスカッションが必要な場合: http://moodle.org/mod/forum/discuss.php?d=56565

Linux/UNIXでのApache用のKerberos認証モジュールの使用(mod_auth_kerb)

この例の環境の詳細:

  1. Active Directoryドメイン: EXAMPLE.AC.UK
  2. Active Directoryドメインコントローラ: dc.example.ac.uk
  3. Linux/UNIX Webサーバ: moodle.example.ac.uk
  4. Webサーバサービスのプリンシパル用のActive Directoryユーザアカウント: moodlekerb

moodle.example.ac.ukにKerberosをインストールし、krb5.confに次のように入力します(デフォルト: /etc/krb5.conf)

[libdefaults]
    default_realm = EXAMPLE.AC.UK
[domain_realm]
    example.ac.uk = EXAMPLE.AC.UK
[realms]
     EXAMPLE.AC.UK = {
                      admin_server = dc.example.ac.uk
                      kdc          = dc.example.ac.uk
                    }:
* Test kerberos
シェルプロンプトで以下のコマンドを実行します:
<pre>
$> kinit user@EXAMPLE.AC.UK

ここで、'user' は、パスワードを知っているActive Directoryアカウントです。

次に、以下を発行します:

$>klist

すべて問題がない場合は、ドメインコントローラ(KDC)から付与されたKerberosチケットが一覧表示されます。

  • moodle.example.ac.ukのHTTPサービスプリンシパルを作成します
  1. Active Directory(マシンアカウントではない)に 'moodlekerb' ユーザアカウントを作成して、Webサーバサービスプリンシパル(HTTP/moodle.example.ac.uk@EXAMPLE.AC.UK)にマップします。

注: moodle.example.ac.ukは、サーバの正規DNS名、つまりAレコード(CNAMEではない)である必要があります。さらに、有効なPTR(逆引きDNS)レコードが存在し、対応するAレコードと一致する必要があります。

  1. ktpass.exeユーティリティを使用して、サービスプリンシパルをマップし、キータブファイルを作成します

Apacheには、Windows ActiveDirectoryドメインコントローラー上のktpass.exeで生成されたkeytabファイルが必要です。 残念ながら、Windows Server 2003 SP1のこのコンポーネントは正しく機能しないため、ホットフィックスを入手する必要があります: http://support.microsoft.com/kb/919557

ドメインコントローラーで次のコマンドを実行します。

C:\path\to\hotfix\ktpass.exe -princ HTTP/moodle.example.ac.uk@EXAMPLE.AC.UK -mapuser EXAMPLE\moodlekerb -crypto DES-CBC-MD5 +DesOnly +setPass +rndPass -ptype KRB5_NT_PRINCIPAL -out moodle.example.ac.uk.keytab


C:\path\to\hotfix\moodle.example.ac.uk.keytabをmoodleウェブサーバにコピーし、場所(/etc/httpd/moodle.example.ac.uk.keytabなど)を覚えておいてください。

  • Apache / mod_auth_kerbを構成します

moodleホストのApache構成を編集し、以下のディレクティブを追加します。

        <Directory /path/to/moodle/docs/auth/ldap/>
                <Files ntlmsso_magic.php>
                        AuthName "Moodle"
                        AuthType Kerberos
                        KrbAuthRealms EXAMPLE.AC.UK
                        KrbServiceName HTTP
                        Krb5Keytab /etc/httpd/moodle.example.ac.uk.keytab
                        KrbMethodNegotiate on
                        KrbMethodK5Passwd on
                        KrbAuthoritative on
                        require valid-user
                </Files>
        </Directory>

IP /サブネットマスクの構成

サブネットマスクはバイナリパターンに基づいているため、理解するには少し知識が必要です。使用するIP/サブネットマスクを見つける最良の方法は、ネットワーク管理者に問い合わせることです。

  • カンマで区切って次々に入力するだけです。いくつかの構文を使用できます。
    • ネットワーク番号/プレフィックス長の組み合わせを入力します。例: 192.168.1.0/24
    • ピリオド文字で終わるネットワークの 'プレフィックス' を入力します。例: 192.168.1。
    • ネットワークアドレス範囲を入力します( これは最後のアドレスオクテクトに対してのみ機能します )。例: 192.168.1.1-254
3つの例はすべて、同じサブネットワークを参照しています。したがって、次のサブネットワークを指定する必要があると仮定します。
  • 10.1.0 / 255.255.0.0
  • 10.2.0.0 / 255.255.0.0
  • 172.16.0.0 / 255.255.0.0
  • 192.168.100.0/255.255.255.240
入力できます:
10.1.0.0/16, 10.2.0.0/16, 172.16.0.0/16, 192.168.100.0/28
または:
 10.1.0.0/16, 10.2.0.0/16, 172.16.0.0/16, 192.168.100.240-255
あるいは:
 10.1., 10.2., 172.16., 192.168.100.0/28
(ネットマスクがオクテクト境界に該当しないため、最後のものをネットワークの 'プレフィックス' として表現することはできません)。

ドメインユーザ資格情報フォーマットの構成

Moodle 2.4以降を使用している場合、古い固定フォーマットを使用する代わりに、ドメインユーザ資格情報のフォーマットを構成できる新しい設定があります。この設定は "リモートユーザ名フォーマット" と呼ばれます。この設定を空のままにすると、デフォルトの DOMAINNAME\username フォーマットが使用されます。オプションの %domain% プレースホルダを使用してドメイン名を表示する場所を指定し、必須の %username% プレースホルダを使用してユーザ名を表示する場所を指定できます。

広く使用されている形式は次のとおりです。

  • %domain%\%username% : MS Windowsのデフォルトで、ドメイン名、バックラッシュ文字、ユーザ名が含まれます。
  • %username%@%domain% : これはKerberosで使用されるのと同じフォーマットです(ドメイン名の後にアットマークが続き、その後にユーザ名が続きます)。
  • %domain%/%username% : このフォーマットを使用するようにSamba + Winbindを構成する人もいます。
  • %domain%+%username% : この他のフォーマットを使用するようにSamba + Winbindを構成する人もいます。
  • %username% : ユーザ名のみが含まれ、ドメイン部分は含まれません。

メモ/ヒント

  1. Firefoxを使用している場合は、次の手順に従う必要があります。
  • Firefoxをロードし、アドレスボックスに about:config と入力します。構成設定ページが表示されます。
  • フィルタボックスに "ntlm" という単語を入力して、NTLM文字列をフィルタリングします。 3つの設定が表示されます。
  • "network.automatic-ntlm-auth.trusted-uris" をダブルクリックします。
  • ボックスに、Moodleサーバの完全なURLを入力します。例えば

http://moodle.mydomain.com,(コンマは重要です)

  • Firefoxを閉じて再起動します。
  1. BASIC認証が有効になっていると、NTLMがまったく機能しないようです。 (これはKerberos方式を使用していましたが、他の方法でも機能する可能性があります)
  2. AD管理コンソールでアカウントが "First Last" のように表示される場合は、こちらの投稿で示されているように、ldap設定パラメータの 'User Attribute' をデフォルトの{blank} / 'cn'から 'sAMAccountName' に変更してください。理由は、一般的にcn名は "First Last" のように見え、ldap同期を行うと、Moodleのユーザ名は "first last" になりますが、IEは、Moodleに存在しない "domain\first.last" のアカウントをMoodleに渡します。

IIS7.5 Windows 2008R2で動作するMoodleのドメイン名を取得するには

http://support.microsoft.com/kb/896861 を参照してください。以下にリストされている主要なセクション。 スタート、ファイル名を指定して実行の順にクリックし、regeditと入力して、OKをクリックします。
レジストリエディタで、次のレジストリキーを見つけてクリックします。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
MSV1_0を右クリックし、新規をポイントして、マルチ文字列値をクリックします。
BackConnectionHostNamesと入力し、Enterキーを押します。
BackConnectionHostNamesを右クリックし、変更をクリックします。
値のデータボックスに、ローカルコンピュータ上にあるサイトのホスト名またはホスト名を入力し、OKをクリックします。
レジストリエディタを終了し、IISAdminサービスを再起動します。

Debian/Ubuntuでmod_auth_ntlm_winbindをコンパイルする

aptitude、synapticなどを使用して、次のパッケージ(およびそれらのすべての依存関係)をインストールする必要があります。

 autoconf apache2-threaded-dev debian-builder

それらをインストールしたら、テキストコンソールを開き、mod_auth_ntlm_winbindファイルをダウンロードしたディレクトリに移動し、次のコマンドを実行します(通常のユーザとして)。

 autoconf
 ./configure --with-apxs=/usr/bin/apxs2 --with-apache=/usr/sbin/apache2
 make

それはエラーなしでそれをコンパイルするはずです。次に、sudoを介してrootとしてコマンドを実行できるユーザとして、同じディレクトリから次のコマンドを実行します。

 sudo make install

これにより、最終的なmod_auth_ntlm_winbind.soファイルが作成され、残りのApache 2モジュールとともに/usr/lib/apache2/modulesの下にインストールされます(以下に示すファイルのサイズと最終変更時間は、インストールとは異なる場合があります)。

 ls -l /usr/lib/apache2/modules/mod_auth_ntlm_winbind.so
 -rw-r--r-- 1 root root 20921 2009-02-17 04:27 /usr/lib/apache2/modules/mod_auth_ntlm_winbind.so

関連項目