ユーザーのApache認証を許可しますか?

ユーザーのApache認証を許可しますか?

私はこの質問に対する答えを読んだ。

https://stackoverflow.com/questions/4102763/apache-basic-authentication-book-for-those-allowed

IPベースで特定のユーザーを認証しない方法を理解するのに役立ちました。

<Directory /var/www/files/>
    Require valid-user
    Allow from 192.168.1.2
    Satisfy Any
    AuthUserFile /etc/apache2/basic.pwd 
    AuthName "Please enter username and password" 
    AuthType Basic  
</Directory>

次のデータベースがあるとします(認証に使用されるデータベースとは異なります)。

User        IP 
Mark        192.168.1.2
Mike        192.168.1.3
Karl        192.168.1.4

1- Apacheの設定を使用してデータベースに保存されているすべてのIPアドレスを許可できますか?静的ソリューションは必要ありませんか(データベースが動的に変更されます)?

2 - もう1つの問題は、許可されたIPに対する認証が失われることです。ユーザーが認証なしでページをインポートすることを許可されている場合、Apacheは認証にこのデータベースを使用できますか?詳細:Apacheがユーザーを認証するときにユーザー名認証資格情報を知っていますが、許可されている場合はユーザー名が失われ、Apacheに同じテーブルから許可されたIPを取得したいですか?ユーザー名からIPアドレスを取得します。

修正する:

注:私の考えではトニー答えは役に立ちますが、他の答えも望んでいます(モジュールを書く必要はありません)。

この質問の私の目標は「シングルサインオン」です。

  • 私は使う自由半径内部(ネットワーク内部)ユーザーは認証されているため、Apacheはそのユーザーを再認証したくありません。

  • ApacheはLDAPを使用して外部ユーザーを認証したいと思います。

  • 私の解決策は、内部ユーザーが認証なしで使用できるようにディレクティブを使用することですAllow。しかし、内部ユーザーがデータベースを使用できるようにする必要がありますか(最初の質問)?そして、内部ユーザーに権限を付与するようにApacheを設定しようとしています(認証するものではありません)(2番目の質問)?

注:外部ユーザー認証は非常に使いやすいです。LDAP(Apacheは認証資格情報を介して処理するユーザーの名前を知っているからです。)

私が提案するソリューションが私がやりたいことに適していますか?そうでない場合は、どのソリューションを提案しますか?

答え1

試してみましたか?モード認証外部、Apacheの認証メカニズムをカスタマイズできます。

IP、USER、PASSなどの環境変数へのアクセスを提供します。おなじみの言語でスクリプトを作成し、データベースから認証データをインポートできます。

Wikipediaにはいくつかの例があります。

カスタム認証スクリプトを作成する場合は、セキュリティの観点からよくコーディングされていることを確認してください。

このモジュールはCentOS(mod_authnz_external)とUbuntu(libapache2-mod-authnz-external)で利用できます。

以下は、基本的なApache設定例です。

LoadModule authnz_external_module modules.d/mod_authnz_external.so
DefineExternalAuth my_auth  environment /tmp/auth.sh

<Location />
   AuthType Basic
   AuthName "My super special access"
   AuthBasicProvider external
   Require valid-user
   AuthExternal my_auth
</Location>

これは、IP、ユーザー名、およびパスワードを記録し、提供されたユーザーが「Tony」の場合にのみ認証を許可する非常に単純なスクリプトです。

この特定の例では、スクリプトは実行可能ビットが設定されている /tmp/auth.sh の下に保存されます。必要なものは何でもできます(IP、ユーザー名などでフィルタリング)。

#!/bin/bash

echo $(date) ${IP} >> /tmp/log.txt
echo $(date) ${USER} >> /tmp/log.txt
echo $(date) ${PASS} >> /tmp/log.txt

#Very basic filtering.
if [[ "${USER}" != "Tony" ]]
then
        exit 1;
fi

関連情報