CodeZine(コードジン)

特集ページ一覧

net-snmpについて(v3の設定、パッチについて)

net-snmpによるv3の設定方法、及びパッチについて

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/10/08 14:00

目次

v3環境構築手順

8.3 環境構築手順

 まず、snmpdおよびsnmptrapdを止めます。

% /etc/init.d/snmpd stop
% /etc/init.d/snmptrapd stop

 snmpd.confにユーザーを設定します。

% vi /usr/share/snmp/snmpd.conf
rwuser snmproot

 仮snmpd.confにユーザーを追記します。/var/net-snmp/snmpd.conf を開き、usmUser文をすべて削除し、下記をファイル中段あたりに記述します。

createUser snmproot SHA hogehoge AES fugafuga  <- ファイル中断の空欄部分に追記

 snmpdを開始します。

% /etc/init.d/snmpd start

 ユーザー一覧を表示します(v2コマンドでOK)。

% snmpwalk -v 2c -c localcom localhost SNMP-USER-BASED-SM-MIB::usmUserStatus
SNMP-USER-BASED-SM-MIB::usmUserStatus.".....z9{IE!dH"."snmproot" = INTEGER: active(1)
SNMP-USER-BASED-SM-MIB::usmUserStatus.".....z9{IE!dH"."_internal" = INTEGER: active(1)

 "snmproot"ができました。なお、"_internal"についてはTrap送信イベントで内部監視用に作成したユーザーです。6.1章を参照。

 管理ユーザーは一般ユーザー用にMIB View(all)を作成します。

% snmpvacm -v 3 -u snmproot -l authPriv -a SHA -A hogehoge -x AES -X fugafuga localhost createView all .1 80
View successfully created.

 同様に、グループ(RWGroup)を作成し、MIB View(all)をくくり付け、書き込み可能にします。

% snmpvacm -v 3 -u snmproot -l authPriv -a SHA -A hogehoge -x AES -X fugafuga localhost createAccess RWGroup 3. 1 1 all all none
Access successfully created.

 一般ユーザー(akamatsu)を作成。

% snmpusm -v 3 -u snmproot -l authPriv -a SHA -A hogehoge -x AES -X fugafuga localhost create akamatsu snmproot
User successfully created.

 一般ユーザーをグループ(RWGroup)に登録。

% snmpvacm -v 3 -u snmproot -l authPriv -a SHA -A hogehoge -x AES -X fugafuga localhost createSec2Group 3 akamatsu RWGroup
Sec2group successfully created.

 この時点で一般ユーザー(akamatsu)は、MIBへのアクセスが可能となります。

% snmpwalk -v 3 -u akamatsu -l authPriv -a SHA -A hogehoge -x AES -X fugafuga localhost fileTable
UCD-SNMP-MIB::fileIndex.1 = INTEGER: 1
UCD-SNMP-MIB::fileName.1 = STRING: /tmp/dummy.txt
UCD-SNMP-MIB::fileSize.1 = INTEGER: 0 kB
UCD-SNMP-MIB::fileMax.1 = INTEGER: 100 kB
UCD-SNMP-MIB::fileErrorFlag.1 = INTEGER: noError(0)
UCD-SNMP-MIB::fileErrorMsg.1 = STRING:

 一般ユーザーの認証パスワードを初期値(hogehoge)からgohogohoに変更。

% snmpusm -v 3 -u akamatsu -l authPriv -a SHA -A hogehoge -x AES -X fugafuga localhost -Ca passwd hogehoge gohogoho
SNMPv3 Key(s) successfully changed.

 一般ユーザーの暗号パスワードを初期値(fugafuga)からfungafungaに変更。

% snmpusm -v 3 -u akamatsu -l authPriv -a SHA -A gohogoho -x AES -X fugafuga localhost -Cx passwd fugafuga fungafunga
SNMPv3 Key(s) successfully changed.

 一般ユーザーが新しいパスワードでMIBにアクセス。

% snmpwalk -v 3 -u akamatsu -l authPriv -a SHA -A gohogoho -x AES -X fungafunga localhost fileTable
UCD-SNMP-MIB::fileIndex.1 = INTEGER: 1
UCD-SNMP-MIB::fileName.1 = STRING: /tmp/dummy.txt
UCD-SNMP-MIB::fileSize.1 = INTEGER: 0 kB
UCD-SNMP-MIB::fileMax.1 = INTEGER: 100 kB
UCD-SNMP-MIB::fileErrorFlag.1 = INTEGER: noError(0)
UCD-SNMP-MIB::fileErrorMsg.1 = STRING:

 ユーザー一覧を表示します。

% snmpwalk -v 2c -c localcom localhost SNMP-USER-BASED-SM-MIB::usmUserStatus
SNMP-USER-BASED-SM-MIB::usmUserStatus.".......,fY.vH...."."akamatsu" = INTEGER: active(1)
SNMP-USER-BASED-SM-MIB::usmUserStatus.".......,fY.vH...."."snmproot" = INTEGER: active(1)
SNMP-USER-BASED-SM-MIB::usmUserStatus.".......,fY.vH...."."_internal" = INTEGER: active(1)

 一般ユーザーをコピーして新規一般ユーザー(eight)を作成。

% snmpusm -v 3 -u akamatsu -l authPriv -a SHA -A gohogoho -x AES -X fungafunga localhost create eight akamatsu
User successfully cloned.
% snmpwalk -v 2c -c localcom localhost SNMP-USER-BASED-SM-MIB::usmUserStatus
SNMP-USER-BASED-SM-MIB::usmUserStatus.".......,fY.vH...."."eight" = INTEGER: active(1)
SNMP-USER-BASED-SM-MIB::usmUserStatus.".......,fY.vH...."."akamatsu" = INTEGER: active(1)
SNMP-USER-BASED-SM-MIB::usmUserStatus.".......,fY.vH...."."snmproot" = INTEGER: active(1)
SNMP-USER-BASED-SM-MIB::usmUserStatus.".......,fY.vH...."."_internal" = INTEGER: active(1)

 新規一般ユーザーをグループ(RWGroup)に登録。

% snmpvacm -v 3 -u akamatsu -l authPriv -a SHA -A gohogoho -x AES -X fungafunga localhost createSec2Group 3 eight RWGroup

 これで新規一般ユーザー(eight)は、MIBへのアクセスが可能となります。

% snmpwalk -v 3 -u eight -l authPriv -a SHA -A gohogoho -x AES -X fungafunga localhost fileTable
UCD-SNMP-MIB::fileIndex.1 = INTEGER: 1
UCD-SNMP-MIB::fileName.1 = STRING: /tmp/dummy.txt
UCD-SNMP-MIB::fileSize.1 = INTEGER: 0 kB
UCD-SNMP-MIB::fileMax.1 = INTEGER: 100 kB
UCD-SNMP-MIB::fileErrorFlag.1 = INTEGER: noError(0)
UCD-SNMP-MIB::fileErrorMsg.1 = STRING:

 一般ユーザー(eight)を削除。

% snmpusm -v 3 -u akamatsu -l authPriv -a SHA -A gohogoho -x AES -X fungafunga localhost delete eight
User successfully deleted.
% snmpwalk -v 2c -c localcom localhost SNMP-USER-BASED-SM-MIB::usmUserStatus
SNMP-USER-BASED-SM-MIB::usmUserStatus.".......,fY.vH...."."akamatsu" = INTEGER: active(1)
SNMP-USER-BASED-SM-MIB::usmUserStatus.".......,fY.vH...."."snmproot" = INTEGER: active(1)
SNMP-USER-BASED-SM-MIB::usmUserStatus.".......,fY.vH...."."_internal" = INTEGER: active(1)

 以上でv3環境の構築手順を終えます。まだv3に準拠したエージェントは少ないですが、情報漏えいによる影響が甚大になりがちな昨今においては、v3による暗号化・認証機能は必須と言えるでしょう。

 その観点からも、v3の使用を検討するべきかと思います。

9. その他(パッチについて)

 7章でも書いていますが、snmpdには起動時に下記の通りassertが出力されます。

netsnmp_assert !"registration != duplicate" failed agent_registry.c:535 netsnmp_subtree_load()

 これは特に何か悪さをするものではないのですが、コミュニティ上にパッチが出ており、今回はソースファイルから構築しているため、せっかくなので当ててみます。

9.1 パッチファイル取得

 Sourceforgeのページ最後尾に[Download]とあるので、そこから落とします。

 ファイル名は「r16669.diff.txt」となっているはずです。内容は下記の通りなので、これをコピペしても結構です。

--- branches/V5-4-patches/net-snmp/agent/agent_registry.c	2007/08/20 08:06:42	16668
+++ branches/V5-4-patches/net-snmp/agent/agent_registry.c	2007/08/22 21:56:23	16669
@@ -532,7 +532,8 @@
 	
 	    if (next && (next->namelen  == new_sub->namelen) &&
 		(next->priority == new_sub->priority)) {
-                netsnmp_assert(!"registration != duplicate"); /* always false */
+                if (new_sub->namelen != 1) /* ignore root OID dups */
+                    netsnmp_assert(!"registration != duplicate"); /* always false */
 		return MIB_DUPLICATE_REGISTRATION;
 	    }

9.2 パッチ処理手順

場所移動
% cd ~/.snmp/net-snmp-5.4.1.2
% cp -p <パッチファイル保管場所>/r16669.diff.txt .
パッチ当て処理
% patch -p1 -N < r16669.diff.txt
missing header for unified diff at line 3 of patch
can't find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|es/V5-4-patches/net-snmp/agent/agent_registry.c        2007/08/20 08:06:42     16668
|+++ branches/V5-4-patches/net-snmp/agent/agent_registry.c      2007/08/22 21:56:23     16669
--------------------------
File to patch: agent/agent_registry.c   <- こちらを入力
patching file agent/agent_registry.c
%
make & make install
% make
% make install
%

9.3 動作確認

% /etc/init.d/snmpd restart
% cd <エージェント用ファイル置き場>
% ./matsu_test

 これで変なassertメッセージが出力されなくなりました。

10. 最後に

 net-snmpにおけるSNMPの運用レポートは以上となります。
ココまで読んで頂ければ、SNMPは決して"Simple"なプロトコルではないことがお分かりいただけたでしょう。

 ですが拡張性に富む構成、オープンソースであるnet-snmpの運用実績は、オペレータおよび監視者に対し有益な情報をもたらすはずです。

 SNMPを利用する事で遠隔監視を行ったり監視トレンドを分析したり、KOMATSUの例ではないですが、営業戦略や物品管理に使える情報の収集など、さまざまな場面で使えます。ぜひご検討下さい。

 なお、機会(と私のやる気)があれば、net-snmpのWindowsへのインストール方法などについて、述べたいと思います。

参考文献とレビュー

  • 実践SNMP教科書』 山居正幸 著、CQ出版、2005年3月
    日本語対応のSNMPマネージャであるTWSNMPを作成されたTwise labo社の山居さんが書かれた本です。プロトコルレベルまで詳細に書かれた本で、SNMPを学ぶには必須の本と言えます。
  • 入門SNMP』 Douglas R. Mauro・Kevin J. Schmidt 著、土本康生・福田剛士 訳、オライリー・ジャパン、2002年7月
    オライリーが出している本。広く浅く書かれている印象があります。HPのOpenViewの使い方などが記載されています。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:net-snmpについて

著者プロフィール

  • 赤松 エイト(エイト)

    (株)DTSに勤てます。 WebアプリやJavaやLL等の上位アプリ環境を密かに憧れつつも、ず~っとLinuxとかHP-UXばかり、ここ数年はカーネル以上アプリ未満のあたりを行ったり来たりしています。 mixiもやってまして、こちらは子育てとか日々の日記メインです。

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5