●exec行 |
exec行を設定すると,特定のプログラムを実行し,その実行結果をSNMPのデータとして格納することができる。デフォルトのsnmpd.confファイルには,次のようなexec行がある。
execechotest /bin/echo hello world |
この設定は,“/bin/echo hello world”の実行結果――つまり,文字列"hello world"――をSNMPデータとして格納するというサンプルであり,大きな意味はない。
exec行は,次の書式で指定する。
exec 設定名実行ファイルのフルパス名引数 |
設定名の部分には,任意の名前を指定する。そして実行ファイルのフルパス名には,実行したいプログラムのフルパス名を,引数には,そのプログラムに渡したい引数を指定する。デフォルトの設定は,echotestという設定名で/bin/echoを引数“hello world”を伴って実行するという設定になっている。
exec行にて指定した実行ファイルの実行結果は,extTableサブツリー(1.3.6.1.4.1.2021.8)内に配列の形で含まれる(Table 11)。exec行もproc行の設定と同様,snmpd.confファイルでの登場順に,先頭から,1,2,3…というインデックス番号が振られる。この例では,echotestという1つの項目しかないので,echotestという設定名を付けたexec行のインデックス番号は1となる。
Table 11 extTableサブツリー(1.3.6.1.4.1.2021.8)
|
※iはインデックス番号。snmpd.confファイル中に出てきたexec行の登場順に,先頭から1,2,3,…という値。
Table 11に示したように,exec行で指定したプログラムの実行結果は,“1.3.6.1.4.1.2021.8.1.100.i”と“1.3.6.1.4.2021.8.1.101.i”にそれぞれ格納される。前者には,実行したプログラムのエラーコード,後者には,プログラムが標準出力に書き出した1行目がそれぞれ格納される。デフォルトのsnmpd.confファイルでは,/bin/echoコマンドを使って“hello world”と書き出している。そのため,“1.3.6.1.4.2021.8.1.101.1”の値が“hello world”に設定される。これはsnmpwalkコマンドを使ってextTableサブツリー(1.3.6.1.4.1.2021.8)を参照すれば確認できる。
$ snmpwalk localhost private .1.3.6.1.4.1.2021.8 enterprises.ucdavis.extTable.extEntry.extIndex.1 = 1 enterprises.ucdavis.extTable.extEntry.extNames.1 = echotest enterprises.ucdavis.extTable.extEntry.extCommand.1 = /bin/echo hello world enterprises.ucdavis.extTable.extEntry.extResult.1 = 0 enterprises.ucdavis.extTable.extEntry.extOutput.1 = hello world enterprises.ucdavis.extTable.extEntry.extErrFix.1 = 0 enterprises.ucdavis.extTable.extEntry.extErrFixCmd.1 = |
exec行での設定は,さまざまな用途に使うことができる。たとえば,メールキューの情報を調べて,その数を返すようなスクリプトを用意すれば,SNMPを通じて,現在メールキューに溜まっているメールの数を調べるようなことができる。
なおexec行を設定するとき,特定のOIDを指定すると,指定した実行ファイルの実行結果を1行ごとに配列として階層ツリーに格納することもできる(その場合,Table 11に示した階層ツリーが若干異なる)。詳細はucd-snmpのmanを参照してほしい。
exec行の設定では,任意のプログラムを実行できるので自由度が高い反面,セキュリティには十分注意していただきたい。snmpdはrootユーザーで動作するため,exec行で指定した各種実行ファイルは,rootユーザーのもとで実行される。よってセキュリティ上懸念がありそうなプログラムを指定するのは避けるべきだ。もちろん,snmpdから実行される実行ファイルは,rootユーザー以外には書き換えできないようにするべきだ。そうしないとsnmpdから実行されるプログラムが他のユーザーに書き換えられてしまい,想定しなかったプログラムがrootユーザーの権限で実行されることになるだろう。
また,exec行での設定は,proc行の設定と同様,管理者がSNMPマネージャを使ってextErrFixオブジェクト(1.3.6.1.4.1.2021.8.1.102.i)に1を設定すると,snmpd.confファイル中のexecfix行で指定しておいたプログラムを実行することができるようになっている。そのときに実行するプログラム名を指定するのがexecfix行の設定だ。デフォルトのsnmpd.confファイルには,execfix行は1つもない。
execfix行を設定すると,管理者がSNMPマネージャを使って,特定のプログラムを実行できるようになるが,セキュリティ対策をとらないと,悪用される危険性がある。本稿ではexecfix行の設定についての説明は割愛する。
21/36 |