いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.082 / 読者数:947名

こんばんは、うすだです。

わたしは、毎年、このくらいの時期から、静電気に悩まされます。

ドアとか金属なものはありがちだと思いますが、会社にいますと、金属に限らず、 硬いものに触ると、必ずと言っていいほどビリッときます。
何かに呪われているんじゃないか、とあらぬ疑いでもかけたくなるくらいに、 頻発します。いやもうほんとに。

静電気防止のわっかみたいなものを腕につけていても、 まったくと言っていいほど効果がありません。 魔よけがほんものの悪魔には効かないようなものでしょうか。

ですので、ものを触ろうとするたびに、スリッパを脱いで足を接地して、 万が一ビリッときても仕方ないという覚悟ができてから、触れます。

そういえば、ネバーエンディングストーリーで、ふりむいてはいけない、 ふりむくと固められてしまう、みたいな門がありましたよね。
思いきって触れることと、ふりむかずに門をくぐるのは、 どこか似ているような気がします。

…頭の中がやや混乱していますが、今年も、どきどきしながら、 冬の会社を満喫したいと思います。

静電気のことはとりあえず忘れて、今週も、はりきってまいります!

今週のお題 - USBポートを監視する

サーバはみんなのものですので、むちゃな使い方をすると、 みんなの迷惑になります。
また、いろんなひとのいろんなデータが置いてありますので、データなどの扱いには、 十分注意する必要があります。

しかしながら、リソースがあれば使いたくなる、データがあると中を見てみたくなる、 というのが、人間というものではないでしょうか。
つまり、そこに USB ポートがあると、機器を挿してなにかさせてみたくなるのが、 人情というものではないか、と思うわけです。

…ああ、持っていきかたが強引ですが、なにはともあれ、システム管理者たるもの、 得られる情報は限りなく収集し、迅速に対処すべきです。
ですので、USB が乱用悪用されないよう、USBポートを常に監視することは、 みんなのために当然行うべきことだ、と胸をはって言えます。

大風呂敷を広げきったところで、今週は、USBポートを監視する方法を、 ご紹介したいと思います。


最初に種明かしをしてしまいますと、実は、 USB機器の抜き差しを知らせてくれる仕組みが、Linux カーネルにはあります。

Linux カーネルは、USB機器を新たに見つけたり、USB機器が抜きとられたとき、 /proc/sys/kernel/hotplug に登録されたコマンドを実行してくれるようになっています。
たとえば、VineLinux では、murasaki というひとが登録されています。

  % cat /proc/sys/kernel/hotplug
  /sbin/hotplug.murasaki

ちなみに、sysctl コマンドでも確認できます。

  % sysctl kernel.hotplug
  kernel.hotplug = /sbin/hotplug.murasaki

さらにちなみに、手元の Fedora Core 5 では、以下のように、 何も登録されていませんでした。

  % sysctl kernel.hotplug
  kernel.hotplug = 

ということで、USB機器の抜き差しを知るには、 登録されている hotplug になにかを仕込めば、実現できそうに思われます。

とはいえ、もともとの hotplug に細工をするのは気が引けます。
ですので、hotplug の代わりになるスクリプトを用意する、という方法を用います。 以下のような、簡単なシェルスクリプトを作ってみました。

  #!/bin/sh
  ORG_HOTPLUG="/sbin/hotplug.murasaki"

  if [ "z$1" = "zusb" ]; then
      /usr/bin/printenv | /usr/bin/Mail -s "usb: $ACTION" root
  fi
  [ -x "$ORG_HOTPLUG" ] && $ORG_HOTPLUG $*

$ORG_HOTPLUG には、 /proc/sys/kernel/hotplug に登録されているパスを指定してください。 (つまり、上記の場合は、VineLinux 用です。)
機能的にはもとの hotplug(==$ORG_HOTPLUG) と同じである必要がありますので、 最後の行で、それを実行しています。
ただ、それだけではもとの hotplug と機能的に変わりませんので、 引数が "usb" だった場合、環境変数一覧を root にメールする、 という仕込みを入れてみました。

これを、例えば /usr/local/sbin/hotplug.test というファイル名で保存し、 実行可能な状態にしておきます。
そして、実際に hotplug として登録してみましょう。

  # sysctl -w kernel.hotplug=/usr/local/sbin/hotplug.test
  kernel.hotplug = /usr/local/sbin/hotplug.test

上記は sysctl コマンドで行っていますが、 下記のように proc_fs 経由でも登録できます。

  # echo /usr/local/sbin/hotplug.test > /proc/sys/kernel/hotplug

登録したら、実際に USB機器を挿してみてください。
問題なければ、root 宛に、以下のようなメールが届くはずです。

  Subject: usb: add

  PATH=/sbin:/bin:/usr/sbin:/usr/bin
  ACTION=add
  INTERFACE=8/6/80
  PRODUCT=781/5150/10
  TYPE=0/0/0
  ...後略...

Linux カーネルが用意してくれた環境変数は、主に以下があります。

環境変数名概 要
ACTION挿したときは add, 抜いたときは remove
TYPEデバイスクラス/サブクラス/プロトコル
INTERFACEインターフェースクラス/サブクラス/プロトコル
PRODUCTベンダID/プロダクトID/デバイスリリース番号

詳細は割愛しますが、挿抜は $ACTION で知ることができ、 USB機器の種類は $TYPE や $INTERFACE, $PRODUCT で判別できます。

 

ただ、Fedora Core 5 では、hotplug がなぜか2回呼ばれました。
そのうち1回は、TYPE や INTERFACE などの環境変数が設定されていませんでした。 ですので、いちいち2通もメールが来るのはいやだという貴兄は、 以下のように、$TYPE などの存在をチェックすれば、1通に減らせます。

  #!/bin/sh
  ORG_HOTPLUG="/sbin/hotplug.murasaki"

  if [ "z$1" = "zusb" -a -n "$TYPE" ]; then
      /usr/bin/printenv | /usr/bin/Mail -s "usb: $ACTION" root
  fi
  [ -x "$ORG_HOTPLUG" ] && $ORG_HOTPLUG $*

以上、USBポートを監視する方法について、ご紹介しました。

まとめますと、Linux カーネルは、USB機器の挿抜に気づいたら、 usb という文字列を引数に hotplug を実行します。
そして、その際に設定された、 $ACTION, $TYPE, $INTERFACE や $PRODUCT などの環境変数をもとに、 USB機器の種類を知ることができます。

ということでしたが、やや中途半端感が漂っているように思いますので、 来週は、そのどんよりとした空気を払拭したいと思います。

あ、それから、上記を試したあとは、hotplug をもとに戻すことを、 忘れないようにしてくださいませ。(そのままでいいかたは、そのままで…。)

宿題の答え

先週の宿題は、

  DHCP サーバは、リレーエージェント経由でアドレスを割り当てるとき、
  クライアントのいるサブネットの情報を、どこから得るのでしょうか?

でした。

まずは、tcpdump でパケットをキャプチャしてみましょう。

以下のような環境を用意し、DHCPクライアントから、 DHCP でアドレスを要求させたときのパケットを、tcpdump で入手しました。
DHCPサーバが 192.168.1.0/24 というサブネットに、 リレーエージェントが 192.168.2.0/24 からのリクエストを中継する役目を負っています。

          192.168.1.1     192.168.1.254            192.168.2.254
  [DHCPサーバ] --------+---------- [リレーエージェント] --------+-
                       |                                        |
                  192.168.1.0/24                    192.168.2.0/24

リレーエージェントが中継した DHCPDISCOVER なパケットは、以下の通りです。 (MACアドレスとチェックサムなどは、xx で隠蔽しました。)

  # tcpdump -n -x port bootps
  ...中略...
  22:15:08.325219 IP 192.168.1.254.bootps > 192.168.1.1.bootps: \
  BOOTP/DHCP, Request from xx:xx:xx:xx:xx:xx, length: 548
        0x0000:  4500 0240 0000 4000 4011 xxxx c0a8 01fe
        0x0010:  c0a8 0101 0043 0043 xxxx xxxx 0101 0601
        0x0020:  2344 b409 0000 0000 0000 0000 0000 0000
        0x0030:  0000 0000 c0a8 02fe xxxx xxxx xxxx 0000
        0x0040:  ...以降 0 が続く...

tcpdump を -x オプションつきで実行していますので、0x0000: 以降に、 IPパケットの中身が16進数でダンプされています。

0x001c 以降が DHCP の部分で、さらにその後の 0x0034 にある c0a8 02fe の箇所が、 giaddr というフィールドです。ここには、 リレーエージェントのIPアドレスを格納する、という決まりがあります。
c0a8 02fe を10進数で表すと、192.168.2.254 になります。

はいそうです、これは、リレーエージェントの、 DHCPクライアントのいる側のサブネットのアドレスですね。
これを頼りに、DHCPサーバはアドレスを割り振っているようです。

 

念のため、dhcpd のソースコードを眺めてみました。
ちなみに、dhcp のバージョンは、3.0.5rc1 です。

server/dhcp.c の dhcp() という関数で、受信したパケットの処理を行いますが、 その前にまず、locate_network() を用いて、 DHCPクライアントが属するサブネットを求めています。
locate_network() では、giaddr が 0 でなければ、 giaddr のサブネットを用いるようになっていました。
(ただし、subnet-selection という option が指定されていれば、 そちらが優先されます。(詳しくは RFC3011 を参照くださいまし。))

 

というわけで、やはり、giaddr をもとにしているようですね。
…わかりにくくてすみません。でも、わたくし的にはスッキリしました。

今週の宿題

今週の宿題は、

  USB機器の挿抜を、ビジュアルに通知するようにしてください。

です。

xmessage という、指定したメッセージをウィンドウで出力するコマンドがあります。 これを使って、同様のメッセージを、ウィンドウで出力してみてください。 (他にもっといいものがあれば、それを使ってください。)

ただ、サーバのディスプレイにウィンドウを出しても、 あまり意味がないように思います。 余力があるなら、普段みなさんがご使用のマシン上に、 ウィンドウが出るようにしてみてください。

あとがき

仕事上、仕方なく Windows マシンを使っておりますが、 なるべくマウスに触らないようにするため、極力、 コマンド・プロンプト上で作業を行うようにしています。

そのコマンド・プロンプトですが、みなさんご存知の通り、 bash や tcsh などに慣れた身には、やや受け入れ難い使用感です。
ですので、Cygwin や SFU を入れたりなど小細工をして、 ごまかしながら使っておりました。

しかし、そんな辛い日々とももうおさらばです(?)。
本家本元より、 次世代 Windows シェル『Windows PowerShell』なるものが公開されました。

Windows Server 2003 Service Pack 1 および Windows XP Service Pack 2 用の Windows PowerShell 1.0 ローカライズ版インストール パッケージ
http://support.microsoft.com/kb/926140

早速、試してみました。
内蔵されたコマンドが豊富だったり、関数やエイリアスが使えるのが便利っぽいです。 面白いのは、関数やエイリアス、環境変数、レジストリなどが、 仮想的なドライブとしてアクセスできるところです。
たとえば、こんなことができます。

  PS C:\> Set-Location HKLM:
  PS HKLM:\> cd SOFTWARE\Mozilla\Mozilla Firefox 2.0
  PS HKLM:\SOFTWARE\Mozilla\Mozilla Firefox 2.0> dir

   Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\
   SOFTWARE\Mozilla\Mozilla Firefox 2.0

  SKC  VC Name                           Property
  ---  -- ----                           --------
    0   1 bin                            {PathToExe}
    0   2 extensions                     {Components, Plugins}

  PS HKLM:\SOFTWARE\Mozilla\Mozilla Firefox 2.0> Get-ItemProperty bin

  PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\
                 SOFTWARE\Mozilla\Mozilla Firefox 2.0\bin
  PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\
                 SOFTWARE\Mozilla\Mozilla Firefox 2.0
  PSChildName  : bin
  PSDrive      : HKLM
  PSProvider   : Microsoft.PowerShell.Core\Registry
  PathToExe    : C:\Program Files\Mozilla Firefox\firefox.exe

独特の雰囲気があって、慣れるまでにちょっと時間がかかりそうですが、 いじくっていると頭の体操になりそうで、いろいろと楽しめそうです。
みなさんも、なにかの逃避などの際に、是非お試しください。:-)

 

今週も、ここまで読んでいただき、ありがとうございました。
それでは、また来週に、お会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://www.fumido.co.jp/kuriniki/ (栗日記ぎゃらりー)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 5 をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューションや、Solaris10の例も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora8)
Fedora8のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日本の Linux 情報
日本の、Linux 総本山的なところです。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
Open Tech Press
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん





▼ 最近読んだ本

ハリー・ポッターと不死鳥の騎士団 ハリー・ポッターと不死鳥の騎士団
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターと炎のゴブレット ハリー・ポッターと炎のゴブレット
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターとアズカバンの囚人 ハリー・ポッターとアズカバンの囚人
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターと秘密の部屋 ハリー・ポッターと秘密の部屋
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターと賢者の石 ハリー・ポッターと賢者の石
J.K.Rowling
  ハリポ月刊なので読み直してます
アルケミスト アルケミスト
パウロ・コエーリョ
  また読んだ
賢者の書 賢者の書
喜多川 泰
  違った視点から見られてよかった
セキュリティウォリア セキュリティウォリア
Cyrus Peikari, Anton Chuvakin
  やや冗長…ためにはなりました
CORE MEMORY CORE MEMORY
John Alderman, Mark Richards
  この筐体でPC作ってほしい!
新訳 星の王子さま 新訳 星の王子さま
サン=テグジュベリ
倉橋 由美子
  つまらない大人になったのか…
.....

[X]
「センネン画報」 今日 マチ子
「粟津潔 デザインする言葉」 粟津潔
「Binary Hacks」 高林 哲,鵜飼 文敏,佐藤 祐介,浜地 慎一郎,首藤 一幸
「Make: Volume01」 オライリー・ジャパン
「セーラが町にやってきた」 清野 由実
「手紙屋」 喜多川 泰
「Linuxカーネル2.6解読室」 高橋 浩和,小田 逸郎,山幡 為佐久
「人蕩し術」 無能 唱元
「子育てハッピーアドバイス2」 明橋 大二, 太田 知子
「ラッセル幸福論」 B. Russell
「それでも人生にイエスと言う」 Viktor Emil Frankl
「子育てハッピーアドバイス」 明橋 大二, 太田 知子
「考具」 加藤 昌治
「北欧デザイン<3>」 渡部 千春
「北斎の謎を解く」 諏訪 春雄
「体感美術館」 平野 暁臣
「チベット永遠の書」 Theodore Illion
「リナックスの革命」 Pekka Himanen
「人月の神話」 Frederick Phillips,Jr. Brooks
「ヤバい経済学」 Steven D. Levitt, Stephen J. Dubner
「小布施ッション<2001-2002>」 セーラ・マリ カミングス
「アンパンマン伝説」 やなせ たかし
「夢をかなえるゾウ」 水野 敬也
「ゲーム開発者のためのAI入門」 David M. Bourg, Glenn Seemann
「北欧デザイン<2>」 渡部 千春
「北欧デザイン<1>」 渡部 千春
「ヒューマン2.0」 渡辺 千賀
「中国・ロシア同盟がアメリカを滅ぼす日」 北野 幸伯
「超ロング・セラー 絶滅寸前商品」 湯浅 豊彦
「The BUG(ザ・バグ)」 すずき ひろのぶ,かとう みつあき
「デザインのデザイン」 原 研哉
「マキアヴェッリ語録」 塩野 七生
「ハンバーガーを待つ3分間の値段」 斎藤 由多加
「星の旅人-スペイン「奥の細道」-」 黛 まどか
「食品の裏側」 安部 司
「On Lisp」 Paul Graham
「ぼくが医者をやめた理由 つづき」 永井 明
「あなたならどうする?」 Jack Nikolaschka
「セキュアプログラミング−失敗から学ぶ設計・実装・運用・管理」
      Mark G. Graff, Kenneth R. van Wyk
「「左利き」は天才?−利き手をめぐる脳と進化の謎
      David Wolman
「自分の中に毒を持て」 岡本 太郎
「アトピーの薬を減らす本」 田中 貴子
「岡本太郎「明日の神話」修復960日間の記録」 吉村 絵美留
「X51.ORG THE ODYSSEY」 佐藤 健寿
「アレルギーっ子の暮らし応援BOOK」 佐藤 のり子
「沖縄文化論」 岡本 太郎
「「伝説の社員」になれ!」 土井 英司
「コンピュータの構成と設計(上)」 Patterson & Hennessy
「カラスのジョンソン」 明川 哲也
「ドリルを売るには穴を売れ」 佐藤 義典
「頭がよくなる照明術」 結城 未来
「クロフォードのインタラクティブデザイン論」 Chris Crawford
「いじめの根を絶ち子どもを守るガイド」 Barbara Coloroso
「非常識のすすめ―逆発想の仏教論」 ひろさちや
「Linuxアドバンストネットワーク構築ガイド - HAサーバ構築編」
      デージーネット
「イノベーションの達人!」 Tom Kelly, Jonathan Littman
「クリエーター50人が語る創造の原点」 小原 啓渡
「欺術 - 史上最強のハッカーが明かす禁断の技法」 Kevin Mitnick
「楽しい気象観察図鑑」 武田 康男
「入門 Ajax」 高橋 登史朗
「リリカルな自画像」 岡本 太郎
「やぎの目ゴールデンベスト」 林 雄司
「初めてのPython 第2版」 Mark Lutz,David Ascher
「鼻兎」 小林 賢太郎
「なぜ、これがアートなの?」 Amelia Arenas
「芸術起業論」 村上 隆
「まほう色の瞳」 Enrique Barrios
「ラーメンズつくるひとデコ」 ラーメンズ
「R25 つきぬけた男たち」 R25編集部
「美の呪力」 岡本 太郎
「しろのあお」 上大岡 トメ
「ザ・ゴール」 Eliyahu M. Goldratt
「ハッカーと画家」 Paul Graham
「岡本太郎に乾杯」 岡本 敏子
「Fedore Core Expert」 Software Design
「誰も知らない男」 ブルース・バートン
「子どもが育つ魔法の言葉」 ドロシー・ロー・ノルト
「国家の罠」 佐藤 優
「夜回り先生」 水谷 修
「やぎの目絵日記」 林 雄司
「7つの習慣」 スティーブン・R. コヴィー
「まろ、ん?−大掴源氏物語」 小泉 吉宏
「ザ・サーチ グーグルが世界を変えた」 ジョン・バッテル
「ポストモダン・マーケティング」 スティーブン ブラウン
「機動戦士ガンダムさん」 大和田 秀樹
「小エロのひみつ - Webやぎの目研究発表」 林 雄司
「これ、誰がデザインしたの?」 渡部千春
「60分間・企業ダントツ化プロジェクト」 神田 昌典
「ガルシアへの手紙」 エルバート ハバード
「人生は素晴らしいものだ」 オグ・マンディーノ
「ザ・マインドマップ」 トニー・ブザン,バリー・ブザン
「ワインバーグのシステム思考法」 G.M.ワインバーグ
「渋谷ではたらく社長の告白」 藤田 晋
「渋井真帆の日経新聞読みこなし隊」 渋井 真帆
「コラム息切れ」 小野 法師丸
「早朝起業」 松山 真之介
「変な人が書いた驚くほどツイてる話」 斎藤 一人
「35歳から仕事で大切にしたいこと」 村井 勉
「金融広告を読め」 吉本 佳生
「発想する会社!」 トム・ケリー,ジョナサン・リットマン
「エハイク」 吉田 戦車
「人生の旋律」 神田 昌典
「仕事の思想」 田坂 広志
「CPUの創りかた」 渡波 郁
「非常識な成功法則」 神田 昌典
…これ以前は記録してません…

▼ 気に入ってる本

夢をかなえるゾウ 夢をかなえるゾウ
水野 敬也
  いままでで最高の「笑える」成功本
Linuxデバイスドライバ Linuxデバイスドライバ
Alessandro Rubini,
Jonathan Corbet
  ドライバ作らなくてもためになる
Firefoxの改造テクニック! Firefoxの改造テクニック!
大浦 淳
  いま栗日記拡張を考えてます
Apacheモジュール プログラミングガイド Apacheモジュール プログラミングガイド
小山 浩之
  Apacheの中身もわかるよ
図解 実戦マーケティング戦略 図解 実戦マーケティング戦略
佐藤 義典
  栗日記も戦略的に行こう!
やぎの目ゴールデンベスト やぎの目ゴールデンベスト
林 雄司
  よめも爆笑してました
アルケミスト アルケミスト
パウロ・コエーリョ
  ヘコみそうなとき読みます
X51.ORG THE ODYSSEY X51.ORG THE ODYSSEY
佐藤 健寿
  X51.ORGの集大成
チベット永遠の書 チベット永遠の書
Theodore Illion
  いろんな意味ですごい!!
影響力の武器 影響力の武器
ロバート・B・チャルディーニ
  思わず納得します