ユーザーアクセス権限
システム管理者は、ユーザーにコマンドや、設定の階層レベルおよびステートメントへのアクセスまたは権限を付与します。ユーザーは、アクセス権限のあるコマンドのみを実行し、アクセス権限のあるステートメントのみを表示および設定できます。拡張正規表現を使用すれば、ユーザーに許可または拒否する動作モードコマンド、設定ステートメント、階層を指定することもできます。これは、権限のないユーザーが、注意が必要なコマンドを実行したり、ネットワークに損害を与えうるステートメントを設定したりすることを防ぐための措置です。
アクセス権限レベルの概要
最上位の CLI コマンドと構成ステートメントには、それぞれに関連するアクセス権限レベルがあります。ユーザーは、アクセス権限のあるコマンドのみを実行し、アクセス権限のあるステートメントのみを設定および表示できます。1 つ以上のパーミッション フラグが、各ログイン クラスのアクセス権限を定義します。
ログイン クラスごとに、permissions
ステートメントで指定した権限レベルによって許可または拒否される動作モードおよび設定モードのコマンドおよびステートメント階層の使用を明示的に許可および拒否することもできます。
ログインクラスのパーミッション フラグ
パーミッション フラグを使用して、動作モードのコマンドや、構成階層レベルおよび構成ステートメントへのアクセス権限をユーザーに付与します。ユーザーのログイン クラスのパーミッション フラグは、[edit system login class]
の階層レベルに対して設定します。特定のパーミッション フラグを指定すると、ユーザーはそのフラグに対応するコマンドと、構成階層レベルおよび構成ステートメントへのアクセス権限を取得します。すべてのコマンドと構成ステートメントへのアクセス権限を付与するには、all
パーミッション フラグを使用します。
リストされている各コマンドは、そのコマンドと、コマンドのプレフィックスのサブコマンドを表しています。リストされている各構成ステートメントは、そのフラグがアクセスを許可する構成階層の最上位を表しています。
permissions
ステートメントでは、表 1 に示すパーミッション フラグを 1 つ以上指定します。パーミッション フラグは累積されません。情報を表示する view
や、構成モードに移行する configure
など、すべての必要なパーミッション フラグをクラスごとに記述する必要があります。2 種類のパーミッション フォームが、構成の個別部分に対するユーザー アクセスを制御します。
-
「プレーン」フォーム - パーミッション タイプに読み取り専用機能のみ提供します。
interface
がその例です。 -
-control
フォーム - パーミッション タイプに読み取りと書き込み機能を提供します。interface-control
がその例です。
構成階層レベルと構成ステートメントへの権限を許可するパーミッション フラグの場合、プレーン フォーム フラグはその構成への読み取り専用権限を付与します。たとえば、interface
パーミッション フラグは [edit interfaces]
階層レベルでの読み取り専用権限を付与します。このフラグの -control
フォームの場合、その構成への読み取りおよび書き込みが許可されます。たとえば、この場合の interface-control
フラグは、[edit interfaces]
階層レベルでの読み取りおよび書き込み権限を付与します。
表 1 は、 階[edit system login class class-name]
層レベルに ステートpermissions
メントを含めれば、設定が可能なログイン クラスのパーミッション フラグを示しています。
このパーミッション フラグによって、特定のアクセス権限セットが付与されます。各パーミッション フラグと、動作モードや設定モードのコマンド、およびそのフラグがアクセスを許可する構成階層レベルや構成ステートメントを併記します。
パーミッション フラグ |
説明 |
---|---|
動作モードまたは構成モードでアクセス構成を表示できます。 |
|
|
|
動作モードまたは構成モードでユーザー アカウント情報を表示できます。 |
|
ユーザーアカウント情報を表示し、 |
|
すべての運用モードのコマンドと構成モードのコマンドにアクセスできます。すべての構成階層レベルで構成を変更できます。 |
|
デバイスがネットワークから学習して、さまざまなネットワーク データベースに保存した情報を消去(削除)できます( |
|
構成モード( |
|
すべての制御レベルの操作( |
|
フィールド デバッグ コマンドを表示できます。デバッグ サポート用に予約されています。 |
|
ファイアウォール フィルターの設定を動作モードまたは構成モードで表示できます。 |
|
|
|
リムーバブル メディアの読み取りと書き込みができます。 |
|
フロータップの設定を動作モードまたは構成モードで表示できます。 |
|
|
|
ルーターまたはスイッチへのフロータップ要求を行うことができます。たとえば、Dynamic Tasking Control Protocol(DTCP)クライアントは、自身を 管理者ユーザーJunos OSに認証するため、 パーミッションを持 注:
この |
|
プロファイラ データを表示できます。 |
|
インターフェイスの設定を動作モードまたは構成モードで表示できます。 |
|
シャーシ、サービス クラス(CoS)、グループ、転送オプション、インターフェイスの構成情報を表示できます。以下の階層レベルで構成を変更できます。
|
|
デバイス上でのローカル シェルの起動、シェル内でのスーパーユーザーへの切り替え( |
|
|
|
|
|
|
|
|
|
|
|
構成モードおよび運用モードにおいて、通常のルーティング、ルーティング プロトコル、ルーティング ポリシーの設定情報を表示できます。 |
|
|
|
構成内のパスワードやその他の認証キーを表示できます。 |
|
構成内のパスワードやその他の認証キーを表示および変更できます。 |
|
運用モードおよび構成モードでセキュリティ設定情報を表示できます。 |
|
|
|
|
|
運用モードおよび構成モードで簡易ネットワーク管理プロトコル(SNMP)の設定情報を表示できます。 |
|
|
|
|
|
|
|
動作モードまたは構成モードでシステム レベルの情報を表示できます。 |
|
|
|
トレース ファイルの設定およびトレース ファイル プロパティの構成を表示できます。 |
|
トレースファイルの設定およびトレース ファイル プロパティの構成を変更できます。 |
|
|
|
|
|
さまざまなコマンドを使って、システム全体、ルーティング テーブル、プロトコル固有の現在の値や統計情報を表示できます。シークレット構成は表示できません。 |
|
シークレット、システム スクリプト、イベント オプションを除くすべての構成を表示できます。 注:
|
ログイン クラスに対する個々のコマンドとステートメント階層の許可および拒否
デフォルトでは、最上位の CLI コマンドおよび構成階層レベルは、関連するアクセス権限レベルを有しています。ユーザーは、アクセス権限のあるコマンドのみを実行し、アクセス権限のあるステートメントのみを表示および設定できます。ログイン クラスごとに、permissions
ステートメントで指定した権限レベルによって許可または拒否される動作モードおよび設定モードのコマンドおよびステートメント階層の使用を明示的に許可または拒否できます。
パーミッション フラグは、動作モードおよび設定モードのコマンドと、構成階層レベルおよびステートメントへのアクセス権限をユーザーに付与します。[edit system login class]
階層レベルでユーザーのログイン クラスに特定のパーミッションフラグを指定することで、対応するコマンドや、構成階層レベルおよび構成ステートメントへのアクセス権限をユーザーに付与します。すべてのコマンドと構成ステートメントへのアクセス権限を付与するには、all
パーミッション フラグを使用します。
ログイン クラスに allow-commands
、deny-commands
、allow-configuration
、deny-configuration
ステートメントを設定することで、コマンドおよびステートメントの使用を明示的に許可または拒否できます。ステートメントでは、拡張正規表現を使用して、クラスに割り当てられたユーザーに対して許可または拒否するコマンドとステートメントを定義します。
例:アクセス権限レベルを使用したユーザー許可の設定
この例では、ログインクラスのユーザー許可を設定します。ユーザーが許可されていないアクションをネットワークで実行するのを防ぐため、ログインクラスのユーザー許可を設定します。ユーザーはこれらのコマンドのみを実行できるようになり、ユーザーにアクセス権限が付与されたステートメントのみを表示したり変更したりできるようになります。この制限により、権限のないユーザーが機密性の高いコマンドを実行したり、ネットワークへの損害を発生する可能性があるステートメントを設定することを防ぐことができます。
要件
この例を設定する前に、デバイス初期化以外の特別な設定を行う必要はありません。
概要
各トップレベルのCLIコマンドと各設定ステートメントには、それぞれに関連付けられたアクセス権限レベルがあります。ログインクラスを設定すると、操作モードおよび設定モードコマンドおよび設定ステートメントの使用を明示的に許可または拒否できます。ユーザーは、アクセス権限のあるコマンドのみを実行し、アクセス権限のあるステートメントのみを表示および設定できます。
permissions
ステートメントで1つ以上のパーミッション フラグを指定することで、各ログインクラスのアクセス権を定義します。パーミッションフラグは、コマンド、ステートメント、階層へのアクセスをユーザーに付与します。パーミッション フラグは累積されません。各ログインクラスでは、情報を表示する view
や、設定モードに移行する configure
などを含めたすべての必要なパーミッションフラグをクラスごとに記述する必要があります。ユーザーのログインクラスに特定のパーミッションフラグを指定することで、対応するコマンド、ステートメントおよび階層にユーザーにアクセスを付与します。すべてのコマンドと構成ステートメントへのアクセス権限を付与するには、all
パーミッション フラグを使用します。パーミッションフラグは、パーミッションタイプに読み取り専用(「プレーン」形式)と 読み書き(末尾に-controlが付く形式)機能を提供します。
ユーザーがrollback
パーミッションフラグを有効にしてrollback
コマンドを発行すると、all
ログインクラスのパーッションビットが、拡張された正規表現よりも優先されます。
ログインクラスのユーザーアクセス権限レベルを設定するには、[edit system login class class-name]
階層レベルにpermissions
ステートメント、その次にパーミッションフラグを含めます。複数のパーミッションを、角括弧で囲まれたスペース区切りのリストとして設定します。
[edit system login] user@host# set class class-name permissions permission-flag user@host# set class class-name permissions [flag1 flag2 flag3]
利用可能なパーミッションを表示するには、CLIのコンテキストに応じたヘルプを使用し、疑問符(?)を入力します。permissions
ステートメントの後に:
[edit system login] user@host# set class class-name permissions ?
設定
この例では、snmp-admin
ログインクラスを設定します。このログインクラスのユーザーは、SNMPパラメーターのみを設定および表示できます。
アクセス権限レベルを使用したユーザー許可の設定
ステップバイステップでの手順
ログインクラスのアクセス権限を設定するには:
-
snmp-admin
ログインクラスをconfigure
、snmp
、およびsnmp-control
パーミッションフラグで設定します。[edit system login] user@host# set class snmp-admin permissions [configure snmp snmp-control]
設定されたパーミッションフラグは、SNMPに読み取り(snmp)と読み取り書き込み(snmp-control)の両方を提供します。この権限は、このログインクラスにのみ許可されるアクセス権限です。その他のアクセス権限は拒否されます。
-
snmp-admin
ログインクラスに割り当てられたユーザーアカウントを作成します。[edit system login] user@host# set user snmpuser class snmp-admin authentication plain-text-password New password: Retype new password:
結果
設定モードで、show system login
コマンドを入力して設定を確認します。出力結果に意図した設定内容が表示されない場合は、この例の手順を繰り返して設定を修正します。
user@host# show system login class snmp-admin { permissions [ configure snmp snmp-control ]; } user snmpuser { class snmp-admin; authentication { encrypted-password "$ABC123"; ## SECRET-DATA } }
デバイスの設定後、構成モードでcommit
を入力します。
検証
新しいログインクラスに割り当てられたユーザー名を使用してログインし、設定が正しく機能していることを確認します。
SNMP設定の確認
目的
snmp-admin
ログインクラスのユーザーがSNMPを構成できることを確認します。
アクション
設定モードで、[edit snmp]
階層レベルでSNMPステートメントを設定します。
[edit snmp] user@host# set name device1 user@host# set description switch1 user@host# set location Lab1 user@host# set contact example.com user@host# commit
意味
snmp-admin
ログインクラスのユーザーは、SNMPパラメーターを設定できます。このクラスに指定されたパーミッションフラグに、snmp(読み取り機能)とsnmp-control(読み取りおよび書き込み機能)の両方が含まれているため、ユーザーはこれらのパラメーターを設定できます。
SNMP以外の設定を確認
目的
snmp-admin
ログインクラスのユーザーがSNMP以外の設定ステートメントを変更できないことを確認します。
アクション
設定モードで、interfaces
階層にあるステートメントのようなSNMP以外のステートメントを設定します。
[edit] user@host# edit interfaces Syntax error, expecting <statement> or <identifier>.
意味
このsnmp-admin
ログイン クラスのユーザーは [edit interfaces]
階層を設定することができません。これは、このクラスに指定されたパーミッションフラグで許可されていないからです。この場合、CLIからエラーメッセージが発行されます。
操作モードのコマンド、設定ステートメント、および階層を許可または拒否するための正規表現
このトピックには、以下のセクションが含まれています。
- 許可と拒否のステートメントを理解する。
- 許可と拒否ステートメントのシンタックスを理解する。
- 許可と拒否ステートメントの優先とマッチングを理解する。
- 許可と拒否ステートメントルールを理解する。
- *-正規表現ステートメントの違いを理解する。
- リモート認証サーバー上の正規表現を使用する。
- 正規表現の指定
- 正規表現演算子
- 正規表現の例
許可と拒否のステートメントを理解する。
トップレベルのCLIコマンドおよび設定ステートメントの各階層には、関連するアクセス権限レベルがあります。各ログインクラスでは、操作モードや設定モードのコマンド、および階層設定やステートメントの使用を、特権レベルによって明示的に許可または拒否することができます。ユーザーは、アクセス権限のあるコマンドのみを実行し、アクセス権限のあるステートメントのみを表示および設定できます。
各ログインクラスのアクセス権限は、[edit system login class class-name]
階層のpermissions
ステートメントで指定された1つ以上のパーミッションフラグによって定義されます。さらに、拡張正規表現を定義することによって、特定のコマンドと設定階層の使用を許可または拒否することができます。ログインクラスの以下のステートメントを設定することで、正規表現の指定ができます。
-
allow-commands
およびdeny-commands
-運用モードと設定モードのコマンドへのアクセスを許可または拒否します。 -
allow-configuration
およびdeny-configuration
-特定の設定階層へのアクセスを許可または拒否します。注:これらのステートメントは、ゆっくりマッチングを行いますが、特にワイルドカードマッチングにおいては、より柔軟性があります。しかし、フルパスの正規表現やワイルドカードの表現が多数設定されていると、可能性のあるすべての文を評価することに非常に時間がかかり、パフォーマンスに悪影響を及ぼす可能性があります。
-
allow-commands-regexps
およびdeny-commands-regexps
-正規表現の文字列を使って、特定のコマンドへのアクセスを許可または拒否することができます。 -
allow-configuration-regexps
およびdeny-configuration-regexps
-正規表現の文字列を使って、特定の設定階層へのアクセスを許可または拒否することができます。
既存の設定でallow/deny-commands
またはallow/deny-configuration
のステートメントを使用している場合、allow/deny-commands-regexps
またはallow/deny-configuration-regexps
のステートメントで同じ設定オプションを使用すると、同じ結果にならない可能性があります。これらのステートメント2つの形式では、検索とマッチの方法が異なります。
allow/deny-*
ステートメントを使用してコマンドや設定ステートメントの階層を明示的に許可すると、permissions
ステートメントにすでに定義されている権限が追加されます。同様に、allow/deny-*
ステートメントを用いてコマンドや設定ステートメントの階層を明示的に拒否すると、permissions
ステートメントで既に定義されている権限が削除されます。
例えば、以下の設定では、configure
パーミッションにより、ログインクラスのユーザーが設定モードに入ることができます。さらに、allow-configuration
では、ユーザーが[edit system services]
階層レベルで設定を変更し、コミットすることができます。
[edit system login class test] user@host# set permissions configure allow-configuration "system services"
同様に、以下の構成では、ログインクラスのユーザーは、all
権限フラグが許可するすべての操作を実行できますが、[edit system services]
階層レベルの構成を表示または変更できないことを除いています。
[edit system login class test] user@host# set permissions all deny-configuration "system services"
許可と拒否ステートメントのシンタックスを理解する。
allow/deny-*
ステートメントの設定は、各ログインクラスで1回のみ可能です。ステートメントを設定する場合:
-
必要な数の正規表現を設定することができます。
-
正規表現は大文字と小文字を区別しません。
allow/deny-commands-regexps
ステートメントは、allow/deny-commands
ステートメントと相互に排他的であり、allow/deny-configuration
ステートメントはallow/deny-configuration-regexps
ステートメントと相互に排他的です。例えば、同じログインクラスにallow-configuration-regexps
とallow-configuration
の両方を設定することはできません。
コマンドへのアクセス権を定義するには、allow-commands
およびdeny-commands
ステートメントを使用して拡張正規表現を指定します。独立した完全な式をそれぞれ括弧( )で囲み、パイプ( | )記号で式を区切ります。パイプ記号で結ばれた正規表現の間には、スペースを使用しないでください。完全な式は、二重引用符で囲まれています。
allow-commands "(cmd1)|(cmd2)|(cmdn)" allow-configuration "(config1)|(config2)|(confign)"
たとえば、以下のように表示されます。
[edit system login class test] user@host# set allow-commands "(ping .*)|(traceroute .*)|(show .*)|(configure .*)|(edit)|(exit)|(commit)|(rollback .*)"
allow-commands
ステートメントで複雑な正規表現を指定する際に、アンカーを使用してください。たとえば、以下のように表示されます。
[edit system login] user@host# set class test allow-commands "(^monitor)|(^ping)|(^show)|(^exit)"
設定階層の一部にアクセス権限を定義するには、allow-configuration
およびdeny-configuration
ステートメントで拡張正規表現を指定します。フルパスを括弧( )で囲み、パイプ( | )記号を使用して表現を区切ります。パイプ記号で結ばれた正規表現の間には、スペースを使用しないでください。完全な式は、二重引用符で囲まれています。
allow-configuration "(config1)|(config2)|(confign)"
たとえば、以下のように表示されます。
[edit system login class test] user@host# set deny-configuration "(system login class)|(system services)"
allow/deny-commands-regexps
またはallow/deny-configuration-regexps
ステートメントを使用して拡張正規表現を指定する場合、それぞれの式を引用符(" ")で囲み、スペースで区切ってください。複数の式を亀甲括弧[ ]で囲みます。たとえば、以下のように表示されます。
[edit system login class test] user@host# set allow-configuration-regexps ["interfaces .* description .*" "interfaces .* unit .* description .*" “interfaces .* unit .* family inet address .*" "interfaces.* disable"]
set
、log
およびcount
などの修飾子は、マッチさせる正規表現文字列内ではサポートされていません。修飾子を使用した場合は、何もマッチしません。
正しい設定:
[edit system login class test] user@host# set deny-commands protocols
誤った設定:
[edit system login class test] user@host# set deny-commands "set protocols"
許可と拒否ステートメントの優先とマッチングを理解する。
デフォルトでは、allow-commands
およびallow-configuration
の正規表現が、deny-commands
およびdeny-configuration
の正規表現よりも優先されます。そのため、allow-commands
およびdeny-commands
ステートメントの両方に同じコマンドを設定すると、許可の操作が拒否の操作よりも優先されます。同様に、allow-configuration
およびdeny-configuration
ステートメントの両方に同じステートメントを設定すると、許可の操作が拒否の操作よりも優先されます。
例えば、以下の設定では、deny-commands
ステートメントに同じコマンドが含まれていても、test
ログインクラスのユーザーがrequest system software add
コマンドを使ってソフトウェアをインストールすることができます。
[edit system login class test] user@host# set allow-commands "request system software add" user@host# set deny-commands "request system software add"
同様に、以下の設定では、deny-configuration
ステートメントに同じ設定階層が含まれていても、test
ログインクラステストのユーザーが、[edit system services]
の設定階層を閲覧および変更することができます。
[edit system login class test] user@host# set allow-configuration "system services" user@host# set deny-configuration "system services"
もし、deny-commands
およびallow-commands
ステートメントに2つの異なるバリエーションのコマンドがある場合は、最も長くマッチしたものが常に実行されます。以下の設定では、test
ログインクラスのユーザーがcommit synchronize
コマンドを実行できますが、commit
のコマンドは実行することができません。これは、commit synchronize
がcommit
とcommit synchronize
の間で最も長くマッチし、allow-commands
に指定されているからです。
[edit system login class test] user@host# set allow-commands "commit synchronize" user@host# set deny-commands commit
以下の設定では、test
ログインクラスのユーザーがcommit
コマンドを実行できますが、commit synchronize
のコマンドは実行することができません。これは、commit synchronize
がcommit
とcommit synchronize
の間で最も長くマッチし、deny-commands
に指定されているからです。
[edit system login class test] user@host# set allow-commands commit user@host# set deny-commands "commit synchronize"
他のステートメントとは対照的に、 *-regexps
ステートメントのデフォルト動作は、 および 正deny-configuration-regexps
規表現deny-commands-regexps
が および 表allow-configuration-regexps
現よりも優先allow-commands-regexps
されます。[edit system]
階層レベルのregex-additive-logic
ステートメントを設定すると、allow-configuration-regexps
の正規表現がdeny-configuration-regexps
ステートメントよりも優先されるようになります。ステートメントを設定することで、上位の設定階層を拒否した上で、特定のサブ階層へのアクセスのみをユーザーに許可することができます。
許可と拒否ステートメントルールを理解する。
allow/deny-commands
、allow/deny-configuration
、allow/deny-commands-regexps
およびallow/deny-configuration-regexps
ステートメントは、ログインクラスのパーミッションよりも優先されます。これらのステートメントを設定する場合、以下のルールが適用されます。
-
allow-commands
およびdeny-commands
の正規表現には、commit
、load
、rollback
、save
、status
、update
のコマンドも含めることができます。 -
ユーザーが
all
パーミッションフラグを有効にしてrollback
コマンドを発行すると、rollback
ログインクラスのパーッションビットが、拡張された正規表現よりも優先されます。 -
拡張正規表現を指定した場合、ユーザーは
load override
コマンドを発行できません。ユーザーが発行できるのは、merge
、replace
およびpatch
設定コマンドのみです。 -
正規表現を表す際には、ワイルドカード文字*を使用することができます。ただし、正規表現の一部として使用する必要があります。・
[ * ]
または[ .* ]
だけの式はできません。また、allow-configuration .*
と評価されるため、allow-configuration
ステートメントに(interfaces (description (|.*))
のような式を設定することはできません。
*-正規表現ステートメントの違いを理解する。
このセクションでは、allow/deny-configuration
ステートメントとallow/deny-configuration-regexps
ステートメントの違いについて説明します。
allow/deny-configuration-regexps
ステートメントは、正規表現をトークンに分割し、それぞれを指定された設定のフルパスの各部分にマッチさせますが、allow/deny-configuration
ステートメントは完全な文字列とマッチさせます。allow/deny-configuration-regexps
ステートメントでは、各文字列が正規表現である一連の文字列を設定し、文字列の用語の間にはスペースが入ります。このシンタックスは、非常に高速なマッチングを実現しますが、柔軟性に欠けます。ワイルドカード式を指定するには、マッチさせたいスペース区切りの文字列の各トークンに対してワイルドカードを設定する必要があります。そのため、これらのステートメントにワイルドカード式を使用が難しくなります。
たとえば、以下のように表示されます。
-
allow-configuration-regexpsで1つのトークンにマッチする正規表現
この例では、ステートメントの最初のトークンに対して
options
が唯一マッチする式であることを示しています。[edit system] login { class test { permissions configure; allow-configuration-regexps .*options; } }
前述の設定は、以下のステートメントとマッチします。
-
set policy-options condition condition dynamic-db
-
set routing-options static route static-route next-hop next-hop
-
set event-options generate-event event time-interval seconds
前述の設定は、以下のステートメントと一致しません。
-
システム ホスト-ネーム ホストオプション
-
インターフェイスinterface-name説明オプション
-
-
allow-configuration-regexpsで3つのトークンにマッチする正規表現
この例では、ステートメントの3つ目のトークンに対して、唯一マッチする式
ssh
であることを示しています。[edit system] login { class test { permissions configure; allow-configuration-regexps ".* .* .*ssh"; } }
前述の例では、3つのトークンがそれぞれ
.*
、.*
および.*ssh
が含まれます。前述の設定は、以下のステートメントとマッチします。
-
システム ホスト-ネーム ホスト-ネームssh
-
システムサービスssh
-
システムサービス アウトバウンド-ssh
前述の設定は、以下のステートメントと一致しません。
-
interfaces interface-name description ssh
-
設定上のアクセスを制限するために、deny-configuration
ステートメントを使用するのは、deny-configuration-regexps
ステートメントを使用するよりも簡単です。表 2では、特定の構成へのアクセスを制限するという同じ結果を得るために、異なる設定でdeny-configuration
ステートメントとdeny-configuration-regexps
ステートメントの両方を使用しています。
設定拒否 |
使用: |
使用: |
結果 |
|
[edit system] login { class test { permissions configure; allow-configuration .*; deny-configuration .*xnm-ssl; } } |
[edit system] login { class test { permissions configure; allow-configuration .*; deny-configuration-regexps ".* .* .*-ssl""; } } |
以下の設定ステートメントは拒否されます。
|
|
[edit system] login { class test { permissions configure; allow-configuration .*; deny-configuration ".*ssh"; } } |
[edit system] login { class test { permissions configure; allow-configuration .*; deny-configuration-regexps ".*ssh"; deny-configuration-regexps ".* .*ssh"; deny-configuration-regexps ".* .* .*ssh"; } } |
以下の設定ステートメントは拒否されます。
|
シンプルな設定を必要とする場合、allow/deny-configuration
ステートメントも有効ですが、allow/deny-configuration-regexps
ステートメントの方がパフォーマンスが高く、allow/deny-configuration
ステートメントで式を組み合わせる際にあった曖昧さを解消しています。
リモート認証サーバー上の正規表現を使用する。
拡張正規表現を使って、特定のユーザーに許可または拒否される運用モードや設定モードのコマンドや設定文、階層を指定することができます。これらの正規表現は、[edit system login class class-name]
階層レベルのallow/deny-commands
、allow/deny-configuration
、allow/deny-commands-regexps
およびallow/deny-configuration-regexps
の各レベルでステートメントでローカルで指定します。認証サーバーの設定でJジュニパーネットワークスベンダー固有のTACACS+またはRADIUS属性を指定することで、これらの正規表現をリモートで指定します。ローカルとリモートの両方で認証パラメータを設定する場合、デバイスは、TACACS+RADIUS認証時に受け取った正規表現と、ローカルデバイスで定義された正規表現をマージします。
Junos OS Release 18.1より、TACACS+の認証にallow-commands-regexps
およびdeny-commands-regexps
のステートメントがサポートされています。
allow-commands
、deny-commands
、allow-configuration
、またはdeny-configuration
ステートメントを使用してローカル設定で複数の正規表現を指定する場合、正規表現を括弧内に設定し、パイプ記号で区切ります。完全な式を二重引用符で囲みます。例えば、以下のシンタックスで複数のallow-commands
パラメーターを指定することができます。
allow-commands "(cmd1)|(cmd2)|(cmdn)"
RADIUS認証サーバーは、以下の属性とシンタックスを使用します。
Juniper-Allow-Commands += "(cmd1)|(cmd2)|(cmd3)", Juniper-Deny-Commands += "(cmd1)|(cmd2)", Juniper-Allow-Configuration += "(config1)|(config2)", Juniper-Deny-Configuration += "(config1)|(config2)",
TACACS+ 認証サーバーは、以下の属性とシンタックスを使用します。
allow-commands = "(cmd1)|(cmd2)|(cmdn)" deny-commands = "(cmd1)|(cmd2)|(cmdn)" allow-configuration = "(config1)|(config2)|(confign)" deny-configuration = "(config1)|(config2)|(confign)"
allow-commands-regexps
、deny-commands-regexps
、allow-configuration-regexps
、またはdeny-configuration-regexps
ステートメントを使用してローカル構成で複数の正規表現を指定する場合は、正規表現を二重引用符で囲み、スペース演算子で区切って設定します。完全な式を正方形で囲みます。例えば、以下のシンタックスで複数の許可コマンドパラメーターを指定することができます。
allow-commands-regexps [ "cmd1" "cmd2" "cmdn" ]
RADIUS認証サーバーは、以下の属性とシンタックスを使用します。
Juniper-Allow-Configuration-Regexps += "(config1)|(config2)|(confign)", Juniper-Deny-Configuration-Regexps += "(config1)|(config2)|(confign)",
TACACS+ 認証サーバーは、以下の属性とシンタックスを使用します。
allow-commands-regexps = "(cmd1)|(cmd2)|(cmdn)" deny-commands-regexps = "(cmd1)|(cmd2)|(cmdn)" allow-configuration-regexps = "(config1)|(config2)|(confign)" deny-configuration-regexps = "(config1)|(config2)|(confign)"
RADIUSやTACACS+サーバーは、個々の表現を別の行で指定する簡略化されたシンタックスをサポートしています。例えば、RADIUSサーバーのシンプルなシンタックスは次のとおりです。
Juniper-Allow-Commands += "cmd1", Juniper-Allow-Commands += "cmd2", Juniper-Allow-Commands += "cmdn",
同様に、TACACS+ サーバーのシンプルなシンタックスは次の通りです。
allow-commands-regexps1 = "cmd1" allow-commands-regexps2 = "cmd2" allow-commands-regexpsn = "cmdn"
表 3ローカル認証設定とTACACS+サーバー認証設定を区別します。
ローカル設定 |
リモートTACACS+ 設定 |
---|---|
login { class local { permissions configure; allow-commands "(ping .*)|(traceroute .*)|(show .*)|(configure .*)|(edit)|(exit)|(commit)|(rollback .*)"; deny-commands .*; allow-configuration "(interfaces .* unit 0 family ethernet-switching vlan mem.* .*)|(interfaces .* native.* .*)|(interfaces .* unit 0 family ethernet-switching interface-mo.* .*)|(interfaces .* unit .*)|(interfaces .* disable)|(interfaces .* description .*)|(vlans .* vlan-.* .*)" deny-configuration .*; } } |
user = remote { login = username service = junos-exec { allow-commands1 = "ping .*" allow-commands2 = "traceroute .*" allow-commands3 = "show .*" allow-commands4 = "configure" allow-commands5 = "edit" allow-commands6 = "exit" allow-commands7 = "commit" allow-commands8 = ".*xml-mode" allow-commands9 = ".*netconf.*" allow-commands10 = ".*need-trailer" allow-commands11 = "rollback.*" allow-commands12 = "junoscript" deny-commands1 = ".*" allow-configuration1 = "interfaces .* unit 0 family ethernet-switching vlan mem.* .*" allow-configuration2 = "interfaces .* native.* .*" allow-configuration3 = "interfaces .* unit 0 family ethernet-switching interface-mo.* .*" allow-configuration4 = "interfaces .* unit .*" allow-configuration5 = "interfaces .* disable" allow-configuration6 = "interfaces .* description .*" allow-configuration7 = "interfaces .*" allow-configuration8 = "vlans .* vlan-.* .*" deny-configuration1 = ".*" local-user-name = local-username user-permissions = "configure" } } |
-
以下の3つのコマンドを発行することで、ローカルまたはリモートでNETCONFモードへのアクセスを明示的に許可する必要があります。
xml-mode
、netconf
、およびneed-trailer
。 -
deny-configuration = ".*"
ステートメントを使用する場合、allow-configuration
ステートメントを使用して、希望するすべての設定を許可する必要があります。ただし、この設定は、allow-configuration
ステートメントで許可される正規表現のバッファ制限に影響を与える可能性があります。この制限を超えた場合、許可された設定が動作しない可能性があります。
正規表現の指定
コマンドや設定ステートメントで正規表現を指定する場合、以下の例に注意してください。無効なシンタックスの正規表現では、設定がエラーなくコミットされたとしても、望ましい結果が得られない場合があります。
コマンドおよび設定ステートメントの正規表現を、完全なコマンドまたはステートメントを実行するのと同じ方法で指定する必要があります。表 4は[edit interfaces]
および[edit vlans]
ステートメント階層のアクセス権限を設定する正規表現の一覧です。
ステートメント |
正規表現 |
設定ノート |
---|---|---|
[edit interfaces] インターフェイス向けの [edit] user@host# set interfaces interface-name unit interface-unit-number |
そのため、 [edit system login class class-name] user@host# set permissions configure user@host# set deny-configuration "interfaces .* unit .*" |
|
[edit vlans] VLANの [edit] user@host# set vlans vlan-name vlan-id vlan-id |
ここでは、 その結果、 [edit system login class class-name] user@host# set permissions configure user@host# set allow-configuration "vlans .* vlan-id .*" |
|
正規表現演算子
表 5運用および設定モードの許可または拒否に使用できる一般的な正規表現演算子の一覧にしてください。
コマンド正規表現はPOSIX 1003.2で定義された拡張(最新)正規表現を実装します。
オペレータ |
一致 |
例 |
---|---|---|
| |
パイプで区切られた2つ以上の条件の1つです。各用語は、括弧( )で囲まれた完全な独立した式でなければならず、パイプと隣の括弧の間にスペースは入れません。 |
[edit system login class test] user@host# set permissions configure user@host# set allow-commands "(ping)|(traceroute)|(show system alarms)|(show system software)" user@host# set deny-configuration "(access)|(access-profile)|(accounting-options)|(applications)|(apply-groups)|(bridge-domains)|(chassis)|(class-of-service)" 前述の設定により、テストログインクラスに割り当てられたユーザーは、 |
^ |
式の先頭には、コマンドの開始位置を示すために使用され、曖昧さがあるかもしれません。 |
[edit system login class test] user@host# set permissions interface user@host# set permissions interface-control user@host# set allow-commands "(^show) (log|interfaces|policer))|(^monitor)" 前述の設定により、テストログインクラスに割り当てられたユーザーは、インターフェイス設定の表示と設定へのアクセスができます。 最初のフィルターでは、 |
$ |
コマンドの末尾の文字。そのポイントまで正しくマッチする必要があるコマンドを示すために使用します。 |
[edit system login class test] user@host# set permissions interface user@host# set allow-commands "(show interfaces$)" 前述の設定により、テストログインクラスに割り当てられたユーザーはインターフェイスの設定を設定モードで表示できます。ユーザーは、 |
[ ] |
文字または数字の範囲。範囲の開始と終了を区切るには、ハイフン ( |
[edit system login class test] user@host# set permissions clear user@host# set permissions configure user@host# set permissions network user@host# set permissions trace user@host# set permissions view user@host# set allow-configuration-regexps [ "interfaces [gx]e-.* unit [0-9]* description .*" ] 前述の設定により、テストログインクラスに割り当てられたユーザーは演算子レベルのユーザー権限を持っています。これらのユーザーは、指定されたインターフェイス名とユニット番号(0~9)内のインターフェイスを設定するためのアクセス権を持っています。 |
( ) |
完全なスタンドアロン式を示すコマンドのグループ。結果は、全体的な式の一部として評価されます。括弧は、説明されているように、パイプ演算子と組み合わせて使用する必要があります。 |
[edit system login class test] user@host# set permissions all user@host# set allow-commands "(clear)|(configure)" user@host# deny-commands "(mtrace)|(start)|(delete)" 上記の設定により、テストログインクラスに割り当てられたユーザーはスーパーユーザーレベルの権限を持ち、 |
* |
ゼロまたはそれ以上の条件。 |
[edit system login class test] user@host# set permissions configure user@host# set deny-configuration "(system login class m*)" 上記の設定では、テストログインクラスに割り当てられたユーザーのうち、ログインユーザーネームが |
+ |
1 つまたはそれ以上の条件。 |
[edit system login class test] user@host# set permissions configure user@host# set deny-configuration "(system login class m+)" 上記の設定では、テストログインクラスに割り当てられたユーザーのうち、ログインユーザーネームが |
] をクリックします。 |
スペース" ".を除く任意の文字。 |
[edit system login class test] user@host# set permissions configure user@host# set deny-configuration "(system login class m.)" 上記の設定では、テストログインクラスに割り当てられたユーザーのうち、ログインユーザーネームが |
.* |
指定されたポイントから先はすべて。 |
[edit system login class test] user@host# set permissions configure user@host# set deny-configuration "(system login class m .*)" 上記の設定では、テストログインクラスに割り当てられたユーザーのうち、ログインユーザーネームが 同様に、 注:
|
!
の正規表現の演算子はサポートされていません。
正規表現の例
表 6では、正規表現を指定する例として、[edit system ntp server]
と[edit protocols rip]
という2つの設定階層の設定オプションを許可するために使用される正規表現をリストアップしています。
表 6すべての設定ステートメントと階層のすべての正規表現とキーワードは包括的なリストを提供するわけではありません。テーブルに示されている正規表現は、[edit system ntp server]
および[edit protocols rip]
ステートメント階層でのみ有効です。
ステートメント階層 |
正規表現 |
許可された設定 |
拒否された設定 |
---|---|---|---|
|
|||
キーkey-number |
[edit system login class test] set permissions configure set allow-configuration-regexps [ "system ntp server .*" "system ntp server .* key .*" ] set deny-configuration-regexps [ "system ntp server .* version .*" "system ntp server .* prefer" ] |
|
|
バージョンversion-number |
[edit system login class test] set permissions configure set allow-configuration-regexps [ "system ntp server .*" "system ntp server .* version .*" ] set deny-configuration-regexps [ "system ntp server .* key .*" "system ntp server .* prefer" ] |
|
|
推奨 |
[edit system login class test] set permissions configure set allow-configuration-regexps [ "system ntp server .*" "system ntp server .* prefer" ]; set deny-configuration-regexps [ "system ntp server .* key .*" "system ntp server .* version .*" ] |
|
|
|
|||
メッセージサイズmessage-size |
[edit system login class test] set permissions configure set allow-configuration-regexps "protocols rip message-size .*" set deny-configuration-regexps [ "protocols rip metric-in .*" "protocols rip route-timeout .*" "protocols rip update-interval .*" ] |
|
|
メトリックインmetric-in |
[edit system login class test] set permissions configure set allow-configuration-regexps "protocols rip metric-in .*" set deny-configuration-regexps [ "protocols rip message-size .*" "protocols rip route-timeout .*" "protocols rip update-interval .*" ] |
|
|
ルート-タイムアウトroute-timeout |
[edit system login class test] set permissions configure set allow-configuration-regexps "protocols rip route-timeout .*" set deny-configuration-regexps [ "protocols rip metric-in .*" "protocols rip message-size .*" "protocols rip update-interval .*" ] |
|
|
アップデート-インターバルupdate-interval |
[edit system login class test] set permissions configure set allow-configuration-regexps "protocols rip update-interval .*" set deny-configuration-regexps [ "protocols rip metric-in .*" "protocols rip route-timeout .*" "protocols rip message-size .*" ] |
|
|
許可設定および拒否設定ステートメントでアクセス権限を定義する方法
以下のタイプのステートメントを組み合わせて使用することで、設定ステートメント階層のアクセス権限を定義することができます。
パーミッションフラグ
allow-configuration
とdeny-configuration
のステートメント
パーミッションフラグでは、大きな境界を定義し、個人またはログインクラスがそこにアクセスして制御できます。allow-configuration
およびdeny-configuration
のステートメントには、特定の設定階層とステートメントを許可または拒否する正規表現が1つ以上含まれます。allow-configuration
およびのステートdeny-configuration
メントはパーミッションフラグよりも優先され、ユーザーが表示および設定できる正確な階層とステートメントに対して、管理者は詳細に制御できます。
このトピックでは、これらのステートメントを使用するログインクラス設定の例を示して、allow-configuration
およびdeny-configuration
のステートメントを使用してアクセス権限を定義する方法について説明します。例1~3では、すべてのコマンドとdeny-configuration
のステートメントで定義されたもの以外のステートメントにユーザーがアクセスできるログインクラスを作成します。
パーミッションビットとパーミッションフラグは同じ意味で使用されていることに注意してください。
例1
ユーザーがすべてのコマンドを実行し、telnetパラメーター以外のすべてを設定できるログインクラスを作成するには、以下を行います。
例2
ユーザーがすべてのコマンドを実行し、「m」で始まる名前のログインクラスにあるステートメント以外のすべてを設定できるログインクラスを作成するには、以下を行います。
-
ユーザーのログインクラスの許可を
all
に設定します。[edit system login] user@host# set class all-except-login-class-m permissions all
-
以下の
deny-configuration
のステートメントをインクルードします。[edit system login class all-except-login-class-m] user@host# set deny-configuration "system login class m.*"
例3
ユーザーがすべてのコマンドを実行し、[edit system login class]
または[edit system services]
階層レベル以外のすべてを設定できるログインクラスを作成するには、以下を行います。
-
ユーザーのログインクラスの許可を
all
に設定します。[edit system login] user@host# set class all-except-login-class-or-system-services permissions all
-
以下の
deny-configuration
ステートメントをインクルードします。[edit system login class all-except-login-class-or-system-services] user@host# set deny-configuration "(system login class) | (system services)"
以下の例は、allow-configuration
およびdeny-configuration
のステートメントを使用して、[edit system services]
階層レベルで互いに逆の権限を決定する方法を示しています。
例4
ユーザーが[edit system services]
階層レベルでのみ完全な設定権限を持つことができるログインクラスを作成するには、以下を行います。
-
ユーザーのログインクラスの許可を
configure
に設定します。[edit system login] user@host# set class configure-only-system-services permissions configure
-
以下の
allow-configuration
ステートメントをインクルードします。[edit system login class configure-only-system-services] user@host# set allow-configuration "system services"
例5
すべてのコマンドと[edit system services]
階層レベル以外のすべての設定階層の完全な権限をユーザーに許可するログインクラスを作成するには、以下を行います。
-
ユーザーのログインクラスの許可を
all
に設定します。[edit system login] user@host# set class all-except-system-services permissions all
-
以下の
deny-configuration
のステートメントをインクルードします。[edit system login class all-except-system-services] user@host# set deny-configuration "system services"
例:正規表現による追加論理を使用したアクセス権限の指定
この例では、正規表現を使用して設定アクセス権限を設定する際に追加論理を使用する方法を示しています。
要件
この例では、Junos OS リリース 16.1 以降を実行するデバイスを使用します。
概要
正規表現を定義して、誰がどの設定を変更できるかを制御できます。これらの正規表現は、ログイン クラスのユーザーがアクセスできる特定の設定階層を示しています。例えば、ユーザーがルーティング インスタンスのグループを変更できる正規表現を定義したり、ユーザーが他のルーティング インスタンスやその他の設定レベルを変更できなくする正規表現を定義したりできます。ログイン クラスに および ステートdeny-configuration-regexps
メントallow-configuration-regexps
を設定することで、正規表現を定義します。
デフォルトでは、 ステートdeny-configuration-regexps
メントは ステートallow-configuration-regexps
メントよりも優先されます。設定階層がログイン クラスの ステートdeny-configuration-regexps
メントに表示された場合、 ステートallow-configuration-regexps
メントの内容に関係なく、そのクラスのユーザーに表示されません。設定階層が ステートdeny-configuration-regexps
メントに表示されない場合、 ステートallow-configuration-regexps
メントに表示されるとそのクラスのユーザーに表示されます。
*-configuration-regexps
ステートメントの追加論理を有効にすることで、このデフォルト動作を変更できます。追加論理を有効にすると、 ステートメントが deny-configuration-regexps
ステートallow-configuration-regexps
メントよりも優先されます。
そのため、 ステートdeny-configuration-regexps
メントが特定のレベル(プロトコル .*)のすべての設定階層へのアクセスを拒否するが、 ステートallow-configuration-regexps
メントは 1 つの下位の階層(プロトコル bgp .*)へのアクセスを許可する場合、デフォルトでは、 ステートdeny-configuration-regexps
メントが優先されるためデバイスがそのログイン クラスのユーザーの階層へのアクセスを拒否します。allow-configuration-regexps
ただし、追加論理を有効にした場合、 がこのクラスで優先されるため、デバイスはそのログイン クラスのユーザーの指定されたサブ階層へのアクセスを許可します。
設定
ステップバイステップでの手順
追加論理が、1つ以上の個別の設定階層への特定のログインクラスのユーザーのアクセスを明示的に許可できるようにするには:
-
ステート
deny-configuration-regexps
メントを含め、設定階層へのアクセスを明示的に拒否します。[edit system login class class-name] user@host# set deny-configuration-regexps ["regular expression 1" "regular expression 2" "regular expression 3"]
たとえば、以下のように表示されます。
[edit system login class class-name] user@host# set deny-configuration-regexps "protocols .*"
-
ステー
allow-configuration-regexps
トメントを含め、許可する特定の階層の正規表現を定義します。[edit system login class class-name] user@host# set allow-configuration-regexps ["regular expression 1" "regular expression 2" "regular expression 3"]
たとえば、以下のように表示されます。
[edit system login class class-name] user@host# set allow-configuration-regexps ["protocols bgp .*" "protocols ospf .*"]
-
allow-configuration-regexps
および 正deny-configuration-regexps
規表現の追加論理を有効にします。[edit system] user@host# set regex-additive-logic
-
1 人以上のユーザーにログインクラスを割り当てます。
[edit system login] user@host# set user username class class-name
-
変更をコミットします。
このログイン クラスに割り当てられたユーザーは、 ステート
allow-configuration-regexps
メントに含まれる設定階層にアクセスできますが、 ステートdeny-configuration-regexps
メントで指定された他の階層へはアクセスできません。
ステートregex-additive-logic
メントを設定する場合、すべてのログイン クラスに存在allow-configuration-regexps
するすべての および ステートdeny-configuration-regexps
メントに動作変更が適用されます。追加論理を有効にした場合、インパクトの既存のステートメントを評価し、必要に応じて正規表現を更新する必要があります。
例
追加論理による正規表現の使用
目的
このセクションでは、システムに適した設定を作成するためのアイデアを提供するため、追加論理を使用した正規表現の例を示します。
特定のルーティング インスタンスの許可
CUST-VRF-1
CUST-VRF-25
CUST-VRF-100
以下の例のログイン クラスには、、CUST-VRF-
、 など、名前が で始まるルーティング インスタンスの設定を許可する正規表現が含まれています。この例には、任意のルーティング インスタンスの設定を防ぐ正規表現も含まれています。
[edit system login class class-name] user@host# set permissions [configure routing-control view view-configuration] user@host# set deny-configuration-regexps "routing-instances .*" user@host# set allow-configuration-regexps "routing-instances CUST-VRF-.* .*"
デフォルトでは、 ステートdeny-configuration-regexps
メントが優先され、名前に関係なく、ログイン クラスのユーザーはルーティング インスタンスを設定できません。
ただし、以下のステートメントを設定した場合、 ステートallow-configuration-regexps
メントが優先されます。そのため、ユーザーは、名前が で始まるルーティング インスタンスを設定できますがCUST-VRF-
、他のルーティング インスタンスは設定できません。
[edit system] user@host# set regex-additive-logic
BGP ピア設定のみの許可
以下のログイン クラスの例には、 階[edit protocols]
層レベルでの設定を防止するが BGP ピアの設定を許可する正規表現が含まれます。
[edit system login class class-name] user@host# set permissions [configure routing-control view view-configuration] user@host# set deny-configuration-regexps "protocols .*" user@host# set allow-configuration-regexps "protocols bgp group *"
デフォルトでは、以前の設定によって、ログイン クラスのユーザーは 以下の階層を変更できなくなっています[edit protocols]
。
ただし、以下のステートメントを設定した場合、ログイン クラスのユーザーは BGP ピアを変更できますが、許可された階層レベル以外の他のプロトコルまたは他の BGP ステートメントを設定することはできません。
[edit system] user@host# set regex-additive-logic
検証
アクセス権限を正しく設定したことを確認するには:
-
ログイン クラスを設定し、変更をコミットします。
-
ログインクラスをusernameに割り当てます。
-
新しいログイン クラスで割り当てられたusernameでログインします。
-
許可された階層レベルを設定するように試みます。
-
許可された階層レベルでステートメントを設定できる必要があります。
-
拒否された階層レベルは表示されません。
-
許可された式または拒否された式は、 ステート
permissions
メントを付与された権限よりも優先されます。
-
例:動作モードコマンドのアクセス権限を使用したユーザー権限の設定
カスタムログインクラスを設定し、運用モードコマンドに対するアクセス権限を割り当てる方法を示しています。ログインクラスのユーザーは、アクセスを持つコマンドのみを実行できます。これにより、権限のないユーザーが慎重に扱うべきコマンドを実行してネットワークに損害を及ぼす可能性を防ぎます。
要件
この例では、以下のハードウェアとソフトウェアのコンポーネントを使用しています。
-
1つのジュニパーネットワークスデバイス
-
1つの TACACS+(RADIUS)サーバー
開始する前に、デバイスと TACACS+ サーバーの間の TCP 接続を確立します。RADIUS サーバーの場合、デバイスとRADIUSサーバーの間でUDP接続を確立します。
概要とトポロジー
図 1は、ルーターR1がJuniper Networksのデバイスで、TACACS+サーバーとTCP接続を確立している場合のシンプルなトポロジーを示しています。
この例では、R1 を 3 つのカスタマイズされたログイン クラスで設定します。クラス1、クラス2、クラス3。各クラスはpermissions
ステートメントを使用して、allow-commands
および deny-commands
ステートメントを使用して拡張正規表現を定義することで、ユーザーのアクセス権限を定義します。
各ログインクラスの目的は以下のとおりです。
-
Class1—
allow-commands
ステートメントでユーザーのアクセス権限を定義します。このログイン クラスは、デバイスの再起動のためのオペレーターレベル ユーザー権限および認証を提供します。 -
Class2—
deny-commands
ステートメントでユーザーのアクセス権限を定義します。このログインクラスは、オペレーターレベルのユーザー権限を提供し、set
コマンドへのアクセスを拒否します。 -
Class3
allow-commands
— およびdeny-commands
ステートメントの両方でユーザーのアクセス権限を定義します。このログイン クラスは、インターフェイスへのアクセスとデバイス情報の表示のためのスーパーユーザーレベル ユーザー権限と認証を提供します。また、edit
およびconfigure
コマンドへのアクセスも拒否します。
ルーター R1 には、それぞれクラス 1、クラス 2、およびクラス 3 ログイン クラスに割り当てられたユーザー 1、ユーザー 2、およびユーザー 3 という 3 つのユーザーがあります。
設定
- CLIクイック構成
- ルーター R1 の認証パラメーターの設定
- 許可コマンド ステートメント(クラス 1)によるアクセス権限の設定
- 拒否コマンド ステートメント(クラス 2)によるアクセス権限の設定
- 許可コマンドおよび拒否コマンド ステートメント(クラス 3)によるアクセス権限の設定
- 結果
CLIクイック構成
この例を手早く設定するには、以下のコマンドをコピーして、テキストファイルに貼り付けます。改行を削除し、ネットワーク設定に合わせて必要な変更を加え、コマンドを[edit]
階層レベルのCLIにコピー、貼り付けしてから、設定モードでcommit
を入力します。
R1
set system authentication-order tacplus set system authentication-order radius set system authentication-order password set system radius-server 10.209.1.66 secret "$ABC123" set system tacplus-server 10.209.1.66 secret "$ABC123" set system radius-options enhanced-accounting set system tacplus-options enhanced-accounting set system accounting events login set system accounting events change-log set system accounting events interactive-commands set system accounting traceoptions file auditlog set system accounting traceoptions flag all set system accounting destination tacplus server 10.209.1.66 secret "$ABC123" set system login class Class1 permissions clear set system login class Class1 permissions network set system login class Class1 permissions reset set system login class Class1 permissions trace set system login class Class1 permissions view set system login class Class1 allow-commands "request system reboot" set system login class Class2 permissions clear set system login class Class2 permissions network set system login class Class2 permissions reset set system login class Class2 permissions trace set system login class Class2 permissions view set system login class Class2 deny-commands set set system login class Class3 permissions all set system login class Class3 allow-commands configure set system login class Class3 deny-commands .* set system login user User1 uid 2001 set system login user User1 class Class1 set system login user User1 authentication encrypted-password "$ABC123" set system login user User2 uid 2002 set system login user User2 class Class2 set system login user User2 authentication encrypted-password "$ABC123" set system login user User3 uid 2003 set system login user User3 class Class3 set system login user User3 authentication encrypted-password "$ABC123" set system syslog file messages any any
ルーター R1 の認証パラメーターの設定
ステップバイステップでの手順
ルーター R1の認証を設定するには:
-
R1がユーザーの認証を試みる順序を設定します。この例では、TACACS+ サー認証が最初に、RADIUS サーバー認証が続いて、ローカルパスワードが続くものです。
[edit system] user@R1# set authentication-order tacplus user@R1# set authentication-order radius user@R1# set authentication-order password
-
TACACS+サーバーを設定します。
[edit system] user@R1# set tacplus-server 10.209.1.66 secret "$ABC123" user@R1# set tacplus-options enhanced-accounting user@R1# set accounting destination tacplus server 10.209.1.66 secret "$ABC123"
-
RADIUS サーバーを設定します。
[edit system] user@R1# set radius-server 10.209.1.66 secret "$ABC123" user@R1# set radius-options enhanced-accounting
-
R1 アカウンティング パラメータを設定します。
[edit system] user@R1# set accounting events login user@R1# set accounting events change-log user@R1# set accounting events interactive-commands user@R1# set accounting traceoptions file auditlog user@R1# set accounting traceoptions flag all
許可コマンド ステートメント(クラス 1)によるアクセス権限の設定
ステップバイステップでの手順
allow-commands
ステートメントを使用して正規表現を指定するには:
-
クラス1 ログイン クラスを設定し、オペレーターレベル ユーザー権限を割り当てます。
[edit system login] user@R1# set class Class1 permissions [clear network reset trace view]
-
クラス内のユーザーがデバイスを再起動できるように、
allow-commands
正規表現を設定します。[edit system login] user@R1# set class Class1 allow-commands "request system reboot"
-
クラス1 ログインクラスにユーザー アカウントを設定します。
[edit system login] user@R1# set user User1 uid 2001 user@R1# set user User1 class Class1 user@R1# set user User1 authentication encrypted-password "$ABC123"
拒否コマンド ステートメント(クラス 2)によるアクセス権限の設定
ステップバイステップでの手順
deny-commands
ステートメントを使用して正規表現を指定するには:
-
クラス 2 ログイン クラスを設定し、オペレーターレベル ユーザー権限を割り当てます。
[edit system login] user@R1# set class Class1 permissions [clear network reset trace view]
-
クラス内のユーザーが
set
コマンドを実行できなくするために、deny-commands
正規表現を設定します。[edit system login] user@R1# set class Class1 deny-commands "set"
-
クラス2ログインクラスにユーザーアカウントを設定します。
[edit system login] user@R1# set user User2 uid 2002 user@R1# set user User2 class Class2 user@R1# set user User2 authentication encrypted-password "$ABC123"
許可コマンドおよび拒否コマンド ステートメント(クラス 3)によるアクセス権限の設定
ステップバイステップでの手順
deny-commands
およびallow-commands
ステートメントの両方を使用して正規表現を指定するには:
-
クラス3ログインクラスを設定し、スーパーユーザーレベル権限を割り当てます。
[edit system login] user@R1# set class Class3 permissions all
-
クラス内のユーザーが コマンドを実行できなくするために、 正
deny-commands
規表現を設定します。[edit system login] user@R1# set class Class3 deny-commands ".*"
-
ユーザーが設定モードに入ることを許可する 正
allow-commands
規表現を設定します。[edit system login] user@R1# set class Class3 allow-commands configure
-
クラス 3 ログインクラスにユーザー アカウントを設定します。
[edit system login] user@R1# set user User3 uid 2003 user@R1# set user User3 class Class3 user@R1# set user User3 authentication encrypted-password "$ABC123"
結果
設定モードで、show system
コマンドを入力して設定を確認します。出力結果に意図した設定内容が表示されない場合は、この例の手順を繰り返して設定を修正します。
user@R1# show system authentication-order [ tacplus radius password ]; radius-server { 10.209.1.66 secret "$ABC123"; } tacplus-server { 10.209.1.66 secret "$ABC123"; } radius-options { enhanced-accounting; } tacplus-options { enhanced-accounting; } accounting { events [ login change-log interactive-commands ]; traceoptions { file auditlog; flag all; } destination { tacplus { server { 10.209.1.66 secret "$ABC123"; } } } } login { class Class1 { permissions [ clear network reset trace view ]; allow-commands "request system reboot"; } class Class2 { permissions [ clear network reset trace view ]; deny-commands set; } class Class3 { permissions all; allow-commands configure; deny-commands .*; } user User1 { uid 2001; class Class1; authentication { encrypted-password "$ABC123"; } } user User2 { uid 2002; class Class2; authentication { encrypted-password "$ABC123"; } } user User3 { uid 2003; class Class3; authentication { encrypted-password “$ABC123”; } } } syslog { file messages { any any; } }
検証
新しいログインクラスで割り当てられたユーザー名でログインし、設定が正しく行われることを確認します。
クラス1の設定の確認
目的
クラス 1 ログイン クラスで許可される権限とコマンドが機能していることを確認します。
アクション
動作モードで、 show system users
コマンドを実行します。
User1@R1> show system users 12:39PM up 6 days, 23 mins, 6 users, load averages: 0.00, 0.01, 0.00 USER TTY FROM LOGIN@ IDLE WHAT User1 p0 abc.example.net 12:34AM 12:04 cli User2 p1 abc.example.net 12:36AM 12:02 -cli (cli) User3 p2 abc.example.net 10:41AM 11 -cli (cli)
動作モードで、 request system reboot
コマンドを実行します。
User1@R1> request system ? Possible completions: reboot Reboot the system
意味
ユーザー1が割り当てられたクラス1ログインクラスは、オペレーターレベルのユーザー権限を有しており、クラス内のユーザーはrequest system reboot
コマンドを実行できます。
定義済みのオペレーター ログイン クラスは、指定された以下のパーミッション フラグを持っています。
clear— コマ
clear
ンドを使用して、デバイスがネットワークから学習した情報をクリア(削除)し、さまざまなネットワーク データベースに保存できます。network
ssh
telnet
—、ping
、、 コマtraceroute
ンドを使ってネットワークにアクセスできます。reset—
restart
コマンドを使ってソフトウェアプロセスを再開できます。trace—トレース ファイルの設定およびトレース ファイル プロパティの構成を表示できます。
view—さまざまなコマンドを使って、システム全体、ルーティングテーブル、プロトコルに固有の現在の値や統計情報を表示できます。シークレット構成は表示できません。
クラス1ログインクラスでは、上記のユーザー権限に加えて、ユーザー1は request system reboot
コマンドを実行できます。最初の出力はオペレーターとしての表示権限を表しており、2 番目の出力は、ユーザー1がオペレーターとして実行できる唯一のrequest system
コマンドがrequest system reboot
コマンドであることを示しています。
クラス2設定の確認
目的
クラス 2 ログイン クラスに許可される権限とコマンドが機能していることを確認します。
アクション
動作モードで、 ping
コマンドを実行します。
User2@R1> ping 10.209.1.66 ping 10.209.1.66 PING 10.209.1.66 (10.209.1.66): 56 data bytes 64 bytes from 10.209.1.66: icmp_seq=0 ttl=52 time=212.521 ms 64 bytes from 10.209.1.66: icmp_seq=1 ttl=52 time=212.844 ms 64 bytes from 10.209.1.66: icmp_seq=2 ttl=52 time=211.304 ms 64 bytes from 10.209.1.66: icmp_seq=3 ttl=52 time=210.963 ms ^C --- 10.209.1.66 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max/stddev = 210.963/211.908/212.844/0.792 ms
CLIプロンプトから、使用可能なコマンドを確認します。
User2@R1> ? Possible completions: clear Clear information in the system file Perform file operations help Provide help information load Load information from file monitor Show real-time debugging information mtrace Trace multicast path from source to receiver op Invoke an operation script ping Ping remote target quit Exit the management session request Make system-level requests restart Restart software process save Save information to file show Show system information ssh Start secure shell on another host start Start shell telnet Telnet to another host test Perform diagnostic debugging traceroute Trace route to remote host
CLI プロンプトから、任意のセット コマンドを実行します。
User2@R1> set ^ unknown command.
意味
ユーザー2が割り当てられたクラス2ログインクラスは、オペレーターレベルのユーザー権限を有しており、すべてのset
コマンドへのアクセスは拒否されます。
定義済みのオペレーターログインクラスに指定されている権限フラグは、クラス1に指定されたものと同じです。
クラス 3 設定の確認
目的
クラス3ログインクラスに許可される権限とコマンドが機能していることを確認します。
アクション
運用モードで、使用可能なコマンドを確認します。
User3@R1> ? Possible completions: configure Manipulate software configuration information
構成モードにします。
User3@R1> configure Entering configuration mode [edit] User3@R1#
意味
ユーザー3に割り当てられたクラス3ログインクラスは、スーパーユーザー(すべての)権限を有していますが、このクラスはユーザーにconfigure
コマンドの実行のみを許可します。このクラスは、他のすべての運用モード コマンドへのアクセスを拒否します。allow/deny-commands
ステートメントで指定された正規表現はユーザー権限よりも優先されるため、R1上のユーザー3がアクセスできるのは設定モードのみとなり、その他のすべての動作モードコマンドへのアクセスが拒否されます。
例:設定ステートメントと階層のアクセス権限を持つユーザーパーミッションの設定
カスタムログインクラスを設定し、特定の設定階層にアクセス権限を割り当てる方法を示しています。ログインクラスのユーザーは、アクセス権を持つ設定文と階層のみを表示および変更することができます。これにより、不正ユーザーがデバイス設定を変更してネットワークに損害を及ぼす可能性があることを防ぎます。
要件
この例では、以下のハードウェアとソフトウェアのコンポーネントを使用しています。
-
1つのジュニパーネットワークスデバイス
-
1つの TACACS+(RADIUS)サーバー
開始する前に、デバイスと TACACS+ サーバーの間の TCP 接続を確立します。RADIUS サーバーの場合、デバイスとRADIUSサーバーの間でUDP接続を確立します。
概要とトポロジー
図 2は、ルーターR1がJuniper Networksのデバイスで、TACACS+サーバーとTCP接続を確立している場合のシンプルなトポロジーを示しています。
この例では、R1 に 2 つのカスタマイズされたログインクラスを設定します。クラス1およびクラス2。各クラスは、ユーザーのアクセス権を設定することによりpermissions
ステートメントを使い、拡張正規表現を定義することでallow-configuration
とdeny-configuration
、allow-configuration-regexps
、deny-configuration-regexps
ステートメントを使用します。
各ログインクラスの目的は以下のとおりです。
-
Class1ー
allow-configuration
およびdeny-configuration
ステートメントでユーザーのアクセス権限を定義します。このログインクラスは、[edit interfaces]
階層を構成するためのアクセスのみを提供し、デバイス上の他のすべてのアクセスを拒否します。これを行うには、ユーザーのパーミッションには設定アクセスを提供するconfigure
が必要です。さらにallow-configuration
ステートメントによりインターフェイス設定へのアクセスが可能になり、deny-configuration
ステートメントは他のすべての設定階層へのアクセスを拒否します。認容ステートメントは拒否ステートメントよりも優先されるため、クラス1 ログインクラスに割り当てられたユーザーは、階[edit interfaces]
層レベルでのみアクセスできます。 -
Class2ー
allow-configuration-regexps
およびdeny-configuration-regexps
ステートメントでユーザーのアクセス権限を定義します。このログインクラスは、スーパーユーザーレベルユーザー権限を提供し、インターフェイスに複数の階層レベルでの設定を明示的に許可します。また[edit system]
と[edit protocols]
階層レベルへのアクセスも拒否します。
ルータR1には、ログインクラスがクラス1、クラス2の2人のユーザUser1、User2が割り当てられています。
設定
- CLIクイック構成
- ルーター R1 の認証パラメーターの設定
- 許可設定および拒否設定ステートメント(クラス1)でアクセス権を設定します。
- 許可設定特権の設定ステートメント(クラス2)で、アクセス権限を設定します。
- 結果
CLIクイック構成
この例を手早く設定するには、以下のコマンドをコピーして、テキストファイルに貼り付けます。改行を削除し、ネットワーク設定に合わせて必要な変更を加え、コマンドを[edit]
階層レベルのCLIにコピー、貼り付けしてから、設定モードでcommit
を入力します。
R1
set system authentication-order tacplus set system authentication-order radius set system authentication-order password set system radius-server 10.209.1.66 secret "$ABC123" set system tacplus-server 10.209.1.66 secret "$ABC123" set system radius-options enhanced-accounting set system tacplus-options enhanced-accounting set system accounting events login set system accounting events change-log set system accounting events interactive-commands set system accounting traceoptions file auditlog set system accounting traceoptions flag all set system accounting destination tacplus server 10.209.1.66 secret "$ABC123" set system login class Class1 permissions configure set system login class Class1 allow-configuration "interfaces .* unit .*" set system login class Class1 deny-configuration .* set system login class Class2 permissions all set system login class Class2 allow-configuration-regexps [ "interfaces .* description .*" "interfaces .* unit .* description .*" "interfaces .* unit .* family inet address .*" "interfaces.* disable" ] set system login class Class2 deny-configuration-regexps [ "system" "protocols" ] set system login user User1 uid 2004 set system login user User1 class Class1 set system login user User1 authentication encrypted-password "$ABC123" set system login user User2 uid 2006 set system login user User2 class Class2 set system login user User2 authentication encrypted-password "$ABC123" set system syslog file messages any any
ルーター R1 の認証パラメーターの設定
ステップバイステップでの手順
ルーター R1の認証を設定するには:
-
R1がユーザーの認証を試みる順序を設定します。この例では、TACACS+ サー認証が最初に、RADIUS サーバー認証が続いて、ローカルパスワードが続くものです。
[edit system] user@R1# set authentication-order tacplus user@R1# set authentication-order radius user@R1# set authentication-order password
-
TACACS+サーバーを設定します。
[edit system] user@R1# set tacplus-server 10.209.1.66 secret "$ABC123" user@R1# set tacplus-options enhanced-accounting user@R1# set accounting destination tacplus server 10.209.1.66 secret "$ABC123"
-
RADIUS サーバーを設定します。
[edit system] user@R1# set radius-server 10.209.1.66 secret "$ABC123" user@R1# set radius-options enhanced-accounting
-
R1 アカウンティング パラメーターを設定します。
[edit system] user@R1# set accounting events login user@R1# set accounting events change-log user@R1# set accounting events interactive-commands user@R1# set accounting traceoptions file auditlog user@R1# set accounting traceoptions flag all
許可設定および拒否設定ステートメント(クラス1)でアクセス権を設定します。
ステップバイステップでの手順
allow-configuration
およびdeny-configuration
ステートメントを使用して正規表現を指定するには:
-
Class1 ログインクラスをパー
configure
ミッションで設定します。[edit system login] user@R1# set class Class1 permissions configure
-
クラス内のユーザーが
[edit interfaces]
階層レベルの一部を表示および変更できるようにallow-configuration
正規表現を設定します。[edit system login] user@R1# set class Class1 allow-configuration "interfaces .* unit .*"
-
すべての設定階層へのアクセスを拒否する
deny-configuration
正規表現を設定します。[edit system login] user@R1# set class Class1 deny-configuration .*
-
クラス1 ログインクラスにユーザー アカウントを設定します。
[edit system login] user@R1# set user User1 uid 2004 user@R1# set user User1 class Class1 user@R1# set user User1 authentication encrypted-password "$ABC123"
許可設定特権の設定ステートメント(クラス2)で、アクセス権限を設定します。
ステップバイステップでの手順
allow-configuration-regexps
およびdeny-configuration-regexps
ステートメントを使用して正規表現を指定するには:
-
クラス2 ログインクラスを設定し、スーパーユーザー(all)パーミッションを割り当てます。
[edit system login] user@R1# set class Class2 permissions all
-
クラス内の正
allow-configuration-regexps
規表現を設定して、階[edit interfaces]
層レベルの下で複数の階層にアクセスできるようにします。[edit system login] user@R1# set class Class2 allow-configuration-regexps [ "interfaces .* description .*" "interfaces .* unit .* description .*" "interfaces .* unit .* family inet address .*" "interfaces.* disable" ]
-
クラス内のユーザーが、
[edit system]
および[edit protocols]
び階層レベルで設定の表示または変更を防ぐように正deny-configuration-regexps
規表現を設定します。[edit system login] user@R1# set class Class2 deny-configuration-regexps [ "system" "protocols" ]
-
クラス2ログインクラスにユーザーアカウントを設定します。
[edit system login] user@R1# set user User2 uid 2006 user@R1# set user User2 class Class2 user@R1# set user User2 authentication encrypted-password "$ABC123"
結果
設定モードで、show system
コマンドを入力して設定を確認します。出力結果に意図した設定内容が表示されない場合は、この例の手順を繰り返して設定を修正します。
user@R1# show system authentication-order [ tacplus radius password ]; radius-server { 10.209.1.66 secret "$ABC123"; } tacplus-server { 10.209.1.66 secret "$ABC123"; } radius-options { enhanced-accounting; } tacplus-options { enhanced-accounting; } accounting { events [ login change-log interactive-commands ]; traceoptions { file auditlog; flag all; } destination { tacplus { server { 10.209.1.66 secret "$ABC123"; } } } } login { class Class1 { permissions configure; allow-configuration "interfaces .* unit .*"; deny-configuration .*; } class Class2 { permissions all; allow-configuration-regexps [ "interfaces .* description .*" "interfaces .* unit .* description .*" "interfaces .* unit .* family inet address .*" "interfaces.* disable" ]; deny-configuration-regexps [ "system" "protocols" ]; } user User1 { uid 2001; class Class1; authentication { encrypted-password "$ABC123"; } } user User2 { uid 2002; class Class2; authentication { encrypted-password "$ABC123"; } } } syslog { file messages { any any; } }
検証
新しいログインクラスで割り当てられたユーザー名でログインし、設定が正しく行われることを確認します。
クラス1の設定を確認する
目的
クラス1 ログインクラスで許可されたパーミッションが機能していることを確認します。
アクション
運用モードで、使用可能なコマンドを確認します。
User1@R1> ? Possible completions: clear Clear information in the system configure Manipulate software configuration information file Perform file operations help Provide help information load Load information from file op Invoke an operation script quit Exit the management session request Make system-level requests save Save information to file set Set CLI properties, date/time, craft interface message start Start shell test Perform diagnostic debugging
設定モードで、使用可能な設定パーミッションを確認します。
User1@R1# edit ? Possible completions: > interfaces Interface configuration
意味
最初の出力に見るように、User1 はconfigure
のユーザーパーミッションを取得することができます。さらに、設定モードでは、User1はinterfaces
の階層レベルにアクセスできますが、2番目の出力に見られるように、その階層レベルのみにアクセスできます。
クラス2の設定を確認する
目的
クラス2の設定が想定どおりに機能していることを確認します。
アクション
設定モードで、interfaces
設定にアクセスします。
[edit interfaces] User2@R1# set ? Possible completions: <interface-name> Interface name + apply-groups Groups from which to inherit configuration data + apply-groups-except Don't inherit configuration data from these groups ge-0/0/3 Interface name > interface-range Interface ranges configuration > interface-set Logical interface set configuration > traceoptions Interface trace options
設定モードで、system
およびprotocols
設定階層にアクセスします。
User2@R1# edit system ^ Syntax error, expecting <statement> or <identifier>. User2@R1# edit protocols ^ Syntax error, expecting <statement> or <identifier>.
意味
User2はR1でインターフェイスを設定するパーミッションを取得しますが、[edit system]
あるいは[edit protocols]
階層レベルの表示または変更をユーザーに許可されていません。
変更履歴
サポートされる機能は、使用しているプラットフォームとリリースによって決まります。 特定の機能がお使いのプラットフォームでサポートされているかどうかを確認するには、 Feature Explorer をご利用ください。
allow-commands-regexps
およびdeny-commands-regexps
のステートメントがサポートされています。