############################################################################### # # EXAMPLE.conf.jp: # An example configuration file for configuring the ucd-snmp snmpd agent. # # 日本語訳:森本 (too@os.gulf.or.jp) # 訳者は内容の正しさについて責任を負えません # 誤訳などの指摘は大歓迎ですので、お知らせください。 # # 文体とかめちゃくちゃですね。最後の1節で未訳箇所もあるので # そのうち一緒に直します。(そのうちっていつだろ…) # ############################################################################### # # このファイルはただのサンプルのつもりです. 実際に使う時には # snmpd エージェントが起動したら探しにいきますので # /usr/local/share/snmp/snmpd.conf にファイルを置いてください。 # # 関心のある向きは、snmpconf(perlのスクリプト)プログラムを使って # snmpd.conf ファイルを生成することもできますのでどうぞ。 # # メモ: このファイルは EXAMPLE.conf.def を元に自動的に作られます # 絶対に EXAMPLE.conf.def ファイルは直接触らないでください。 # まず、configure と make をすませてから、EXAMPLE.conf ファイルを # 読んでみてください。 # '#' で始まる行はコメントです。しっかり読んでくださいね。 # その他はすべてコンフィギュレーションに使われます。 # # お願い: snmpd.conf(5) も読んでください!! # ############################################################################### # アクセス制御 ############################################################################### # "COMMUNITY" TOKEN はかならず自分のサイトだけで通用する名前に # 変えること。 # また NETWORK TOKEN は アドレス空間を表したものに変えること。 # ところで, 「なんで動かないの」という質問をよく受けますが、 # これは往々にして「自分がアクセスできるようにするには、 # どうすればいいの」というのが正しい。 # # デフォルトでは, なーんにも設定しないマシンから見ると "public" # という read only のコミュニティにアクセスします。 # 以下のように設定すれば,コミュニティ名を変更して、アクセス権を # ちゃんと設定できます。 # # 以下の行では, エージェントのアクセス権を変更し, COMMUNITY では # ネットワーク全体(例えば 10.10.10.0/24)で読み出しのみ許可し、 # localhost(127.0.0.1 これは実アドレスではない) のみ # 読み書き可能としています。 # # もっと詳しく知りたいということなら、FAQ や snmpd.conf(5) を # 参照してください。 #### # 最初に, コミュニティ名(COMMUNITY)を セキュリティ名 に対応づけます。 # (local や mynetwork というのは, どこからリクエストが飛んで来るかを # 示すための名前です): # sec.name source community com2sec local localhost COMMUNITY com2sec mynetwork NETWORK/24 COMMUNITY #### # 二番目, セキュリティ名 と グループ名 を対応づけます: # sec.model sec.name group MyRWGroup any local group MyROGroup any mynetwork #### # 三番目, グループごとに権限を設定できるように view を作ります。 # incl/excl subtree mask view all included .1 80 #### # 最後に, view に対して様々な権限を持つグループアクセスを # 許可してあげます。 # context sec.model sec.level prefix read write notif access MyROGroup "" any noauth 0 all none none access MyRWGroup "" any noauth 0 all all none # ----------------------------------------------------------------------------- ############################################################################### # システム管理者への連絡先情報 # # snmpd.conf ファイル中に、システム管理者のいる場所と連絡先を # 変数として埋めこんでおくことができます。 syslocation Right here, right now. syscontact Me # snmpwalk ツールで出力するとこんな感じになります。 # % snmpwalk -v 1 localhost public system # system.sysDescr.0 = "SunOS name sun4c" # system.sysObjectID.0 = OID: enterprises.ucdavis.ucdSnmpAgent.sunos4 # system.sysUpTime.0 = Timeticks: (595637548) 68 days, 22:32:55 # system.sysContact.0 = "Me " # system.sysName.0 = "name" # system.sysLocation.0 = "Right here, right now." # system.sysServices.0 = 72 # ----------------------------------------------------------------------------- ############################################################################### # プロセスチェック # # ここからは、そのホストでどんあプロセスが動いているのかを # agent で調べるためのサンプルです。文法は # # proc NAME [MAX=0] [MIN=0] # # というように書きます。 # # NAME: チェックしたいプロセス名。そのものの名前でないとダメ。 # たとえば、http じゃなくて httpd というように。 # MAX: 最大許容プロセス数。デフォルトは 0 # MIN: 最小許容プロセス数。デフォルトは 0 # # 具体例: # # mountd は動いているかな? proc mountd # ntalkd は 4 以上は動いてほしくない。0 でもOk。 proc ntalkd 4 # sendmail は少なくとも1つは必要。でも 10 以上なら警告。 proc sendmail 10 1 # これらを snmpwalk でみると mib はこんなふうになります。 # # % snmpwalk -v 1 localhost public .1.3.6.1.4.1.2021.2 # enterprises.ucdavis.procTable.prEntry.prIndex.1 = 1 # enterprises.ucdavis.procTable.prEntry.prIndex.2 = 2 # enterprises.ucdavis.procTable.prEntry.prIndex.3 = 3 # enterprises.ucdavis.procTable.prEntry.prNames.1 = "mountd" # enterprises.ucdavis.procTable.prEntry.prNames.2 = "ntalkd" # enterprises.ucdavis.procTable.prEntry.prNames.3 = "sendmail" # enterprises.ucdavis.procTable.prEntry.prMin.1 = 0 # enterprises.ucdavis.procTable.prEntry.prMin.2 = 0 # enterprises.ucdavis.procTable.prEntry.prMin.3 = 1 # enterprises.ucdavis.procTable.prEntry.prMax.1 = 0 # enterprises.ucdavis.procTable.prEntry.prMax.2 = 4 # enterprises.ucdavis.procTable.prEntry.prMax.3 = 10 # enterprises.ucdavis.procTable.prEntry.prCount.1 = 0 # enterprises.ucdavis.procTable.prEntry.prCount.2 = 0 # enterprises.ucdavis.procTable.prEntry.prCount.3 = 1 # enterprises.ucdavis.procTable.prEntry.prErrorFlag.1 = 1 # enterprises.ucdavis.procTable.prEntry.prErrorFlag.2 = 0 # enterprises.ucdavis.procTable.prEntry.prErrorFlag.3 = 0 # enterprises.ucdavis.procTable.prEntry.prErrMessage.1 = "No mountd process running." # enterprises.ucdavis.procTable.prEntry.prErrMessage.2 = "" # enterprises.ucdavis.procTable.prEntry.prErrMessage.3 = "" # enterprises.ucdavis.procTable.prEntry.prErrFix.1 = 0 # enterprises.ucdavis.procTable.prEntry.prErrFix.2 = 0 # enterprises.ucdavis.procTable.prEntry.prErrFix.3 = 0 # # 注意として、mountd が1つもいない場合は、errorFlag に 1 が立ちます。 # (たとえば rpc.mountd を使う場合など。でもこれはあまりよくないです) # こういうときは ErrMessage が原因を示しています。snmpd.conf ファイルも # よく見直してみましょう。 # # 特例: min も max も 0 と設定した場合には、max は無制限で、min は 1 # とみなします。 # # ----------------------------------------------------------------------------- ############################################################################### # プログラムやスクリプトの実行 # # エージェントから、1 行だけの出力とリターンコードを受け取るような # プログラムなどを起動できます。例を2つ挙げます。 # # exec NAME PROGRAM [ARGS ...] # # NAME: プログラムの一般的な名前 # PROGRAM: 本当に動かすプログラム。/ からのフルパスで書くこと! # ARGS: プログラムに渡す引数 # 単純に hello world とやるにはこういう感じ exec echotest /bin/echo hello world # 次のようなシェルスクリプトを動かすこともできます。 # # #!/bin/sh # echo hello world # echo hi there # exit 35 # # 注意: 次の実行例は、誰かががスクリプト(/tmp/shtest)の内容を勝手に # 書き換えて、不用意にセキュリティホールを作らないよう # コメントアウトしています。使うときにはコメントを外すこと。 # #exec shelltest /bin/sh /tmp/shtest # そうすると、snmpwalk の実行例は # % snmpwalk -v 1 localhost public .1.3.6.1.4.1.2021.8 # enterprises.ucdavis.extTable.extEntry.extIndex.1 = 1 # enterprises.ucdavis.extTable.extEntry.extIndex.2 = 2 # enterprises.ucdavis.extTable.extEntry.extNames.1 = "echotest" # enterprises.ucdavis.extTable.extEntry.extNames.2 = "shelltest" # enterprises.ucdavis.extTable.extEntry.extCommand.1 = "/bin/echo hello world" # enterprises.ucdavis.extTable.extEntry.extCommand.2 = "/bin/sh /tmp/shtest" # enterprises.ucdavis.extTable.extEntry.extResult.1 = 0 # enterprises.ucdavis.extTable.extEntry.extResult.2 = 35 # enterprises.ucdavis.extTable.extEntry.extOutput.1 = "hello world." # enterprises.ucdavis.extTable.extEntry.extOutput.2 = "hello world." # enterprises.ucdavis.extTable.extEntry.extErrFix.1 = 0 # enterprises.ucdavis.extTable.extEntry.extErrFix.2 = 0 # /tmp/shtest の2つ目の命令(echo hi there)はカットされている。 # また、戻り値の 35 は正しく表示されていることに注意すること。 # ----------------------------------------------------------------------------- ############################################################################### # ディスク容量のチェック # # このエージェントで、ディスクの残り容量や上限値を超えたかどうかを確認できます。 # disk PATH [MIN=100000] # # PATH: 調べたいディスク(パーティション)の mount path # MIN: ディスクの残り容量の下限。これを超えると MIB の errorFlag が # セットされる。デフォルト値は 100000. # / パーティションが10MB以上空いているか確認するなら、 disk / 10000 # % snmpwalk -v 1 localhost public .1.3.6.1.4.1.2021.9 # enterprises.ucdavis.diskTable.dskEntry.diskIndex.1 = 0 # enterprises.ucdavis.diskTable.dskEntry.diskPath.1 = "/" Hex: 2F # enterprises.ucdavis.diskTable.dskEntry.diskDevice.1 = "/dev/dsk/c201d6s0" # enterprises.ucdavis.diskTable.dskEntry.diskMinimum.1 = 10000 # enterprises.ucdavis.diskTable.dskEntry.diskTotal.1 = 837130 # enterprises.ucdavis.diskTable.dskEntry.diskAvail.1 = 316325 # enterprises.ucdavis.diskTable.dskEntry.diskUsed.1 = 437092 # enterprises.ucdavis.diskTable.dskEntry.diskPercent.1 = 58 # enterprises.ucdavis.diskTable.dskEntry.diskErrorFlag.1 = 0 # enterprises.ucdavis.diskTable.dskEntry.diskErrorMsg.1 = "" # ----------------------------------------------------------------------------- ############################################################################### # 平均負荷率をチェックする # # load [1MAX=12.0] [5MAX=12.0] [15MAX=12.0] # # 1MAX: 1分間の平均負荷率が指定した値を超えると、 errorFlag が # セットされる。 # 5MAX: 5分間の平均負荷率の場合。 # 15MAX: 15分間の平均負荷率の場合。 # 負荷率の指定は以下のように行います。 load 12 14 14 # % snmpwalk -v 1 localhost public .1.3.6.1.4.1.2021.10 # enterprises.ucdavis.loadTable.laEntry.loadaveIndex.1 = 1 # enterprises.ucdavis.loadTable.laEntry.loadaveIndex.2 = 2 # enterprises.ucdavis.loadTable.laEntry.loadaveIndex.3 = 3 # enterprises.ucdavis.loadTable.laEntry.loadaveNames.1 = "Load-1" # enterprises.ucdavis.loadTable.laEntry.loadaveNames.2 = "Load-5" # enterprises.ucdavis.loadTable.laEntry.loadaveNames.3 = "Load-15" # enterprises.ucdavis.loadTable.laEntry.loadaveLoad.1 = "0.49" Hex: 30 2E 34 39 # enterprises.ucdavis.loadTable.laEntry.loadaveLoad.2 = "0.31" Hex: 30 2E 33 31 # enterprises.ucdavis.loadTable.laEntry.loadaveLoad.3 = "0.26" Hex: 30 2E 32 36 # enterprises.ucdavis.loadTable.laEntry.loadaveConfig.1 = "12.00" # enterprises.ucdavis.loadTable.laEntry.loadaveConfig.2 = "14.00" # enterprises.ucdavis.loadTable.laEntry.loadaveConfig.3 = "14.00" # enterprises.ucdavis.loadTable.laEntry.loadaveErrorFlag.1 = 0 # enterprises.ucdavis.loadTable.laEntry.loadaveErrorFlag.2 = 0 # enterprises.ucdavis.loadTable.laEntry.loadaveErrorFlag.3 = 0 # enterprises.ucdavis.loadTable.laEntry.loadaveErrMessage.1 = "" # enterprises.ucdavis.loadTable.laEntry.loadaveErrMessage.2 = "" # enterprises.ucdavis.loadTable.laEntry.loadaveErrMessage.3 = "" # ----------------------------------------------------------------------------- ############################################################################### # 拡張機能 # # これは、それ自身のmibテーブルに各mibを置くことにより # 前に述べた複数行の出力問題を緩和します: # 以下のようなスクリプトをかいたとします。 # # #!/bin/sh # echo hello world # echo hi there # exit 35 # # 注意: 次の実行例は、誰かががスクリプト(/tmp/shtest)の内容を勝手に # 書き換えて、不用意にセキュリティホールを作らないよう # コメントアウトしています。使うときにはコメントを外すこと。 # exec .1.3.6.1.4.1.2021.50 shelltest /bin/sh /tmp/shtest # % snmpwalk -v 1 localhost public .1.3.6.1.4.1.2021.50 # enterprises.ucdavis.50.1.1 = 1 # enterprises.ucdavis.50.2.1 = "shelltest" # enterprises.ucdavis.50.3.1 = "/bin/sh /tmp/shtest" # enterprises.ucdavis.50.100.1 = 35 # enterprises.ucdavis.50.101.1 = "hello world." # enterprises.ucdavis.50.101.2 = "hi there." # enterprises.ucdavis.50.102.1 = 0 # これで出力結果がちゃんと2行になり、2つめのスクリプトの # 'hi there' というメッセージも見えました。 # 注意:もし .50.* というような出力がちゃんとした結果にしたいなら # mib.txt ファイルを修正すること。 # 他の方法としてはこんな手もあります: # exec .1.3.6.1.4.1.2021.51 ps /bin/ps # exec .1.3.6.1.4.1.2021.52 top /usr/local/bin/top # exec .1.3.6.1.4.1.2021.53 mailq /usr/bin/mailq # ----------------------------------------------------------------------------- ############################################################################### # パススルーの制御 # # 使い方: # pass MIBOID EXEC-COMMAND # # This will pass total control of the mib underneath the MIBOID # portion of the mib to the EXEC-COMMAND. # # 注意: passtest スクリプトの path は あなたのソースディレクトリに変更するか # 逆にスクリプトをそのpathに置くようにしてください # 例:(詳細はスクリプトを見てください) # (下の例がコメントアウトされているのは、正しい場所にスクリプトを # 置かないといけないからです。passtest が /usr/local/local に # デフォルトで存在しているわけではありません) # # pass .1.3.6.1.4.1.2021.255 /bin/sh /usr/local/local/passtest # % snmpwalk -v 1 localhost public .1.3.6.1.4.1.2021.255 # enterprises.ucdavis.255.1 = "life the universe and everything" # enterprises.ucdavis.255.2.1 = 42 # enterprises.ucdavis.255.2.2 = OID: 42.42.42 # enterprises.ucdavis.255.3 = Timeticks: (363136200) 42 days, 0:42:42 # enterprises.ucdavis.255.4 = IpAddress: 127.0.0.1 # enterprises.ucdavis.255.5 = 42 # enterprises.ucdavis.255.6 = Gauge: 42 # # % snmpget -v 1 localhost public .1.3.6.1.4.1.2021.255.5 # enterprises.ucdavis.255.5 = 42 # # % snmpset -v 1 localhost public .1.3.6.1.4.1.2021.255.1 s "New string" # enterprises.ucdavis.255.1 = "New string" # # 特別な使い方についての情報は、man/snmpd.conf.5 のマニュアルページや # 上で書いた local/pastest スクリプトの内容を見てください。 ############################################################################### # さらなる情報 # # snmpd.conf のマニュアルページや "snmpd -H" の出力結果を参照してください。