RADIUSサーバー: チェック前にパスワードをハッシュする

RADIUSサーバー: チェック前にパスワードをハッシュする

pfSense のキャプティブ ポータルで認証するために RADIUS サーバーを設定する必要があります。残念ながら、RADIUS データベース内のすべてのパスワードは特定のアルゴリズムでハッシュ化されています。私は MySQL データベースを使用しています。

ユーザーはパスワードをプレーンテキストで RADIUS サーバーに送信しているので、送信されたパスワードを RADIUS サーバーでハッシュし、その後ユーザー名とハッシュされたパスワードの存在を確認できるかどうか疑問に思っています。

回避できるのであれば、クライアント側でパスワードをハッシュしたくありません。pfSense のキャプティブ ポータルは現在、RADIUS サーバーを使用している唯一のアプリケーションです。ただし、インフラストラクチャを拡張する場合は、すべてのクライアントにハッシュ アルゴリズムを実装する必要があります。

一般的に、RADIUS サーバーをこのように変更する可能性はありますか? コアを変更するのでしょうか? 残念ながら、送信されたデータがデータベース内のどのファイルで検索されるかはわかりません。

どこを見ればよいか、ヒントをくれる人はいませんか?

(私はUbuntu Server 12.04 x86、freeradius、freeradius-mysqlを使用しています)

答え1

あるいは、外部 PHP スクリプトを使用する場合は、authorize に次のコードを配置できます。

authorize {
    update {
        Tmp-String-0 := `/usr/bin/php5 -f /path/to/cpauth.php '%{User-Name}' '%{User-Password}'`
    }

    if (Tmp-String-0 == 'Accept') {
        update control {
            Auth-type := Accept
        }
    }
    else {
        reject
    }
}

次に、「Accept」または「Reject」をエコーし​​ます。

答え2

rlm_sql モジュールのインスタンスを構成します。

authorize {}ハッシュされたパスワードを取得するためのクエリを追加します。

update control {
    <password-attribute> := "%{sql:SELECT password FROM foo_table WHERE user=%{User-Name}}"
}

パスワード属性は、Cleartext-Password、MD5-Password、SMD5-Password、Crypt-Password、SHA2-Password、SHA-Password、SSHA-Password、LM-Password、NT-Password のいずれかになります。

次に、papモジュールを呼び出します。pap モジュールは Auth-Type を に設定しpap、User-Password 値をパスワード属性値に使用されるスキームと一致するようにハッシュして比較します。

関連情報