この章では、システム管理エージェントのセキュリティーに関する基礎的な情報と、各種手順および例を示します。システム管理エージェントでは、SNMPv3 の機能により、ユーザーおよびネットワークデバイスの管理のセキュリティーレベルが拡張され、構成可能です。
この章で扱うトピックは次のとおりです。
システム管理エージェントは、SNMPv1、SNMPv2c、および SNMPv3 をサポートします。SNMPv1 とSNMPv2c の認証サービスは、管理ステーション上で定義されたコミュニティー文字列に基づいています。SNMPv3 認証サービスは、ユーザーに基づいています。各要求には、コミュニティー名またはユーザー名のどちらか (使用するプロトコルによる) が含まれていなければなりません。
SNMPv3 認証処理は、ユーザーに基づくセキュリティーモデル (USM) を実装しており、ユーザー名からセキュリティー名とセキュリティーレベルを取得します。同様に、SNMPv1 と SNMPv2c は、コミュニティー文字列からセキュリティーレベルを決定します。セキュリティー名とセキュリティーレベルは、コンテキスト文字列、グループ名、およびビュー名とともに、アクセス制御の実行に使用されます。アクセス制御は、ビューに基づくアクセス制御モデル (VACM) を使って行われます。このアクセス制御モデルは、認証処理の完了後に使用されます。つまり、USM が認証用であるのに対し、VACM は承認用であると言えます。
システム管理エージェントでサポートされる SNMP のバージョンについては、「SNMP のバージョン」を参照してください。
システム管理エージェントでは、SNMPv3 パケットの認証、暗号化、および復号化に、ユーザーに基づくセキュリティーモデル (USM) を使用します。USM の使用目的は次のとおりです。
SNMP ユーザーの認証
通信のプライバシ
メッセージの整合性
再生保護
snmpusm ユーティリティーは、SNMP エージェントの USM テーブルの基本管理用 SNMP アプリケーションです。usmUserTable MIB テーブルへの書き込みアクセスが必要です。詳細については、snmpusm(1M) のマニュアルページを参照してください。
snmpusm サブコマンドは、SNMPv1 および v2c ではサポートされません。プロキシなしでこれらのコマンドを実行できるのは、SNMPv3 ユーザーだけです。
エージェントの働きにより、ユーザーは、主要構成ファイル snmpd.conf と snmpusm コマンドを利用して、USM MIB を通してユーザーエントリを管理できます。システム管理エージェントは、USM MIB を利用して、ユーザー情報 (ユーザーが存在するかどうかの情報も含む) を検索します。ユーザーからの要求はすべて、USM MIB と照合されます。ユーザーが存在する場合、USM MIB は次のアクセス権をチェックします。
ユーザーが認証済み要求を許可されているかどうか
許可されている認証符号化の種類
USM MIB は、ローカルストアキーを使って、MIB 内の特定のユーザーによって指定された認証プロトコルに基づく新しいダイジェストを計算します。計算されたダイジェストは、着信パケットから保存されたダイジェストと比較されます。2 つのダイジェストが一致すれば、そのユーザーは認証されます。メッセージダイジェストの詳細については、「認証プロトコルアルゴリズム」を参照してください。
SNMP エンジンとの通信を許可されたユーザーを表す
使用する認証プロトコルアルゴリズム を指定する(MD5 または SHA)。詳細については、「認証プロトコルアルゴリズム」を参照
使用するプライバシプロトコルを指定する。システム管理エージェントの場合、DES (データ暗号化規格) が使用される。詳細については、「メッセージプライバシ」を参照
認証とプライバシに関するユーザーのセキュリティーレベルを指定する。
ユーザー名の一致だけを使って認証を行う
MD5 または SHA1 アルゴリズムに基づいた認証を行う
DES プロトコルに基づいたプライバシ (暗号化) を提供する
認証では、秘密鍵を使って MAC (メッセージ認証コード) を生成し、usmSecurityParameters を構成する msgAuthenticationParameters に格納します。送信側と受信側のエンティティーは、同じ秘密鍵を使って MAC を生成します。このため、送信側の MAC と受信側の MAC が一致すれば、メッセージは認証されます。
システム管理エージェントに実装されている USM では、2 つの認証プロトコルがサポートされます。以下のリストに認証プロトコルを示します。
システム管理エージェントでは、メッセージダイジェスト実装は HMAC-MD5–96。これは、MD5 に基づく単方向の暗号化であり、96 ビットのハッシュと16 オクテットのキー長を使用する。計算上、2 つのメッセージが同じメッセージダイジェストを持つことはできない。事前に指定されたターゲットメッセージダイジェストからメッセージを生成することもできない。MD5 アルゴリズムは電子署名アプリケーションを対象にしている。これらのアプリケーションでは、サイズの大きいファイルを安全に圧縮する必要がある。圧縮後、公開鍵暗号システムにより、秘密鍵を使って暗号化する。HMAC-MD5–96 アルゴリズムは 32 ビットマシンで使用可能。大規模な置換テーブルは不要。このアルゴリズムは非常にコンパクトにコード化することができる。MD5 の詳細については、RFC 1321 (http://www.ietf.org/rfc/rfc1321.txt ) を参照
システム管理エージェントでは、セキュアハッシュアルゴリズム (SHA) 実装は HMAC-SHA–96。この単方向暗号化は、96 ビットのハッシュと 20 オクテットのキー長を使用する。このアルゴリズムは、2 64 ビット未満の長さのメッセージを入力として受け付ける。入力メッセージは 512 ビットブロックで処理される。このアルゴリズムは 160 ビットのメッセージダイジェスト出力を生成する。このメッセージダイジェストは、たとえば、メッセージの署名を生成または検証する署名アルゴリズムへの入力として使用される。メッセージダイジェストには、メッセージそのものではなく署名が付いている。このため、元のメッセージよりサイズが小さくなるため、効率がよくなる。電子署名の作成者が SHA を使用している場合は、検証側でも SHA を使用する必要がある。通常、転送中にメッセージに変更が加えられた場合は、メッセージダイジェストにも変更が加えられる。その結果、電子署名の検証は失敗する。SHA の安全性が高いのは、計算上、2 つのメッセージが同じメッセージダイジェストを持つことができないためである。また、事前に指定されたターゲットメッセージダイジェストからメッセージを生成することもできない。SHA の設計は MD5 ファミリのハッシュ関数と類似している。SHA の詳細については、RFC 3174 (http://www.ietf.org/rfc/rfc3174.txt ) を参照
システム管理エージェントの場合、デフォルトの認証プロトコルは HMAC-MD55–96 です。設定は auth proto = MD5 です。
USM はメッセージのプライバシをサポートします。USM は、SNMPv3 パケットの暗号化と復号化に、CBC-DES 対称暗号化プロトコルを使用します。認証の場合と同様に、送信側でのメッセージの暗号化と受信側でのメッセージの復号化には、同じ秘密鍵を使用します。データ部分だけが暗号化されます。暗号化を使用するには、auth フラグを有効にし、セキュリティーレベルでプライバシを有効にする必要があります。scopedPDU だけが暗号化されます。詳細については、「USM セキュリティー情報の格納場所」を参照してください。
現在、Solaris OS では、DES 暗号化がサポートされています。DES 暗号化では 56 ビットの鍵暗号化を使用します。これが、今回の Solaris ソフトウェアリリースの DES でサポートされている、現段階で最高レベルの暗号化です。
システム管理エージェントは、公開鍵暗号化標準 (PKCS) #11 をサポートします。このトークンインタフェース標準は、SSL モジュールと PKCS #11 モジュールの間の通信に使用するインタフェースを定義します。システム管理エージェントでコンパイルされた PKCS ライブラリは、PKCS#11 v2.11 標準に基づいています。
「認証プロトコルアルゴリズム」に記述されているように、MD5 に加えて SHA1 アルゴリズムがサポートされます。システム上に PKCS ライブラリがない場合、SMA は DES のサポートなしで標準 Net-SNMP 内部 MD5 の使用を試みます。
USM 情報は、SNMPv3 パケット文字列内の次のフラグに含まれています。
メッセージの処理方法を指定する 8 ビット。たとえば、msgFlags の 8 ビット中 2 ビットは、パケットが暗号化されているかどうかと、パケットが認証されているかどうかを指定する。このフラグを使って、メッセージのセキュリティーレベルが決定される。セキュリティーレベルは、主要ファイル snmpd.conf で次のように指定する
メッセージの生成に使用するセキュリティーモデルを指定して、受信側エンティティーが適切なセキュリティー処理モデルを利用できるようにする。システム管理エージェントでサポートされているセキュリティーモデルは USM のみ
セキュリティーモデルに関するデータを含む 8 ビット文字列。このデータは使用するセキュリティーモデル (複数可) によって定義される。このデータは使用するセキュリティーモデル専用として使用される。セキュリティーモデルは msgSecurityModel に指定される。USM は、このフィールドを使って、SNMPv3 メッセージの認証、暗号化、および復号化を行う
標準のプロトコルデータユニット (PDU) と、この PDU の処理に使用される管理上一意のコンテキストの識別情報を含む。SNMPv2 メッセージと SNMPv3 メッセージは、どちらも同じ PDU フォーマットを使用する。トランザクションのプライバシが有効になっている場合、この scopedPDU 形式は暗号化される
USM の MIB 定義は、/etc/sma/snmp/mibs/SNMP-USER-BASED-SM-MIB.txt にあります。
USM の詳細については、RFC 3414 (http://www.ietf.org/rfc/rfc3414.txt ) を参照してください。
ビューに基づくアクセス制御モデル (VACM) を使って、特定の管理対象オブジェクトへのアクセスが承認されているかどうかを調べることができます。アクセス制御は、次のタイミングで行われます。
マネージャーからの取得要求メッセージを処理するとき
マネージャーからの変更要求メッセージを処理するとき
マネージャーに通知メッセージを送信する必要があるとき
VACM は、「コミュニティー文字列」で説明されているコミュニティー文字列の概念に基づいています。VACM では、アクセス制御をシステム管理エージェントで簡単に管理できます。
アクセス制御は、主要構成ファイル snmpd.conf 内のトークンによって定義されます。SMA デーモン snmpd が認識する VACM アクセスセキュリティー用のトークンを、以下に示します。これらのトークンは主要構成ファイル snmpd.conf 内で使用できます。
最初の 3 つのトークンについては、「VACM テーブルについて」を参照してください。com2sec トークンには、NAME SOURCE オプションと COMMUNITY オプションを指定できます。このトークンを使って、SNMPv1 や SNMPv2 のユーザーおよびコミュニティーに、SNMPv3 のセキュリティー特権を付与することができます。com2sec トークンは、ソースとコミュニティーのペアからセキュリティー名へのマッピングを示します。
snmpd.conf ファイルは、より高速で有用なラッパーを提供しています。これらのラッパーは、SMA snmpd エージェントで認識可能です。これらのラッパーは、ユーザーやコミュニティー向けの読み取り書き込み (rw) および読み取り専用 (ro) 構文を使用して、次のように定義されています。
rwuser
rouser
rwcommunity
rocommunity
rwuser トークンエントリは、ユーザーが指定しなければならない最小限のアクセス権を指定します。
ユーザーはプライバシパスワードを指定しなければならない
プライバシパスワードを使って作成されたユーザーはプライバシパスワードを指定できる。それ以外の場合、ユーザーは認証パスワードを指定しなければならない
ユーザーは、パスワードを指定しないか、または認証パスワードを指定できる。また、プライバシパスワードを使って作成されたユーザーはプライバシパスワードを指定できる
VACM 情報は、SNMPv3 パケット文字列内の複数のパラメータに含まれています。これらのパラメータは isAccessAllowed 機構に渡されます。isAccessAllowed 機構は、アクセスを付与すべきかどうかをチェックする VACM 内の唯一のエントリポイントです。
メッセージの処理方法を指定する 8 ビット。詳細については、「USM セキュリティー情報の格納場所」を参照
メッセージの生成時に使用されたセキュリティーモデルを指定して、受信側エンティティーが適切なセキュリティー処理モデルを利用できるようにする。SNMPv3 では、単一のセキュリティーモデルの使用か複数のセキュリティーモデルの使用かを選択できる
セキュリティーモデルに関するデータを含む 8 ビット文字列。セキュリティーモデル (複数可) は msgSecurityModel に指定される
PDU を含む。PDU 処理に使用する管理情報の管理上一意のセレクタを示す。つまり、scopedPDU にはコンテキストと管理対象オブジェクトの OID が含まれる。scopedPDU には次のフィールドがある
SNMPv3 パケット文字列のその他のフィールドについては、「SNMP のバージョン」を参照してください。
メッセージにアクセスを付与するかどうかを決定する際、VACM は次の 4 つのテーブルを使用します。
これらの VACM テーブルは、それぞれアクセス機構の特定の部分を処理します。各テーブルは、VACM MIB を使ってリモートで構成できます。VACM MIB は RFC 3415 (http://www.ietf.org/rfc/rfc3415.txt) で定義されています。
VACM は、SMA の USM によって認証された要求が、この要求に含まれる MIB オブジェクトへのアクセスを承認されるかどうかを判断します。snmpvacm ユーティリティーは、SNMP エージェントの VACM テーブルの基本管理用 SNMP アプリケーションです。snmpvacm ユーティリティーを使用するには、snmpvacm MIB テーブルの書き込みアクセス権が必要です。詳細については、snmpvacm(1M) のマニュアルページを参照してください。
この節では、各 VACM テーブルについて説明します。たとえば、テーブルの索引の付け方や、各行の内容などについて説明します。
vacmContextTable テーブルには、ローカルで使用可能なコンテキストが格納されています。コンテキストは、管理情報のセレクタです。単一の管理対象オブジェクトを複数のコンテキストで使用できます。たとえば、プリンタの状態を監視する単一のモジュールの場合を考えてみましょう。複数のプリンタが設置されているネットワークでは、このモジュールの複数のインスタンスにそれぞれ独自のプリンタ名を格納して実装できます。この場合、プリンタ名がコンテキストになります。
単一の SNMP エンティティーから複数のコンテキストにアクセスできます。
vacmContextTable テーブルは、 contextName で索引付けられています。各行には、読み取り可能な一意の文字列 vacmcontextName の形式でコンテキスト名が付けられます。
システム管理エージェントは、vacmContextTable 内で、scopedPDU 内の contextName を検索します。scopedPDUについては、 「SNMP のバージョン」を参照してください。システム管理エージェントが特定のメッセージの contextName を vacmContextTable 内で検出できない場合、アクセスは拒否されます。この場合、戻り値は noSuchContext になります。
contextName が見つかった場合、 図 4–2 のように、アクセスチェックが続行されます。例 4–1 に、vacmContextTable 内の一般的なエントリの例を示します。
モジュールにより作成される一般的な vacmContextTable エントリの例を、以下に示します。
SNMP-VIEW-BASED-ACM-MIB::vacmContextName."fileX" = STRING: fileX SNMP-VIEW-BASED-ACM-MIB::vacmContextName."fileY" = STRING: fileY |
この例の contextNames は fileX と fileY です。
コンテキストの詳細については、『Solaris System Management Agent Developer’s Guide 』を参照してください。システム管理エージェントには、コンテキストの概念を理解するのに役立つデモモジュールが付属しています。このデモモジュールでは、単一のモジュールの複数のインスタンスを実装する場合の、コンテキストの重要性を示しています。詳細については、『Solaris System Management Agent Developer’s Guide』の「Implementing Multiple Instances of a Module」を参照してください。
vacmSecurityToGroupTable テーブルには、グループ情報が格納されています。ユーザーグループにはグループ名が付けられます。このグループ名は、アクセス権の管理に使用されます。グループには、SecurityModel と SecurityName の値のペアが含まれます。その結果、ペアは最大 1 つのグループにしかマッピングできません。vacmSecurityToGroupTable テーブルは、以下の項目で索引付けられています。
securityModel
securityName
vacmSecurityToGroupTable テーブルの各行には、次の情報が含まれます。
SNMPv3 セキュリティーモデル。この例では USM。USM の詳細については、「USM による認証とメッセージプライバシ」を参照。com2sec トークンを利用すると、SNMPv1 および v2c のセキュリティーモデルを使用できるようになる。com2sec トークンの詳細については、snmpd.conf(4) のマニュアルページを参照
USM では、vacmSecurityName と userName は一致する。セキュリティーモデルとは無関係のフォーマットでユーザーを表現する。com2sec トークンを利用すると、SNMPv1 および v2c のセキュリティー名を使用できるようになる。com2sec トークンの詳細については、snmpd.conf(4) のマニュアルページを参照
読み取り可能な文字列。このエントリに関連付けられているグループを示す
メッセージの認証と復号化に成功すると、SecurityName が msgSecurityModel 指示子によって取得されます。システム管理エージェントは、vacmSecurityToGroupTable テーブル内で、この msgSecurityModel 指示子および関連する SecurityName を検索します。vacmSecurityToGroupTable 内で msgSecurityModel 指示子および関連する SecurityName が見つからない場合、アクセスは拒否されます。この場合、戻り値は noSuchGroupName になります。
エントリが見つかった場合、対応する groupName が返されます。図 4–2 のように、アクセスチェックが続行されます。
例 4–2 に、vacmsecurityToGroupTable 内の一般的なエントリを示します。
以前に作成したユーザー user2 および user5 のグループを作成します。この例では、ユーザーは、grpnam1 という新しく作成されたグループに配置されます。次のいずれかの方法を選択します。
主要構成ファイル /etc/sma/snmp/snmpd.conf に次の行を追加します。
group grpnam1 usm user2 group grpnam1 usm user5 |
主要構成ファイル /etc/sma/snmp/snmpd.conf に追加してグループを作成した場合、 vacmSecurityToGroupTable テーブル内に次のエントリが作成されます。
SNMP-VIEW-BASED-ACM-MIB::vacmGroupName.3."user2" = STRING: grpnam1 SNMP-VIEW-BASED-ACM-MIB::vacmGroupName.3."user5" = STRING: grpnam1 SNMP-VIEW-BASED-ACM-MIB::vacmSecurityToGroupStorageType.3."user2" = INTEGER: permanent(4) SNMP-VIEW-BASED-ACM-MIB::vacmSecurityToGroupStorageType.3."user5" = INTEGER: permanent(4) SNMP-VIEW-BASED-ACM-MIB::vacmSecurityToGroupStatus.3."user2" = INTEGER: active(1) SNMP-VIEW-BASED-ACM-MIB::vacmSecurityToGroupStatus.3."user5" = INTEGER: active(1) |
リブートしてもエントリは削除されません。この VACM テーブルのエントリを削除するには、snmpvacm deleteGroup コマンドを使用します。この方法は、ストレージの型が nonVolatile の場合に使用できます。これ以外のストレージの型を持つ VACM テーブルエントリの場合は、主要構成ファイル /etc/sma/snmp/snmpd.conf からテーブルエントリを手動で削除する必要があります。主要構成ファイル /etc/sma/snmp/snmpd.conf を編集することで作成されたグループの場合、vacmSecurityToGroupTable テーブルのエントリを削除するには、主要構成ファイル /etc/sma/snmp/snmpd.conf を編集する必要があります。
snmpvacm コマンドを使用します。user2 の場合、次のように snmpvacm コマンドを使ってグループを作成できます。
# snmpvacm -v3 -u myuser -a MD5 -A my_password -l authNoPriv localhost createSec2Group 3 user2 grpnam1 |
user5 の場合、次のように snmpvacm コマンドを使ってグループを作成できます。
# snmpvacm -v3 -u myuser -a MD5 -A my_password -l authNoPriv localhost createSec2Group 3 user5 grpnam1 |
ユーザー myuser のアクセスレベルは rwuser です。したがって、この例では、コンテキストに適していれば、グループエントリは myuser として作成されます。ユーザー user2 と user5 は、VACM テーブルを更新する権限を持ちません。
vacmViewTreeFamilyTable テーブルには、ビューサブツリーファミリの全コレクションが格納されます。これらのコレクションを「MIB ビュー」と呼びます。MIB ビューは、OID サブツリー値です。ファミリ名と、ファミリマスクであるビット文字列値から成ります。ファミリマスクは、MIB ビュー内に存在するファミリ名のサブ識別子を特定します。マスクは、次のいずれかで区切られた 16 オクテットのリストです。「.」または「:」。デフォルトは「ff」です。
MIB ビュー内の各ビューサブツリーファミリには、型があります。この型によって、そのビューサブツリーファミリが MIB ビューに含まれるかどうかが決まります。管理対象オブジェクトインスタンスは、次の条件が両方とも真である場合に限り、MIB ビューに含まれます。
管理対象オブジェクトの OID に、OID サブツリーと同数以上のサブ識別子が含まれている
対応するマスクのビットが 0 以外の場合、管理対象オブジェクトの OID サブ識別子が OID サブツリー内の対応するサブ識別子と一致する
マスクの構成値が短すぎてこれらの条件をチェックできない場合、暗黙のうちにこの値に 1 の連続が付加されます。したがって、マスクが 0 ビットのビューファミリサブツリーは、すべての値が 1 のマスクと同等であり、すなわち 1 つの MIB サブツリーと同等です。
vacmViewTreeFamilyTable テーブルは、以下の項目で索引付けられています。
vacmAccessTable テーブルで選択されたアクセス権によって指定される。アクセスチェックに使用される
PDU の OID が MIB ビューと比較される
vacmViewTreeFamilyTable テーブルの各行の値は次のとおりです。
MIB ビューの名前
OID サブツリー。OID サブツリーはマスクとともに MIB ビューサブツリーを構成する
ビット文字列マスク。ビット文字列マスクは OID サブツリーとともに MIB ビューサブツリーを構成する
この型によって、そのビューサブツリーファミリが MIB ビューに含まれるかどうかが決まる
MIB ビューに検索対象の OID が含まれていない場合、アクセスは拒否されます。この場合、戻り値は notInView になります。MIB ビューに正しい OID が含まれていれば、アクセスは許可されます。この場合、戻り値は accessAllowed になります。
この VACM アルゴリズム全体のフローチャートは、図 4–2 のようになります。以下では、この図に含まれる RFC 推奨の用語について解説します。
アクセスの要求元を示す
アクセスが許可される場所を特定する
アクセスを許可する方法を特定する
読み取り、書き込み、通知のいずれか。グループまたはユーザーが特定のアクセスレベルを要求する理由を特定する
チェック対象の管理データの型を示す
例 4–3 に、vacmViewTreeFamilyTable の一般的なエントリを示します。
ビューは次の 2 通りの方法で作成できます。
主要構成ファイル /etc/sma/snmp/snmpd.conf にビューを追加することで、ビューを作成できます。
view all included .1 FF view none excluded .1 FF view vwnam1 included .1.3.6.1 FF |
この例では、マスクは「FF」になります。
主要構成ファイル /etc/sma/snmp/snmpd.conf にグループを追加することでビューを作成した場合、 vacmViewTreeFamilyTable テーブル内に次のエントリが作成されます。
SNMP-VIEW-BASED-ACM-MIB::vacmViewTreeFamilyMask."all".1.1 = STRING: "ÿ" SNMP-VIEW-BASED-ACM-MIB::vacmViewTreeFamilyMask."none".1.1 = STRING: "ÿ" SNMP-VIEW-BASED-ACM-MIB::vacmViewTreeFamilyMask."vwnam1".4.1.3.6.1 = STRING: "ÿ" SNMP-VIEW-BASED-ACM-MIB::vacmViewTreeFamilyType."all".1.1 = INTEGER: included(1) SNMP-VIEW-BASED-ACM-MIB::vacmViewTreeFamilyType."none".1.1 = INTEGER: excluded(2) SNMP-VIEW-BASED-ACM-MIB::vacmViewTreeFamilyType."vwnam1".4.1.3.6.1 = INTEGER: included(1) SNMP-VIEW-BASED-ACM-MIB::vacmViewTreeFamilyStorageType."all".1.1 = INTEGER: permanent(4) SNMP-VIEW-BASED-ACM-MIB::vacmViewTreeFamilyStorageType."none".1.1 = INTEGER: permanent(4) SNMP-VIEW-BASED-ACM-MIB::vacmViewTreeFamilyStorageType."vwnam1".4.1.3.6.1 = INTEGER: permanent(4) SNMP-VIEW-BASED-ACM-MIB::vacmViewTreeFamilyStatus."all".1.1 = INTEGER: active(1) SNMP-VIEW-BASED-ACM-MIB::vacmViewTreeFamilyStatus."none".1.1 = INTEGER: active(1) SNMP-VIEW-BASED-ACM-MIB::vacmViewTreeFamilyStatus."vwnam1".4.1.3.6.1 = INTEGER: active(1) |
# snmpvacm -v3 -u myuser -a MD5 -A my_password -l authNoPriv -Ce localhost createView all .1 FF |
# snmpvacm -v3 -u myuser -a MD5 -A my_password -l authNoPriv localhost createView none .1 FF |
# snmpvacm -v3 -u myuser -a MD5 -A my_password -l authNoPriv localhost createView vwnam1 .1.3.6.1 FF |
ユーザー myuser のアクセスレベルは rwuser です。したがって、この例では、コンテキストに適していれば、myuser 用にビューエントリが作成されます。
snmpvacm コマンドを使って作成されたビューの場合、ストレージの型は nonVolatile になります。
vacmAccessTable テーブルには、各グループのアクセス権が格納されます。各グループに複数のアクセス権を付与できます。最も安全なアクセス権が選択されます。vacmAccessTable テーブルは、以下の項目で索引付けられています。
vacmSecurityToGroupTable テーブル内の検索から返される
vacmContextTable テーブル内で一致する有効な contextName
メッセージの msgSecurityModel パラメータ内に指定する
メッセージの msgFlags パラメータ内に指定する
vacmAccessTable テーブル内の各行には、次の値が含まれます。
グループ名。このグループには 1 つ以上のアクセス権がある
contextName は vacmAccessContextPrefix の値と一致する必要がある。vacmAccessContextMatch を参照
アクセス権の取得で使用する必要のあるセキュリティーモデルを示す
vacmAccessContextMatch が exact に設定されている場合、contextName は vacmAccessContextPrefix オブジェクトの値と正確に一致している必要がある
vacmAccessContextMatch が prefix に設定されている場合、contextName は vacmAccessContextPrefix オブジェクトの値の最初の数文字と一致している可能性がある。この contextName は、vacmContextTable テーブル内ですでに一致している名前である
このアクセス権の使用に必要な最低限のセキュリティーレベルを示す。セキュリティーレベルについては、「VACM セキュリティー情報の格納場所」を参照
読み取りアクセスが承認された MIB viewName。vacmAccessReadViewName が空の場合、読み取りアクセス用のアクティブなビューは存在しない
書き込みアクセスが承認された MIB viewName。vacmAccessWriteViewName が空の場合、書き込みアクセス用のアクティブなビューは存在しない
通知アクセスが承認された MIB viewName。vacmAccessWriteViewName が空の場合、通知アクセス用のアクティブなビューは存在しない
アクセス権が見つからない場合、アクセスは拒否されます。この場合、戻り値は noAccessEntry になります。
アクセス権が選択されると、そのアクセス権により指定された viewName が選択されます。この viewName は PDU によって決定されます。PDU 内の SNMP 操作が GETNEXT または GET である場合、文字列 vacmAccessReadViewName が使用されます。PDU 内の SNMP 操作が TRAP である場合、文字列 vacmAccessNotifyViewName が使用されます。viewName が構成されていない場合、アクセスは拒否されます。この場合、戻り値は noSuchView になります。
正しく構成された viewName でアクセス権が選択されると、 図 4–2 のように、引き続きアクセスチェックが続行されます。例 4–4 に、一般的なアクセステーブルエントリを示します。
例 4–5 では、この例と前の例のユーザー設定が存在し、VACM テーブル内に登録されているかどうかをチェックする方法を示します。
アクセステーブルエントリは次の 2 通りの方法で作成できます。
主要構成ファイル /etc/sma/snmp/snmpd.conf にエントリを追加して、アクセステーブルエントリを作成できます。
access grpnam1 fileX usm priv exact all none none access grpnam1 "" usm auth exact all vwnam1 none |
主要構成ファイル /etc/sma/snmp/snmpd.conf に追加することで作成されたグループの場合、 vacmAccessTable テーブル内に次のエントリが作成されます。
SNMP-VIEW-BASED-ACM-MIB::vacmAccessContextMatch. "grpnam1"."".3.authNoPriv = INTEGER: exact(1) SNMP-VIEW-BASED-ACM-MIB::vacmAccessContextMatch. "grpnam1"."fileX".3.authPriv = INTEGER: exact(1) SNMP-VIEW-BASED-ACM-MIB::vacmAccessReadViewName. "grpnam1"."".3.authNoPriv = STRING: all SNMP-VIEW-BASED-ACM-MIB::vacmAccessReadViewName. "grpnam1"."fileX".3.authPriv = STRING: all SNMP-VIEW-BASED-ACM-MIB::vacmAccessWriteViewName. "grpnam1"."".3.authNoPriv = STRING: vwnam1 SNMP-VIEW-BASED-ACM-MIB::vacmAccessWriteViewName. "grpnam1"."fileX".3.authPriv = STRING: none SNMP-VIEW-BASED-ACM-MIB::vacmAccessNotifyViewName. "grpnam1"."".3.authNoPriv = STRING: none SNMP-VIEW-BASED-ACM-MIB::vacmAccessNotifyViewName. "grpnam1"."fileX".3.authPriv = STRING: none SNMP-VIEW-BASED-ACM-MIB::vacmAccessStorageType. "grpnam1"."".3.authNoPriv = INTEGER: permanent(4) SNMP-VIEW-BASED-ACM-MIB::vacmAccessStorageType. "grpnam1"."fileX".3.authPriv = INTEGER: permanent(4) SNMP-VIEW-BASED-ACM-MIB::vacmAccessStatus. "grpnam1"."".3.authNoPriv = INTEGER: active(1) SNMP-VIEW-BASED-ACM-MIB::vacmAccessStatus. "grpnam1"."fileX".3.authPriv = INTEGER: active(1) |
主要構成ファイル /etc/sma/snmp/snmpd.conf を直接編集することで作成されたグループの場合、ストレージの型は permanent になります。
snmpvacm コマンドを使ってアクセステーブルエントリを作成する方法もあります。
# snmpvacm -v3 -u myuser -a MD5 -A my_password -l authNoPriv localhost createAccess grpnam1 "fileX" 3 3 1 all none none |
ユーザー myuser のアクセスレベルは rwuser です。したがって、この例では、コンテキストに適していれば、アクセスエントリは myuser として作成されます。
# snmpvacm -v3 -u myuser -a MD5 -A my_password -l authNoPriv localhost createAccess grpnam1 "" 3 2 1 all vwnam1 none |
snmpvacm コマンドで作成されたグループの場合、ストレージの型は nonvolatile になります。snmpvacm コマンドまたは snmpusm コマンドで作成されたオブジェクトの場合、ストレージの型は nonvolatile になります。
例 4–3 と 例 4–4 の情報を使って、例 4–2 で作成した SNMPv3 ユーザー user2 が存在することを確認します。user2 の値をチェックおよび設定して、このユーザー用に作成されたアクセスエントリを検証します。暗号化を使用して 1 回、暗号化を使用しないで 1 回、snmpget コマンドと snmpset コマンドを実行します。この方法により、user2 のアクセスエントリが最小限必要なセキュリティーレベル auth= 2 であることがわかります。この方法により、より安全なセキュリティーレベル priv の使用が可能であることもわかります。
snmpget コマンドを使って、暗号用の DES オプションが設定された新しいユーザーが存在することをチェックします。コンテキスト -n fileX が指定されています。
# snmpget -v3 -u user2 -a MD5 -A my_password -l authPriv -x DES -X my_password -n fileX localhost 1.3.6.1.4.1.42.2.2.4.4.6.1.1.0 |
このコマンドは、user2 に設定したアクセスエントリのうち 1 つを検証します。snmpget コマンドの使用に関連付けられているオプションについては、snmpcmd(1M) のマニュアルページを参照してください。
snmpget コマンドで、次の情報が取得できます。
SNMPv2-SMI::enterprises.42.2.2.4.4.6.1.1.0 = INTEGER: 111 |
この出力の 111 は、指定の OID に格納された整数です。
同様に、snmpget コマンドを使って、DES オプションを設定せずに、新しいユーザーの存在をチェックできます。DES オプションを設定しない場合、暗号化は要求されません。この例では、ユーザー user2 はコンテキスト内にない操作を実行できます。
# snmpget -v3 -u user2 -a MD5 -A my_password -l authNoPriv localhost 1.3.6.1.2.1.1.3.0 |
snmpgetコマンドは、システム稼働時間に関する次の情報を取得します。
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (5375) 0:00:53.75 |
sysLocation に新しい値を設定してみてください。
# snmpset -v3 -u user2 -a MD5 -A my_password -l authPriv -x DES -X my_password localhost 1.3.6.1.2.1.1.6.0 s "new val" |
このコマンドの s は文字列を表します。OID は sysLocation です。sysLocation に追加される値は new val です。
user2 は、DES のコンテキストに対する完全なアクセス権 (authPriv) を持っています。パスワードは my_password です。次の情報が返されます。
SNMPv2-MIB::sysLocation.0 = STRING: new val |
snmpget コマンドを使って、これらの設定を確認します。
# snmpget -v3 -u user2 -a MD5 -A my_password -l authPriv -x DES -X my_password localhost 1.3.6.1.2.1.1.6.0 |
SNMPv2-MIB::sysLocation.0 = STRING: new val |
同じコマンドを、DES 暗号化を設定しないで実行してみてください。
# snmpset -v3 -u user2 -a MD5 -A my_password -l authNoPriv localhost 1.3.6.1.2.1.1.6.0 s "new val2" |
同じ結果が返されます。
SNMPv2-MIB::sysLocation.0 = STRING: new val2 |
# snmpget -v3 -u user2 -a MD5 -A my_password -l authNoPriv localhost 1.3.6.1.2.1.1.6.0 |
SNMPv2-MIB::sysLocation.0 = STRING: new val2 |
この出力によると、ユーザーは MIB-II への書き込みアクセスが許可されています。
user2 が snmptrapd.conf ファイルに定義されている場合は、snmptrapd コマンドを使って SNMP トラップデーモンを起動します。
# /usr/sfw/sbin/snmptrapd |
また、snmpinform コマンドを使って INFORM-PDU トラップを送信します。snmpinform コマンドは、ユーザー user2 または user2 が通知を生成できることを確認します。コールドスタートを実行すると、通知が生成されます。コールドスタートは、通知 (トラップ) を生成します。このトラップは、/var/log/snmpd.log ファイルで確認できます。
# /usr/sfw/sbin/snmpinform -v3 -u user2 -a MD5 -A my_password -l authNoPriv localhost 42 coldStart.0 |
詳細については、snmptrapd.conf(4) および snmpinform(1M) のマニュアルページを参照してください。
VACM テーブルエントリの作成時には、ユーザーとユーザーグループに正しいアクセス権を設定する必要があります。アクセス権の設定が正しくないと、主要ユーザーのアクセスが拒否される可能性があります。
ユーザーグループを大量に作成することは避けてください。グループの数が多いと、管理が難しくなります。ユーザーグループの数が多すぎると、問題の障害追跡が困難になります。
VACM テーブルの使用時、戻り値に次のメッセージが含まれることがあります。
システム管理エージェントが、vacmContextTable 内で特定のメッセージの contextName を検出できない場合に返される値。アクセスは拒否される。コンテキストテーブルのエントリをチェックする必要がある。これらのエントリが正しく構成されているか確認する必要がある。各ユーザーにコンテキストを持っているかを確認する必要がある。詳細については、「コンテキストテーブル」を参照
msgSecurityModel 指示子および関連する SecurityName が vacmSecurityToGroupTable 内にない場合に返される値。アクセスは拒否される。グループセキュリティーテーブルのエントリをチェックする必要がある。これらのエントリが正しく構成されているか確認する必要がある。各ユーザーがグループ名を持っているかを確認する必要がある。ユーザーがテーブルに正しく入力されているかを確認する必要がある。詳細については、「グループセキュリティーテーブル」を参照
この値は、MIB ビューに検索対象の OID が含まれていない場合に返される。アクセスは拒否される。詳細については、「ビューツリーファミリテーブル」を参照
この値は、アクセス権が見つからない場合に返される。アクセスは拒否される。マスクが正しく設定されているか確認する必要がある。各グループは複数のアクセス権を持つことができるが、そのうちもっとも安全なアクセス権だけが選択される
vacmAccessContextMatch パラメータが exact に設定されているか確認する必要がある。vacmAccessContextMatch パラメータが exact に設定されている場合、contextName は完全に一致している必要がある。適切な場合は、vacmAccessContextMatch の値を prefix に設定してみるとよい。詳細については、「アクセステーブル」を参照
VACM テーブルが正しく構成されていないと、ネットワークが承認されていない不正なアクセスを受ける可能性があります。VACM 構成をテスト環境でテストしてから、ネットワークデバイスに実装してください。
VACM の詳細については、RFC 3415 (http://www.ietf.org/rfc/rfc3415.txt ) を参照してください。
VACM の MIB 定義は、/etc/sma/snmp/mibs/SNMP-VIEW-BASED-ACM-MIB.txt にあります。
この節では、ユーザーを安全に作成する手順について説明します。システム管理エージェントでは、複数の方法でユーザーを作成できます。システム管理エージェントのインストール後、デフォルトの構成では、新しいユーザーは SNMPv1 および v2c ユーザーになります。
デフォルトでは、エージェントは SNMPv3 ユーザーを作成するように設定されていません。システム管理エージェントで SNMPv3 ユーザーを作成するには、まず主要 ファイル /etc/sma/snmp/snmpd.conf を編集する必要があります。詳細については、snmpd.conf(4) のマニュアルページを参照してください。
この節の最初の手順、「新しい SNMPv3 ユーザーを作成するには」では、最初の初期ユーザーを新規作成する方法を説明します。その他のユーザーは、この初期ユーザーを複製して作成します。ユーザーの認証やセキュリティーの型も、初期ユーザーから継承できます。これらの型はあとで変更可能です。複製を作成するときは、ユーザーの秘密鍵のデータを設定します。初期ユーザーと、あとで設定するユーザーのパスワードが必要になります。設定済みの初期ユーザーから、同時に複数の複製を作成することはできません。
この手順で使用される net-snmp-config コマンドは、/etc/sma/snmp/snmpd.conf ファイルに 1 行を追加することにより、初期ユーザーに対し、エージェントへの読み取りおよび書き込みアクセスを許可します。
システム管理エージェントを停止します。
# svcadm disable -t svc:/application/management/sma:default |
新規ユーザーを作成するには、net-snmp-config コマンドを実行します。
# /usr/sfw/bin/net-snmp-config --create-snmpv3-user -a "my_password" newuser |
このコマンドは、newuser という新しいユーザーを作成します。パスワードは my_password と同じになります。新しいユーザーの作成には、MD5 とDES の両方を使用します。これらについては、「認証プロトコルアルゴリズム」を参照してください。
デフォルトでは、これらの設定は、net-snmp-config コマンドを使ってユーザーを作成するとき、特に指定しなくても作成されます。
auth protocol = MD5 security level = rwuser auth
システム管理エージェントを起動します。
# svcadm enable svc:/application/management/sma:default |
新しいユーザーが存在するかどうかを確認します。
# snmpget -v 3 -u newuser -l authNoPriv -a MD5 -A my_password localhost sysUpTime.0 |
新しいユーザーに読み取りおよび書き込みアクセスを許可することが適切でない場合もあります。新しいユーザーに許可するアクセス権を減らすか変更する場合は、/etc/sma/snmp/snmpd.conf ファイルを編集します。詳細については、snmpd.conf(4) のマニュアルページを参照してください。
システム管理エージェントを停止します。
# svcadm disable -t svc:/application/management/sma:default |
newuser という名前の新しいユーザーを作成し、my_password というパスワードを設定するには、net-snmp-config コマンドを対話的に使用します。
# /usr/sfw/bin/net-snmp-config --create-snmpv3-user |
Enter a SNMPv3 user name to create: |
適切なユーザー名を指定します。この例の場合、次のように指定します。
newuser |
Enter authentication pass-phrase: |
適切なパスワードを入力します。この例の場合、次のように入力します。
my_password |
Enter encryption pass-phrase: |
認証パスワードを再利用する場合は、Return キーを押します。
adding the following line to /var/sma_snmp/snmpd.conf: createUser newuser MD5 "newuser_pass" DES adding the following line to /etc/sma/snmp/snmpd.conf: rwuser newuser |
デフォルトでは、これらの設定は、net-snmp-config コマンドを使ってユーザーを作成するとき、特に指定しなくても作成されます。
auth protocol = MD5
security level = rwuser auth
システム管理エージェントを起動します。
# svcadm enable svc:/application/management/sma:default |
新しいユーザーが存在するかどうかを確認します。
# snmpget -v 3 -u newuser -l authNoPriv -a MD5 -A my_password localhost sysUpTime.0 |
パスワードは 8 文字以上にする必要があります。
新しいユーザーに読み取りおよび書き込みアクセスを許可することが適切でない場合もあります。新しいユーザーに許可するアクセス権を減らすか変更する場合は、/etc/sma/snmp/snmpd.conf ファイルを編集します。詳細については、snmpd.conf(4) のマニュアルページを参照してください。
安全な SNMP で新しいユーザーを作成する場合は、最初に設定した初期ユーザーを複製する方法をお勧めします。この方法では、「新しい SNMPv3 ユーザーを作成するには」で設定したユーザーをコピーします。この方法では、「USM による認証とメッセージプライバシ」で説明した snmpusm コマンドを使用します。詳細については、snmpusm(1M) のマニュアルページを参照してください。
システム管理エージェントが実行中かどうかをチェックします。
# svcs svc:/application/management/sma:default |
エージェントがまだ起動していない場合は、起動します。
# svcadm enable svc:/application/management/sma:default |
snmpusm コマンドを使って新しいユーザーを作成します。
# snmpusm -v 3 -u newuser -a MD5 -A my_password -l authNoPriv localhost create lee newuser |
このコマンドでは、lee というユーザーを作成します。この新しいユーザーには、 「新しい SNMPv3 ユーザーを作成するには」で作成したソースユーザー newuser と同じパスワード my_password が与えられます。
新しいユーザーのパスワードを変更します。
# snmpusm -v 3 -u lee -a MD5 -A my_password -l authNoPriv localhost passwd my_password lee_password |
このコマンドでは、ユーザー lee に新しいパスワード lee_password が与えられます。デフォルトの auth type は MD5 です。
/etc/sma/snmp/snmpd.conf ファイルを直接編集するか、snmpvacm コマンドを使って、関連する VACM エントリを作成します。
snmpd.conf ファイルを直接編集する場合は、まずエージェントを一時的に停止する必要があります。
# svcadm disable -t svc:/application/management/sma:default |
lee にアクセスを割り当てます。
lee に読み取りおよび書き込みアクセスを許可するには、snmpd.conf ファイルに新しい rwuser 行を追加します。
rwuser lee |
lee に読み取り専用アクセスを許可するには、snmpd.conf ファイルに新しい rouser 行を追加します。
rouser lee |
セキュリティーレベルを指定しなかった場合、デフォルトの authNoPriv が選択されます。詳細については、snmpd.conf(4) または snmpvacm(1M) のマニュアルページを参照してください。
システム管理エージェントを起動します。
# svcadm enable svc:/application/management/sma:default |
この手順が成功したかどうかを確認します。
新しいユーザーが存在するかどうかを確認します。
# snmget -v 3 -u lee -a MD5 -A lee_password -l authNoPriv localhost sysUpTime.0 |
SNMPv1 および v2c ユーザーのセキュリティー保護には、コミュニティー文字列が使用されます。SMA には、標準 Net-SNMP トークン com2sec が付属しています。com2sec トークンにより、SNMPv1 および v2c のホスト名とコミュニティー文字列のペアをセキュリティー名にマッピングできます。この場合、セキュリティーレベルは noAuthNoPriv になります。 noAuthNoPriv セキュリティーレベルとその他のセ キュリティレベルの詳細については、「USM セキュリティー情報の格納場所」を参照してください。
システム管理エージェントでは、プロキシは SNMPv1 および v2c ユーザーに対してのみサポートされます。詳細については、「Solstice Enterprise Agents 要求のプロキシ処理」を参照してください。
SNMP 内で多数のグループを作成すると、これらのグループの管理が非常に複雑になります。多数のグループを作成すると、これらのグループの問題の障害追跡も非常に困難になります。
snmpd.conf ファイルを編集して、グループやビューを作成した場合、ストレージの型は固定されます。snmpvacm コマンドを使用せず、snmpd.conf ファイルを編集した場合、グループのエントリが固定されます。エントリを削除するには、これらを snmpd.conf ファイルから削除する必要があります。
「VACM によるアクセス制御」 のグループの作成および管理の例を参照してください。