🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Network+

Network+とは、IT業界団体CompTIA認定のネットワーク技術に関する知識を証明する資格です。ネットワーク技術者として、実務で必要なネットワークセキュリティ・ネットワークアーキテクチャなどの知識を取得している証明となります。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

2825閲覧

CentOS8 + FreeRadiusにてユーザに対してグループ情報を付与して条件判断を行いたい

triplequestion

総合スコア1

Network+

Network+とは、IT業界団体CompTIA認定のネットワーク技術に関する知識を証明する資格です。ネットワーク技術者として、実務で必要なネットワークセキュリティ・ネットワークアーキテクチャなどの知識を取得している証明となります。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2021/03/16 01:37

前提・実現したいこと

CentOS8・FreeRADIUS Version 3.0.20にてRADIUS認証を行っています。
/etc/raddb/usersにユーザ名とパスワード共にクライアントのMACアドレスを登録しています。
その際に、自分で定義したグループを付与してフィルタを行いたいと考えています。

例:
/etc/raddb/users
userA MyGroup := 'guestGroup',Cleartext-Password := "userA"
userB MyGroup := 'staffGroup',Cleartext-Password := "userB"

/etc/raddb/default
if ((%{MyGroup} == "guestGroup") && (NAS-Identifier == 'guestID')){
reject
}
if ((%{MyGroup} == "staffGroup") && (NAS-Identifier == 'staffID')){

else{ reject }

}

/etc/raddb/dictionary
ATTRIBUTE MyGroup 3000 string

発生している問題・エラーメッセージ

radius -Xにて実行すると、
if ((%{MyGroup} == "staffGroup") && (NAS-Identifier == 'guestID')) -> FALSE
条件分がFALSEになってしまいます。

RADIUSクライアントに対して自身で定義したグループを付与して、条件文で接続許可・拒否を行うにはどのように対応したら良いですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Attribute References によると、%{<list>:Attribute-Name}<list> を省略した場合は request (リクエスト属性) になるとのこと。
MyGroup はリクエスト属性ではないので、%{MyGroup} では参照できないのだと思います。
"%{control:MyGroup}" あるいは &control:MyGroup ではどうでしょうか?

if (&control:MyGroup == "staffGroup") { reject }

投稿2021/03/16 16:18

TaichiYanagiya

総合スコア12173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

triplequestion

2021/03/17 00:29

ありがとうございます。両方の記述にて早速試しました。 RADIUSD -XXにて実行して確認しましたが、条件判断にてエラー、FALSEとなってしまいました。 /defaut Debug: (0) if (&control:MyGroup == "v212"){ ERROR: (0) Failed retrieving values required to evaluate condition Debug: (0) if (%{control:MyGroup} == "v212"){ Debug: (0) if (%{control:MyGroup} == "v212") -> FALSE /user userA MyGroup = 'v212',Cleartext-Password := "userA" MyGroupに実際に文字列が代入されているか確認を行いたく、変数の値を表示する方法を知りませんか?
TaichiYanagiya

2021/03/17 01:49

「userA MyGroup = 'v212'」→「userA MyGroup := 'v212'」とするとどうでしょうか。 > MyGroupに実際に文字列が代入されているか確認を行いたく、変数の値を表示する方法を知りませんか? update request { Reply-Message += "DEBUG: %{control:MyGroup}" } を入れてみるとか?
triplequestion

2021/03/17 02:42

ありがとうございます。 今すぐは試行できないので、結果を後程、ご報告します。
triplequestion

2021/03/17 05:14

試行してみましたが、変数に文字列が代入されていなかったです。 下記、設定とデバッグログです。 /users userA MyGroup := 'v212',Cleartext-Password := "userA" /default if (&control:MyGroup == "v212"){ Failed retrieving values required to evaluate condition if (%{control:MyGroup} == "v212"){ if (%{control:MyGroup} == "v212") -> FALSE update request { EXPAND DEBUG: %{control:MyGroup} --> DEBUG: Reply-Message += DEBUG: } # update request = noop 自身で作成した属性に代入するには、:=ではなく、別の識別子があるのか調査してみます。 他に、参考するべき資料がありましたら、ご教示お願いします。
TaichiYanagiya

2021/03/17 08:01

/etc/raddb/sites-available/default のどこに設定していますか? authorize { } の中の files の後に設定しないと %{control:MyGroup} は拾えないです。
triplequestion

2021/03/17 08:24

ありがとうございました! authorize { } の中の files の後に設定したら、変数に代入されて、条件判断を行う事ができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問