フリー半径。 さまざまなタイプのユーザー認証を同時にサポート

この記事では、さまざまなタイプのユーザー認証をサポートするという点で、freeradiusをセットアップした経験を共有したいと思います。

残念ながら、この問題に直面して、私はグーグルや他のYandexの広大さに既製のソリューションを見つけることができなかったので、自分でマナを吸っていました。

だから、問題とその解決策:

だの:


1)freeradiusパッケージがインストールされたCentOS 6.6を実行しているサーバー(バージョン2.1.12)。
2)SASサーバー(Safenet Authentication Service)は、半径の2要素ユーザー認証を提供します。
3)ユーザーアカウントはSASサーバーとRADIUSサーバーに展開されたMySQLデータベースに保存されます。
4)freeradiusとSASの統合は、 指示に従ってすでに完了しており、正常に機能しています。これについては記事に書きません。
5)freeradiusとMySQLの統合も設定されています

問題:


SAS認証モジュールを有効にすると、radiusは、アカウントがMySQLに保存されているユーザー(RADIUS自体)の認証を停止します。

freeradiusとSASの統合には、追加モジュールchallAvecAuthが使用されます。これは、/ etc / raddb / sitesenabled / defaultファイルの認証セクションに記述されています。 そして、freeradiusのすべての指示では、authorizeセクションを読み取ると記載されていますが、radiusはリストされたすべてのモジュールでユーザーを順番に認証しようとしますが、実際には、場所に関係なく(最初に、最後に、真ん中)、彼は自分自身だけを使用するようにフリー半径を「強制」します。 他のすべてのモジュールは機能しません。

タスク:


SASを介したユーザーuser1とuser2、およびradiusを介したユーザーuser3とuser4の認証を構成します。

解決策:


この問題を解決するために、freeradiusに組み込まれたunlang言語が使用されました。 これを使用して、operatorsグループに属するユーザーuser1とuser2がSASを介して認証され、adminsグループに属するユーザーuser3とuser4がradius自体を介して認証されるという条件が記述されました。 グループ内のユーザーのメンバーシップに関する情報は、ユーザーuser3とuser4のペアのユーザー名とパスワードだけでなく、MySQLデータベースに保存されます。
MySQLテーブル構造:
select * from radusergroup; 

 ユーザー名グループ名優先順位
 user1演算子0
 user2演算子0
 user3管理者0
 user4管理者0 

 Select * from radcheck; 

  IDユーザー名属性op値
 1 user3 Cleartext-Password:= User3pwd
 2 user4 Cleartext-Password:= User4pwd 

承認セクションの/ etc / raddb / sites-enabled / defaultファイルで変更を行います。
1)SQLモジュールのコメントを解除します(まだコメント解除されていない場合)
2)sqlモジュールの後、次の検証条件を追加します。
 if (Sql-Group == admins) { pap } else { challAvecAuth } 

3)そして、別の行をコメントアウトします
パパ
その結果、認証セクションは次のようになります。
 authorize { preprocess chap mschap digest suffix eap { ok = return } sql expiration logintime if (Sql-Group == admins) { pap } else { challAvecAuth } } 

ここでの条件は最も簡単なものによって説明されます:ユーザーがadminsグループの一部である場合、papモジュールはそれを認証し、challAvecAuth(つまりSAS)は他のグループに対してそれを認証します。 どの条件を記述するかは、タスクと想像力にのみ依存します。
4)radiusを再起動し、PROFITを入手してください!

Source: https://habr.com/ru/post/J270631/


All Articles