Cisco IOSにおけるAuthorization(認可)の設定についてまとめます。認可とは”誰にどのような権利を与えるか”で、認証とは異なる概念である事に注意して下さい。
概要
Authorizationについてまとめます。Authentication(認証)とは”誰であるかを確認する方法”で、Authorization(認可)とは”誰にどのような権利を与えるか”です。日本語では「認証」と「認可」は一文字違いですが意味が大きく異なりますので、充分注意して使い分けて下さい。
privilege levelとenable password
privilegeの定義
以下のコマンドでユーザに対するprivilegeを定義する事ができます。デフォルトのprivilegeは1で、デフォルトのprivilegeよりも権限を制限したい場合はprivilege 0を使用します。
Router(config)# username <user> privilege <level>
設定例は以下の通りです。
username CISCO secret CISCO username CISCO privilege 15 username NOC secret CISCO username CISCO privilege 0
enable passwordの定義
以下のコマンドでprivilegeに対するenable passwordを定義する事ができます。”enable secret”コマンドは、levelを省略したprivilege 15に対するパスワード設定を意味します。
Router(config)# enable secret [ level <level> ] <password>
enable passwordを使用して権限を昇格したい場合は、”enable <level>”コマンドを使用します。
Router>enable ? <0-15> Enable level view Set into the existing view <cr> Router>enable 2 Password: Router#show privilege Current privilege level is 2 Router#
コマンドの定義
privilegeに対して実行可能なコマンドを定義する事ができます。なお、allキーワードはワイルドカードの意味です。例えば以下のハイライトされている部分ならば、ipで始まるコマンドを全て許可するの意味になります。
privilege exec level 7 configuration terminal privilege exec level 7 show running-config privilege configure level 7 interface privilege interface level 7 shutdown privilege interface level 7 no shutdown privilege interface all level 7 ip
aaa new-model 階層構造に基づく認可
書式
aaa new-modelを使用すると、より柔軟な認可の設定が可能です。認可の設定には以下のコマンドを使用します。default, <list-name>は認可リストと呼ばれる設定で、認可の適用対象を定義します。<method>は認可方式と呼ばれる設定で、何を使って認可するかを定義します。
Router(config)# aaa authentication exec [ default | <list-name> ] <method>...
認可リスト
認可リストにはdefaultまたは<list-name>を設定する事ができます。
認証リスト | 説明 |
---|---|
default | VTY, console等の回線のうち全てが適用対象となります。 |
<list-name> | VTY, console等の回線を個別に指定します。 |
設定例を示します。以下はVTY接続(telnet接続)に対して、local databaseに基づき認可をする設定です。
aaa new-model ! aaa authentication login VTY local ! line vty 0 4 login authentication VTY
認可方式
認可方式には、何を使って認可するかを指定します。認可方式としは以下を指定する事ができます。
認証方式 | 説明 |
---|---|
local | local database(usernameコマンド)に定義された権限を与えます。 |
none | 認可を行いません(無条件でlineに対して定義された権限を与えます)。 |
if-authenticate | 認証されている場合はlineに対して定義された権限を与えます。 (認証されていない場合はアクセスを拒否します) |
group radius | radius-serverコマンドで指定したサーバで定義された権限を与えます。 |
group tacacs+ | tacacs-serverコマンドで指定したサーバで定義された権限を与えます。 |
group <name> | aaa group serverコマンドで指定したサーバで定義された権限を与えます。 |
none 設定例
none, if-authenticateの違いを理解するのがやや難しいため、設定例を示します。以下は認可リストとしてnoneを設定した設定です。
以下の場合は認可が行われません。“認可を行わない”とは”無条件にlineに対して設定された権限が与える”という意味です。すなわちprivilege levelコマンドで指定されたlevel 10の権限が与えられます。(なおデフォルトの権限はlevel 1ですので、privilege levelコマンドによる明示的な権限指定がない場合はlevel 1の権限が与えられます)
aaa new-model ! aaa authentication login VTY local aaa authorization exec VTY none ! username cisco privilege 7 password cisco ! line vty 0 4 privilege level 10 authorization exec VTY login authentication VTY
if-authenticate 設定例
if-authenticateの設定例を示します。
if-authenticateは”認証されている場合は認可する”という設定です。以下の場合はlocal databaseによる認証を通過しているので、lineに対して定義された権限level 10を与えます。(local databaseで設定されたlevel 7ではありません)。
aaa new-model ! aaa authentication login VTY local aaa authorization exec VTY if-authenticate ! username cisco privilege 7 password cisco ! line vty 0 4 privilege level 10 authorization exec VTY login authentication VTY
一方、以下の設定の場合は、認証されていません。if-authenticateは”認証されている場合は認可する(認証されていない場合はアクセスを拒否する)”という設定です。この場合は、telnet接続を試みると、”Authorization failed”というエラーメッセージが表示されアクセスに失敗します。
aaa new-model ! aaa authentication login VTY none aaa authorization exec VTY if-authenticated ! username cisco privilege 7 password cisco ! line vty 0 4 privilege level 10 authorization exec VTY login authentication VTY
コマンドの認可
どのlevelでどんなコマンドが実行できるかを定義する事もできます。定義方法には、privilegeコマンドを用いてルータ側で定義する方法と、RADIUS, TACACS+サーバ側で定義する方法があります。
以下のような書式を用いてコマンドに対する認可の設定を行います。
Router(config)# privilege <mode> [all] level <level> <command>
aaa new-model viewに基づく認可
準備
認可の方法は階層構造に基づくprivilege levelだけでなく、viewに基づく認可も可能です。アクセス権を定義したviewと呼ばれる設定を作成し、viewとユーザを紐づけます。Cisco公式ドキュメント上では”Role-Based CLI“と表記される事もあります。
viewを使用するためには、まずAAAを有効にします。その後、”enable view”コマンドでroot viewに変更します。(この時、求められるパスワードはenable passwordを入力して下さい)
Rack4R1(config)#aaa new-model Rack4R1(config)#exit Rack4R1# Jan 5 07:18:52.345: %SYS-5-CONFIG_I: Configured from console by console Rack4R1#enable view Password: Rack4R1# Jan 5 07:18:59.537: %PARSER-6-VIEW_SWITCH: successfully set to view 'root'. Rack4R1#
viewの定義
viewの作り方は以下の通りです。以下に例を示します。
parser view HTTP secret cisco command exec include conf t command configure include-exclusive all ip http
secretはパスワードを指定するコマンドです。
ユーザに定義されたパスワードと一致される必要があります。
commandはviewに対して許可するコマンドの定義です。
書式は以下の通りです。
オプション | 説明 |
---|---|
include | 指定したコマンドをviewに加えます |
exclude | 指定したコマンドをviewから取り除きます |
include-exclusive | 指定したコマンドをviewに加え、 このコマンドは他のviewで使用できないようにします。 |
Router(config-view)# command <mode> {include | include-exclusive | exclude} [all] <commad>
super-viewの定義
複数のviewの権利を兼ね備えたsuper-viewを定義する事もできます。以下は、HTTPとDEBUGの両方の権利を兼ね備えたSUPERという名のviewを定義する設定例です。なお、super-viewとその継承元のviewは同じパスワードを定義する必要があります。
parser view HTTP secret cisco command exec include conf t command configure include-exclusive all ip http ! parser view DEBUG secret cisco command exec include all debug command exec include all undebug command exec include terminal monitor ! parser view SUPER superview secret cisco view HTTP view DEBUG
viewの使用
以下のコマンドでviewを使用する事ができます。なお、<view>を省略するとroot viewになる事ができます。root viewは全てのコマンドの実行とviewの定義が可能なviewです。
Router# enable view <view>
viewとユーザの紐づけ
上記のように手動でenable viewコマンドを手動で入力するのではなく、telnetログイン時にユーザに対してviewによる権限を付与する事ができます。このような機能を実装する事によりfirst level support engineerに危険なコマンドを実行できないようにする事ができます。設定例は以下の通りです。
parser view HTTP secret cisco command exec include conf t command configure include-exclusive all ip http ! parser view DEBUG secret cisco command exec include all debug command exec include all undebug command exec include terminal monitor ! parser view SUPER superview secret cisco view HTTP view DEBUG ! username http secret cisco username http view HTTP username debug secret cisco username debug view DEBUG username super secret cisco username super view SUPER ! aaa authentication login VTY local aaa authorization exec VTY local ! line vty 0 4 authorization exec VTY login authentication VTY