8.2.4 RADIUS/TACACS+/ローカルを使用したコマンド承認
RADIUS/TACACS+/ローカル(コンフィグレーション)を使用したコマンド承認方法について説明します。
- 〈この項の構成〉
 
(1) コマンド承認の概要
RADIUSサーバ,TACACS+サーバ,またはローカルパスワードによる認証の上ログインしたユーザに対し,使用できる運用コマンドの種類を制限することができます。これをコマンド承認と呼びます。使用できる運用コマンドは,RADIUSサーバまたはTACACS+サーバから取得する,コマンドクラスおよびコマンドリスト,またはコンフィグレーションで設定したコマンドクラスおよびコマンドリストに従い制御を行います。また,制限した運用コマンドは,CLIの補完機能で補完候補として表示しません。なお,<option>や<Host Name>などの,<>で囲まれたパラメータ部分の値や文字列を含んだ運用コマンドを,許可するコマンドリストに指定した場合は,<>部分は補完候補として表示しません。
| 
                      | 
               
| 
                      | 
               
本装置のaaaコンフィグレーションでコマンド承認を設定すると,RADIUS/TACACS+指定時は,ログイン認証と同時に,サーバからコマンドリストを取得します。ローカル指定時は,ログイン認証と同時に,コンフィグレーションで設定されたコマンドリストを使用します。本装置ではこれらのコマンドリストに従ってログイン後の運用コマンドを許可/制限します。
| 
                      | 
               
| 
                      | 
               
「図8‒15 RADIUS/TACACS+サーバによるコマンド承認のシーケンス」で端末からユーザが本装置にtelnetを実行すると,RADIUS/TACACS+サーバに対し本装置から認証,コマンド承認を要求します。認証成功時にRADIUS/TACACS+サーバからコマンドリストを取得し,ユーザは本装置にログインします。
「図8‒16 ローカルコマンド承認のシーケンス」で端末からユーザが本装置にtelnetを実行すると,ローカル認証を行います。認証成功時にコンフィグレーションからコマンドリストを取得し,ユーザは本装置にログインします。
ログイン後,ユーザは本装置で運用コマンドshow interfacesなどを実行できますが,運用コマンドreloadはコマンドリストによって制限されているために実行できません。
- 注意
 - 
                  
RADIUS/TACACS+サーバのコマンドリストの設定を変更した場合またはコンフィグレーションのコマンドリストを変更した場合は,次回のログイン認証後から反映されます。
 
(2) RADIUS/TACACS+/ローカルコマンド承認設定手順
RADIUS/TACACS+によるコマンド承認を使用するためには,次の手順でRADIUS/TACACS+サーバや本装置を設定します。
- 
                  
コマンド制限のポリシーを決める。
各ユーザに対し,運用コマンドの中で,制限・許可するコマンドのポリシーを決めます。
 - 
                  
コマンドリストを指定する。
コマンドクラス以外に,許可/制限コマンドリストとして,許可コマンドと制限コマンドをそれぞれ指定できます。
 - 
                  
RADIUS/TACACS+サーバを設定する。
決定したコマンド制限ポリシーを基に,RADIUSまたはTACACS+のリモート認証サーバに,コマンド制限のための設定を行います。
 - 
                  
本装置のリモート認証を設定する。
本装置でRADIUSまたはTACACS+サーバのコンフィグレーション設定とaaaコンフィグレーション設定を行います。
 - 
                  
コマンド承認の動作を確認する。
RADIUS/TACACS+を使用したリモート運用端末から本装置へログインし,確認を行います。
 
ローカルコマンド承認を使用するためには,次の手順で本装置を設定します。
- 
                  
コマンド制限のポリシーを決める。
各ユーザに対し,運用コマンドの中で,制限・許可するコマンドのポリシーを決めます。
 - 
                  
コマンドリストを作成する。
コマンドクラス以外に,コマンドリストとして許可コマンドと制限コマンドをそれぞれ指定できます。決定したコマンド制限ポリシーを基に,コマンドリストのコンフィグレーション設定を行います。
なお,コマンドクラスだけを使用する場合は作成不要です。
 - 
                  
ユーザにコマンドクラスまたはコマンドリストを割り当てる。
各ユーザに対し,コマンドクラスまたはコマンドリストを割り当てるusernameコンフィグレーション設定を行います。
その後に,aaaコンフィグレーション設定を行います。
 - 
                  
コマンド承認の動作を確認する。
本装置へローカル認証でログインし確認を行います。
 
(3) コマンド制限のポリシー決定
各ユーザに対し,運用コマンドの中で,制限・許可するコマンドのポリシーを決めます。ここでは,各ユーザがログインしたときに,あるコマンド群は許可し,それ以外のコマンドは制限するなどを決めます。ポリシーは「(5) RADIUS/TACACS+/ローカルコマンド承認の設定」で設定します。
コマンド制限・許可の対象となるのは,運用コマンドです。マニュアル未掲載のデバッグコマンド(psコマンドなど)は対象外で,常に制限されます(許可が必要な場合は,次に説明するコマンドクラスでrootを指定してコマンド無制限クラスとしてください)。なお,logout,exit,quit,disable,end,set terminal,show whoami,who am iコマンドに関しては常に許可されます。
本装置には,あらかじめ「コマンドクラス」として,以下のポリシーが定義されています。規定のコマンドクラスを選択することで,そのクラスの応じたコマンド制限を行うことができます。
| 
                         コマンドクラス  | 
                     
                         許可コマンド  | 
                     
                         制限コマンド  | 
                  
|---|---|---|
| 
                         root 全コマンド無制限クラス  | 
                     
                         従来どおりすべてのコマンド (マニュアル未掲載のデバッグコマンドを含む)  | 
                     
                         なし  | 
                  
| 
                         allcommand 運用コマンド無制限クラス  | 
                     
                         すべての運用コマンド"all"  | 
                     
                         なし(マニュアル未掲載のデバッグコマンドは不可)  | 
                  
| 
                         noconfig コンフィグレーション変更制限クラス(コンフィグレーションコマンド指定も制限します)  | 
                     
                         制限以外の運用コマンド  | 
                     
                         "config, copy, erase configuration"  | 
                  
| 
                         nomanage ユーザ管理コマンド制限クラス  | 
                     
                         制限以外の運用コマンド  | 
                     
                         "adduser, rmuser, clear password, password, killuser"  | 
                  
| 
                         noenable 装置管理者モードコマンド制限クラス  | 
                     
                         制限以外の運用コマンド  | 
                     
                         "enable"  | 
                  
また,コマンドクラス以外に,許可コマンドリストと制限コマンドリストをそれぞれ指定することもできます。
(4) コマンドリストの指定方法について
コマンドクラス以外に,許可/制限コマンドリストとして,許可コマンドと制限コマンドをそれぞれ指定できます。コマンドを指定する場合は,各コマンドリストに設定対象のコマンド文字列をスペースも意識して指定します。複数指定する場合はコンマ(,)で区切って並べます。なお,ローカルコマンド承認では,コマンド文字列をコンフィグレーションコマンドcommands execで一つずつ設定します。本装置では,その設定されたコマンド文字列をコンマ(,)で連結したものをコマンドリストとして使用します。
コマンドリストで指定されたコマンド文字列と,ユーザが入力したコマンドの先頭部分とが,合致するかどうかを判定します(前方一致)。なお,特別な文字列として,allを指定できます。allは運用コマンドすべてを意味します。
判定時に,許可コマンドリストと制限コマンドリストの両方に合致した場合は,合致したコマンド文字数が多い方の動作を採用します(ただし,all指定は文字数を1とします)。その際,許可コマンドリストと制限コマンドリストに同じコマンド文字列が指定されていた場合は,許可として判定されます。
また,コマンドクラスと許可/制限コマンドリストを同時に指定した場合は,コマンドクラスごとに規定されているコマンドリスト(「表8‒10 コマンドクラス一覧」中の" "で囲まれているコマンドリストに対応)と許可/制限コマンドリストを合わせて判定を行います。なお,コマンドクラスにrootを指定した場合,許可/制限コマンドクラスの設定は無効となり,マニュアル未掲載のデバッグコマンド(psコマンドなど)を含むすべてのコマンドが実行できるようになります。
例1〜7にある各コマンドリストを設定した場合,本装置でどのようなコマンドが許可/制限されるかを示します。
- (例1)
 - 
                  
許可コマンドリストだけを設定した場合,設定されたコマンドだけが実行を許可されます。
表8‒11 コマンドリスト例1 コマンドリスト
指定コマンド
判定
許可コマンドリスト="show ,ping"
制限コマンドリスト 設定なし
show ip arp
許可
ping ipv6 ::1
許可
reload
制限
 - (例2)
 - 
                  
許可コマンドリストと制限コマンドリストの両方に合致した場合は,合致したコマンド文字数が多い方の動作とします(ただし,all指定は文字数1とします)。
表8‒12 コマンドリスト例2 コマンドリスト
指定コマンド
判定
許可コマンドリスト="show ,ping ipv6"
制限コマンドリスト="show ip,ping"
show system
許可
show ipv6 neighbors
制限
ping ipv6 ::1
許可
ping 10.10.10.10
制限
 - (例3)
 - 
                  
許可コマンドリストと制限コマンドリストの両方を設定し,両方に合致しない場合は,許可として判定されます。
表8‒13 コマンドリスト例3 コマンドリスト
指定コマンド
判定
許可コマンドリスト="show"
制限コマンドリスト="reload"
ping 10.10.10.10
許可
reload
制限
 - (例4)
 - 
                  
許可コマンドリストと制限コマンドリストに同じコマンド文字列が指定されている場合は,許可として判定されます。
表8‒14 コマンドリスト例4 コマンドリスト
指定コマンド
判定
許可コマンドリスト="show"
制限コマンドリスト="show,ping"
show system
許可
ping ipv6 ::1
制限
 - (例5)
 - 
                  
コマンドリストをまったく設定しなかった場合は,logoutなどのコマンド以外はすべて制限されます。
表8‒15 コマンドリスト例5 コマンドリスト
指定コマンド
判定
許可コマンドリスト 設定なし
制限コマンドリスト 設定なし
すべて
制限
logout,exit,quit,disable,end,set terminal,show whoami,who am i
許可
 - (例6)
 - 
                  
クラスとしてrootを指定した場合は,従来どおりすべてのコマンドが実行可能となります。なお,コマンドクラスにrootを指定した場合,許可/制限コマンドクラスの制限は無効となり,マニュアル未掲載のデバッグコマンド(psコマンドなど)を含むすべてのコマンドが実行可能となります。
表8‒16 コマンドリスト例6 コマンドリスト
指定コマンド
判定
コマンドクラス="root"
すべて(マニュアル未掲載のデバッグコマンドを含む)
許可
 - (例7)
 - 
                  
制限コマンドリストだけを設定した場合は,リストに合致しない運用コマンドはすべて許可となります。
表8‒17 コマンドリスト例7 コマンドリスト
指定コマンド
判定
許可コマンドリスト 設定なし
制限コマンドリスト= "reload"
reload以外の運用コマンドすべて
許可
reload
制限
 
本マニュアルでは,例として次表のようなポリシーでコマンド制限を行います。
| 
                         ユーザ名  | 
                     
                         コマンドクラス  | 
                     
                         許可コマンド  | 
                     
                         制限コマンド  | 
                  
|---|---|---|---|
| 
                         staff  | 
                     
                         allcommand  | 
                     
                         運用コマンドすべて  | 
                     
                         なし  | 
                  
| 
                         guest  | 
                     
                         なし  | 
                     
                         制限以外の運用コマンドすべて許可  | 
                     
                         reload …※ inactivate …※ enable …※  | 
                  
| 
                         test  | 
                     
                         なし  | 
                     
                         show ip …※ (show ipv6 …は制限)  | 
                     
                         許可以外,すべて制限  | 
                  
注※ …は任意のパラメータを意味します(show ip …はshow ip arpなど)。
(5) RADIUS/TACACS+/ローカルコマンド承認の設定
「表8‒18 コマンド制限のポリシー例」で決定したコマンド制限ポリシーを基に,RADIUSまたはTACACS+のリモート認証サーバでは,通常のログイン認証の設定以外に,以下の属性値を使用したコマンド制限のための設定を行います。
なお,サーバ側でコマンド承認の設定を行っていない場合,ユーザが認証されログインできてもlogout,exit,quit,disable,end,set terminal,show whoami,who am i以外のすべてのコマンドが制限され,コマンドを実行できなくなりますのでご注意ください。その場合は,コンソールからログインしてください。
また,コンフィグレーションコマンドaaa authorization commands consoleによってコンソールもコマンド承認の対象となっている場合は,デフォルトリスタート後,ログインしてください。
- 
                  
RADIUSサーバを使用する場合
 
RADIUSサーバを利用してコマンド制限する場合は,認証時に以下のような属性を返すようにサーバで設定します。
| 
                         属性  | 
                     
                         ベンダー固有属性  | 
                     
                         値  | 
                  
|---|---|---|
| 
                         25 Class  | 
                     
                         −  | 
                     
                         クラス 次の文字列のどれか一つを指定します。 root,allcommand,noconfig,nomanage,noenable  | 
                  
| 
                         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で始まるコマンドを制限します。
allow-commandsが指定されていないため,ほかのコマンドは許可となります。
 - 
                  
空白の有無が意味を持ちます。
"show ip "の後ろに空白があるため,show ip arpなどのコマンドは許可されますが,show ipv6 neighborsなどのコマンドは許可されません。
ほかのコマンドはすべて制限となります。
 
- 注意
 - 
                  
- 
                        
本装置ではClassエントリを複数受信した場合,1個目のClassを認識し2個目以降のClassエントリは無効となります。
図8‒19 複数Classエントリ設定例 Class = "noenable" … 1 Class = "allcommand"
1. 本装置では一つ目のnoenableだけ有効となります。
 - 
                        
本装置ではClassエントリに複数のクラス名を記述した場合,1個目のクラス名を認識し2個目以降のクラス名は無効となります。例えば,class="nomanage,noenable"と記述した場合,nomanageだけが有効になります。
 - 
                        
ALAXALA-Deny-Commands, ALAXALA-Allow-Commandsのそれぞれにおいて,同一属性のエントリを複数受信した場合,一つの属性につきコンマ(,)と空白も含み1024文字までを認識し,1025文字以降は受信しても無効となります。なお,下記の例のように同一属性を複数エントリ記述し,本装置で2個目以降のエントリを受信した場合にはエントリの先頭に自動的にコンマ(,)を設定します。
図8‒20 複数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,........."
 
 - 
                        
 
- 
                  
TACACS+サーバを使用する場合
 
TACACS+サーバを使用してコマンド制限をする場合は,TACACS+サーバで承認の設定として以下のような属性−値のペアを設定します。
| 
                         service  | 
                     
                         属性  | 
                     
                         値  | 
                  
|---|---|---|
| 
                         taclogin  | 
                     
                         class  | 
                     
                         コマンドクラス 次の文字列のどれかを指定 root,allcommand,noconfig,nomanage,noenable  | 
                  
| 
                         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で始まるコマンドを制限します。
allow-commandsが指定されていないため,ほかのコマンドは許可となります。
 - 
                  
空白の有無が意味を持ちます。
"show ip "の後ろに空白があるため,show ip arpなどのコマンドは許可されますが,show ipv6 neighborsなどのコマンドは許可されません。
ほかのコマンドはすべて制限となります。
 
- 注意
 - 
                  
- 
                        
本装置ではclassエントリに複数のクラス名を記述した場合,1個目のクラス名を認識し2個目以降のクラス名は無効となります。例えばclass="nomanage,noenable"と記述した場合,nomanageだけが有効になります。
 - 
                        
deny-commands,allow-commandsのそれぞれにおいて,一つの属性につきコンマ(,)と空白も含み1024文字までを認識し,1025文字以降は受信しても無効となります。
 
 - 
                        
 
- 
                  
ローカルコマンド承認を使用する場合
 
「表8‒18 コマンド制限のポリシー例」で決定したポリシーをローカルコマンド承認で設定する場合,次のようなコンフィグレーションの設定になります。
username guest view guest_view username staff view-class allcommand … 1 username test view test_view ! parser view guest_view commands exec exclude all "enable" … 2 commands exec exclude all "inactivate" … 2 commands exec exclude all "reload" … 2 ! parser view test_view commands exec include all "show ip " … 3 ! aaa authentication login default local aaa authorization commands default local  | 
               
- 
                  
ユーザ"staff"に対し,クラス"allcommand"で運用コマンドすべてを許可します。
 - 
                  
enable,inactivate,およびreloadで始まるコマンドを制限します。
commands exec includeが指定されていないため,ほかのコマンドは許可となります。
 - 
                  
空白の有無が意味を持ちます。
"show ip "の後ろに空白があるため,show ip arpなどのコマンドは許可されますが,show ipv6 neighborsなどのコマンドは許可されません。
ほかのコマンドはすべて制限となります。
 
(a) ログインしての確認
設定が完了した後,RADIUS/TACACS+/ローカルを使用したリモート運用端末から本装置へのログインを行います。ログイン後,show whoamiコマンドでコマンドリストが設定されていること,コマンドを実行して制限・許可していることを確認してください。
> show whoami
Date 20XX/01/07 12:00:00 UTC
staff ttyp0    -----  2   Jan  6 14:17 (10.10.10.10)
 
Home-directory: /usr/home/staff
Authentication: TACACS+ (Server 192.168.10.1)
Class: allcommand
      Allow: "all"
      Deny : -----
Command-list: -----
>
> show clock
Wed Jan 7 12:00:10 UTC 20XX
> /bin/date
% Command not authorized.
> | 
                  
>show whoami
Date 20XX/01/07 12:00:00 UTC
guest ttyp0    -----  2   Jan  6 14:17 (10.10.10.20)
 
Home-directory: /usr/home/guest
Authentication: RADIUS (Server 192.168.10.1)
Class: -----
Command-list:
      Allow: -----
      Deny : "enable,reload,inactivate"
>
> show clock
Wed Jan 7 12:00:10 UTC 20XX
> reload
% Command not authorized.
> | 
                  
>show whoami
Date 20XX/01/07 12:00:00 UTC
test ttyp0    -----  2   Jan  6 14:17 (10.10.10.30)
 
Home-directory: /usr/home/test
Authentication: LOCAL
Class: -----
Command-list:
      Allow: "show ip "
      Deny : -----
>
> show ip arp
***コマンド実行されます***
> show ipv6 neighbors
% Command not authorized.
> |