8.2.4 RADIUS/TACACS+/ローカルを使用したコマンド承認
RADIUS/TACACS+/ローカル(コンフィグレーション)を使用したコマンド承認方法について説明します。
RADIUSサーバ,TACACS+サーバ,またはローカルパスワードによる認証の上ログインしたユーザに対して,使用できるコマンドの種類を制限できます。これをコマンド承認と呼びます。コマンド承認の制限対象となるコマンドは,コンフィグレーションコマンド,運用コマンド,およびマニュアルに掲載されていないデバッグコマンドです。ただし,一部のコマンドは制限対象になりません。コマンド承認の設定有無に関係なく,常に実行できるコマンドを次の表に示します。
分類 |
コマンド |
---|---|
コンフィグレーションコマンド |
top,end※,exit※,quit |
運用コマンド |
logout,exit,quit,set terminal※,show whoami,who am i |
ユーザが使用できるコマンドは,RADIUSサーバまたはTACACS+サーバから取得するコマンドクラスおよびコマンドリスト,またはコンフィグレーションで設定したコマンドクラスおよびコマンドリストに従って制御されます。
制限したコマンドは,CLIの補完機能で補完候補として表示しません。なお,<vlan id>や<host name>などの,<>で囲まれたパラメータ部分の値や文字列を含んだコマンドを,許可するコマンドリストに指定した場合は,<>部分は補完候補として表示しません。
(1) コマンド承認の流れ
対象とするユーザのログインに先だって,コマンド承認のための設定をします。RADIUS/TACACS+指定時は,RADIUS/TACACS+のリモート認証サーバにコマンドクラスとコマンドリストを登録します。ローカル指定時は,コマンドクラスとコマンドリストをコンフィグレーションで設定します。
RADIUSサーバおよびTACACS+サーバによるログイン認証とコマンド承認の流れを次の図に示します。
RADIUS/TACACS+指定時は,ログイン認証と同時に,サーバからコマンドクラスおよびコマンドリストを取得します。ローカル指定時は,ログイン認証と同時に,コンフィグレーションで設定されたコマンドクラスおよびコマンドリストを使用します。本装置ではこれらのコマンドクラスおよびコマンドリストに従って,ログイン後のコマンドを許可または制限します。
RADIUSサーバおよびTACACS+サーバによるコマンド承認例を次の図に示します。
この例では,ログイン後,ユーザは本装置で運用コマンドshow interfacesなどを実行できますが,運用コマンドreloadはコマンドリストによって制限されているために実行できません。
(2) コマンドクラスの指定
各ユーザに対して,制限または許可するコマンドのポリシーを決定します。本装置では,コマンドクラスを指定することで,一定のポリシーに従ってコマンド群を許可したり制限したりできます。サポートするコマンドクラスとコマンド承認動作を次の表に示します。
コマンドクラス |
説明 |
コマンド承認時のコマンドの扱い |
|
---|---|---|---|
制限 |
許可 |
||
noenable |
コマンド入力モードを装置管理者モードへ変更する運用コマンドenableを制限するコマンドクラスです。一般ユーザモードで入力できる運用コマンドだけを許可します。 |
|
|
noconfig |
コンフィグレーションの変更を制限するコマンドクラスです。 |
|
|
noauthorization |
コマンド承認に関係するコンフィグレーションコマンドを制限するコマンドクラスです。コンフィグレーションの編集と操作に関するコンフィグレーションコマンドおよびコンフィグレーションを操作する運用コマンド(copy,erase configuration)も許可します。 |
|
|
allcommand |
コンフィグレーションコマンドおよび運用コマンドを制限しないコマンドクラスです。 |
|
|
root |
マニュアルに掲載されていないデバッグコマンド(psコマンドなど)を含め,すべてのコマンドを制限しないコマンドクラスです。 |
なし |
|
(3) コマンドリストの指定
コマンドクラス以外に,許可するコマンドと制限するコマンドをそれぞれコマンドリストに指定できます。許可コマンドリストおよび制限コマンドリストには,コンフィグレーションコマンドおよび運用コマンドを指定できます。マニュアルに掲載されていないデバッグコマンドは,コマンドリストに指定できません。
コマンドを指定する場合は,各コマンドリストに設定対象のコマンド文字列をスペースも意識して指定します。複数指定する場合はコンマ(,)で区切って並べます。なお,ローカルコマンド承認では,コマンド文字列をコンフィグレーションコマンドcommands execで一つずつ設定します。本装置では,設定されたコマンド文字列をコンマ(,)で連結したものをコマンドリストとして使用します。コマンドリストで指定されたコマンド文字列と,ユーザが入力したコマンドの先頭部分とが,合致するかどうかで判定し(前方一致),コマンドの実行を許可したり制限したりします。
なお,特別な文字列として,allを指定できます。allはコンフィグレーションコマンドおよび運用コマンドのすべてを意味します。
許可コマンドリスト,制限コマンドリスト,およびコマンドクラスの設定有無による動作例を次に示します。
- [設定例1]許可コマンドリストだけを設定した場合
-
設定された文字列と合致する文字列を含むコマンドだけを許可します。
表8‒13 設定例1の内容と指定コマンドの判定結果 設定
指定コマンド
判定
許可コマンドリスト="show ip ,ping"
制限コマンドリスト 設定なし
show ip arp
許可
show ipv6 neighbors
制限
ping ipv6 ::1
許可
reload
制限
許可コマンドリストに"show ip "(ipの後ろに半角スペース)と設定されているため,合致するshow ip arpコマンドは許可されますが,合致しないshow ipv6 neighborsコマンドは許可されません。
- [設定例2]制限コマンドリストだけを設定した場合
-
設定された文字列と合致する文字列を含むコマンドだけを制限します。該当しないコマンドは,すべて許可として判定されます。
表8‒14 設定例2の内容と指定コマンドの判定結果 設定
指定コマンド
判定
許可コマンドリスト 設定なし
制限コマンドリスト="reload"
show ip arp
許可
show ipv6 neighbors
許可
ping ipv6 ::1
許可
reload
制限
- [設定例3]許可コマンドリストと制限コマンドリストの両方を設定した場合
-
-
許可コマンドリストと制限コマンドリストに同じコマンド文字列が指定されている場合は,許可として判定されます。
-
許可コマンドリストと制限コマンドリストの両方に合致した場合は,合致したコマンド文字数が多い方の動作に判定されます。ただし,all指定は文字数1とします。
-
許可コマンドリストと制限コマンドリストの両方を設定し,両方に合致しない場合は,許可として判定されます。
表8‒15 設定例3の内容と指定コマンドの判定結果 コマンドリスト
指定コマンド
判定
許可コマンドリスト="show,ping ipv6"
制限コマンドリスト="show,ping"
show system
許可
show ipv6 neighbors
許可
ping ipv6 ::1
許可
ping 10.10.10.10
制限
clear logging
許可
-
- [設定例4]コマンドクラスとコマンドリストの両方を設定した場合
-
-
root以外のコマンドクラスを設定した場合は,コマンドクラスごとに規定されたコマンドリストと,設定したコマンドリストを合わせて判定します。コマンドクラスごとに規定されたコマンドリストを次の表に示します。
表8‒16 コマンドクラスごとに規定されたコマンドリスト コマンドクラス
規定のコマンドリスト
noenable
制限コマンドリスト="enable"
noconfig
制限コマンドリスト="config,copy,erase configuration"
noauthorization
制限コマンドリスト="aaa,username,radius-server,tacacs-server,parser view"
allcommand
許可コマンドリスト="all"
-
コマンドクラスrootを設定した場合は,コマンドリストの設定は無効になります。
表8‒17 設定例4の内容と指定コマンドの判定結果 設定
指定コマンド
判定
コマンドクラス="noauthorization"
許可コマンドリスト="username user password"
制限コマンドリスト 設定なし
username user password
許可
username
制限
コマンドクラスnoauthorizationを設定すると,usernameから始まるコンフィグレーションコマンドは制限されます。ログインパスワードを変更できるようにしたい場合は,username <user name> passwordを許可コマンドリストに設定します。
-
(4) RADIUS/TACACS+サーバへの登録情報
RADIUSまたはTACACS+のリモートサーバに,コマンドの制限に対応した属性値を設定します。例として,次の表に示すポリシーでコマンドを制限します。
ユーザ名 |
ポリシー例 |
設定内容 |
---|---|---|
staff |
コンフィグレーションコマンドおよび運用コマンドを制限なく使用できる。 |
コマンドクラス="allcommand" 許可コマンドリスト 設定なし 制限コマンドリスト 設定なし |
guest |
制限以外の運用コマンドを使用できる。 |
コマンドクラス 設定なし 許可コマンドリスト 設定なし 制限コマンドリスト="reload,inactivate,enable" |
test |
指定した運用コマンドだけを使用できる。 |
コマンドクラス 設定なし 許可コマンドリスト="show ip " |
(a) RADIUSサーバへの登録
RADIUSサーバを利用してコマンドを制限する場合は,認証時に次の表に示す属性を返すようにサーバで設定します。
属性 |
ベンダー固有属性 |
値 |
---|---|---|
25 Class |
− |
コマンドクラス 次の文字列のどれか一つを指定します。 noenable,noconfig,noauthorization,allcommand,root |
26 Vendor-Specific Vendor-Id: 21839 |
ALAXALA-Allow-Commands Vendor type: 101 |
許可コマンドリスト 許可するコマンドの前方一致文字列をコンマ(,)で区切って指定します。空白も区別します。 コマンドすべては"all"を指定します。 許可コマンドリストだけ設定した場合は,許可コマンドリスト以外のコマンドはすべて制限となります。 (例:ALAXALA-Allow-Commands="show ,ping ,telnet ") |
ALAXALA-Deny-Commands Vendor type: 102 |
制限コマンドリスト 制限するコマンドの前方一致文字列をコンマ(,)で区切って指定します。空白も区別します。 コマンドすべては"all"を指定します。 制限コマンドリストだけ設定した場合は,制限コマンドリスト以外はすべて許可となります。 (例:ALAXALA-Deny-Commands="enable,reload, inactivate") |
RADIUSサーバには,上記のベンダー固有属性を登録(dictionaryファイルなどに設定)してください。
VENDOR ALAXALA 21839 ATTRIBUTE ALAXALA-Allow-Commands 101 string ALAXALA ATTRIBUTE ALAXALA-Deny-Commands 102 string ALAXALA |
「表8‒18 コマンド制限のポリシー例」で決定したポリシーを一般的なRADIUSサーバに設定する場合,以下のような設定例になります。
staff Password = "******" Class = "allcommand" <-1 guest Password = "******" Alaxala-Deny-Commands = "enable,reload,inactivate" <-2 test Password = "******" Alaxala-Allow-Commands = "show ip " <-3 |
注 ******の部分には各ユーザのパスワードを設定します。
-
コマンドクラスallcommandで,デバッグコマンド以外のコマンドを許可します。
-
enable,reload,およびinactivateで始まるコマンドを制限します。
-
空白の有無が意味を持ちます。
"show ip "の後ろに空白があるため,show ip arpなどのコマンドは許可されますが,show ipv6 neighborsなどのコマンドは許可されません。
ほかのコマンドはすべて制限となります。
- 注意
-
-
本装置ではClassエントリを複数受信した場合,1個目のClassを認識し2個目以降のClassエントリは無効となります。
図8‒26 複数Classエントリ設定例 Class = "noenable" <-1 Class = "allcommand"
1. 本装置では一つ目のnoenableだけ有効となります。
-
本装置ではClassエントリに複数のクラス名を記述した場合,1個目のクラス名を認識し2個目以降のクラス名は無効となります。例えば,class="noenable,allcommand"と記述した場合,noenableだけが有効になります。
-
ALAXALA-Deny-Commands, ALAXALA-Allow-Commandsのそれぞれで同一属性のエントリを複数受信した場合,一つの属性につきコンマ(,)と空白も含み1024文字までを認識し,1025文字以降は受信しても無効となります。なお,次の例のように同一属性を複数エントリに記述し,本装置で2個目以降のエントリを受信した場合にはエントリの先頭に自動的にコンマ(,)を設定します。
図8‒27 複数Deny-Commandsエントリ設定例 ALAXALA-Deny-Commands = "inactivate,reload" <-1 ALAXALA-Deny-Commands = "activate,test,............" <-1
1. 本装置では下線の部分を合計1024文字まで認識します。
上記のDeny-Commandsを受信した場合は,下記のように2個目のエントリの先頭であるactivateコマンドの前にコンマ(,)が自動的に設定されます。
Deny-Commands = "inactivate,reload,activate,test,........."
-
(b) TACACS+サーバへの登録
TACACS+サーバを使用してコマンドを制限する場合は,TACACS+サーバで承認の設定として次の表に示す属性−値のペアを設定します。
service |
属性 |
値 |
---|---|---|
taclogin |
class |
コマンドクラス 次の文字列のどれかを指定 noenable,noconfig,noauthorization,allcommand,root |
allow-commands |
許可コマンドリスト 許可するコマンドの前方一致文字列をコンマ(,)で区切って指定します。空白も区別します。 コマンドすべては"all"を指定します。 許可コマンドリストだけ設定した場合は,許可コマンドリスト以外のコマンドはすべて制限となります。 (例:allow-commands="show ,ping ,telnet ") |
|
deny-commands |
制限コマンドリスト 制限するコマンドの前方一致文字列をコンマ(,)で区切って指定します。空白も区別します。 コマンドすべては"all"を指定します。 制限コマンドリストだけ設定した場合は,制限コマンドリスト以外はすべて許可となります。 (例:deny-commands="enable,reload,inactivate") |
「表8‒18 コマンド制限のポリシー例」で決定したポリシーを一般的なTACACS+サーバに設定する場合,次のような設定ファイルイメージになります。
user=staff { login = cleartext "******" service = taclogin { <-1 class = "allcommand" } } user=guest { login = cleartext "******" service = taclogin { deny-commands = "enable,reload,inactivate" <-2 } user=test { login = cleartext "******" service = taclogin { allow-commands = "show ip " <-3 } |
注 ******の部分には各ユーザのパスワードを設定します。
-
service名はtacloginと設定します。
コマンドクラスallcommandで,デバッグコマンド以外のコマンドを許可します。
-
enable,reload,およびinactivateで始まるコマンドを制限します。
-
空白の有無が意味を持ちます。
"show ip "の後ろに空白があるため,show ip arpなどのコマンドは許可されますが,show ipv6 neighborsなどのコマンドは許可されません。
ほかのコマンドはすべて制限となります。
- 注意
-
-
本装置ではclassエントリに複数のクラス名を記述した場合,1個目のクラス名を認識し2個目以降のクラス名は無効となります。例えば,class="noenable,allcommand"と記述した場合,noenableだけが有効になります。
-
deny-commands,allow-commandsのそれぞれで,一つの属性につきコンマ(,)と空白も含み1024文字までを認識し,1025文字以降は受信しても無効となります。
-
(5) コマンド承認の注意事項
-
コマンドクラスおよびコマンドリストを変更した場合は,次回のログイン認証後から反映されます。
-
RADIUS/TACACS+指定時,サーバ側でコマンドクラスまたはコマンドリストを設定していない場合,ユーザが認証されログインできてもすべてのコマンドが制限され,コマンドを実行できなくなります。ローカル指定時,コンフィグレーションコマンドでコマンドクラスまたはコマンドリストを設定していない場合も同様です。これらの場合は,コンソールからログインしてください。
また,コンフィグレーションコマンドaaa authorization commands consoleによってコンソールもコマンド承認の対象となっている場合は,デフォルトリスタート後,ログインしてください。
-
ローカル指定時,コマンド承認の設定はローカル認証でログインしたすべてのユーザに適用されます。コマンドクラスまたはコマンドリストが設定されていないユーザは,コマンドが制限されて実行できなくなるため,設定に漏れがないように注意してください。