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

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


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

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

「オープンソース焼きそば」なるものが、いっとき話題になりましたが、 オープンソースと焼きそばの関連性がわからず (作り方がオープンソースなわけでもないですし…あ、ソースつながりでしょうか?)、 釈然としない思いを抱えていました。

ですが、以下の駄洒落オンパレード! な記事を読んで、そういうのも悪くないかな、 と考えをあらためました。

話題沸騰、お湯も沸騰! あの「オープンソース焼きそば」をベンチマーク
http://journal.mycom.co.jp/column/komono/052/

まあ、なんといいますか、ばかばかしいと言ってしまうと身もふたもないのですが、 ここまで徹底してノリノリな姿勢を見せられますと、爽やかさすら感じられます。 まいりましたって感じですね。

…あ、それだけです。それでは今回も、はりきってまいります。

今回のお題 - プロセスアカウンティングでコマンド履歴を残す

ユーザがコマンドを実行しますと、通常は、 シェルのヒストリ機能が履歴を記録してくれると思います。

システムをおかしくしてしまった可能性のあるときや、 だれかが侵入した可能性のあるときなどに、シェルのコマンド履歴をたどることで、 なにを実行して今の状態になったのかを、ある程度推測することができます。

しかし、ヒストリ機能を無効にしたりされたりしますと、 履歴が残らなくなってしまい、途方に暮れてしまうことになります。
また、シェルが記録してくれる履歴は、コマンドの内容だけで、 いつ実行したのかという、時間の情報までは記録してくれません。

また、シェルのヒストリ機能とは別に、ユーザが、 いつどんなコマンドを実行したのか、まるっとログに残しておくことができますと、 不安の種が尽きないシステム管理者にとっては、 非常にありがたい情報となるのではないでしょうか。

というわけで今回は、プロセスアカウンティングを使って、 コマンド履歴を記録する方法について、ご紹介したいと思います。


プロセスアカウンティングは、Linux カーネルが直接行う機能です。

ですが、プロセスアカウンティングの開始や停止を行ったり、 ログを参照するためには、accton や lastcomm などのコマンドが必要になります。

これらのコマンドは、Fedora などでは psacct パッケージに、 Debian や Ubuntu などでは pacct パッケージに含まれます。
もし accton コマンドが見当たらなければ、それぞれ、 yum や apt などを用いて入手してください。

  # which accton
  /usr/bin/which: no accton in (パス)  ←ないよと言われています
  # yum install psacct                 ←Fedora/RedHat系の場合
  # apt-get install pacct              ←Debian/Ubuntu系の場合

Vine などパッケージがない場合は、 ソースパッケージから作成するのがてっとり早いと思います。 (以下は、Vine の場合の一例です。)

  % wget ftp://rpmfind.net/linux/redhat/enterprise/4/en/os/i386/\
  SRPMS/psacct-6.3.2-31.src.rpm
  (↑rpmfind.net から某ソースパッケージを入手しています。)
  % rpmbuild --rebuild psacct-6.3.2-31.src.rpm
  % sudo rpm -i ~/rpm/RPMS/i386/psacct-6.3.2-31.i386.rpm

プロセスアカウンティングの開始には、accton コマンドを用います。
以下のように、ログファイル名を引数に指定して実行します。

  # accton ログファイル名

すると、Linux カーネルが、プロセスアカウンティング情報を、 指定したログファイルに記録するようになります。
ファイル名を指定しなければ、プロセスアカウンティングを停止します。

  # accton

 

とはいえ、パッケージには、 プロセスアカウンティングを起動するためのスクリプトが入っていますので、 accton コマンドを直接起動することはほとんどないと思います。

Fedora などの場合ですと、以下を実行することで、 起動(start)もしくは停止(stop)させることができます。
その場合、ログファイルは、/var/account/pacct になります。

  # /etc/init.d/psacct start  (もしくは stop)

Debian 系の場合は、以下の通りです。
その場合、ログファイルは、/var/log/account/pacct になります。

  # /etc/init.d/acct start  (もしくは stop)

これらをサービスとして、自動的に起動するようにするには、 chkconfig コマンドや update-rc.d コマンドを用いる必要があります。
具体的な方法は、過去に取り上げていますので、そちらを参照ください。

Vol.031 - サービスを登録する
http://www.usupi.org/sysad/031.html


さて、これで、プロセスアカウンティング情報を記録できましたが、 中身を参照できないと、意味がありませんよね。

履歴の中を見るためのコマンドが、lastcomm コマンドです。
そのまま実行しますと、ログファイルの内容をすべて出力します。

  # lastcomm
  awk              root     __     0.00 secs Sun Jun 15 19:31
  0anacron         root     __     0.00 secs Sun Jun 15 19:31
  ...どばばば...

起動されたコマンドの履歴がすべて記録されていますので、 大量の出力が得られます。
特定のユーザが実行したコマンドに絞りたい場合は、--user オプションを使用します。

  # lastcomm --user ユーザ名

また、特定のコマンドの記録だけ参照するには、--command オプションを使用します。

  # lastcomm --command コマンド名

説明だけで終わらせてしまいますと、「実践」ではなくなってしまいますので、 lastcomm コマンドの実行例を、いくつかご紹介します。

まず、ls コマンドの記録だけを参照してみましょう。

  # lastcomm --command ls
  ls               usu     pts/0   0.00 secs Tue Jun 10 23:47
  ls               usu     pts/0   0.00 secs Tue Jun 10 23:36
  ls               root    pts/3   0.00 secs Mon Jun 10 22:50
  ...後略...

次に、以下のように、 usu ユーザが ls コマンドを実行した記録だけ出力させてみたいと思います。

  # lastcomm --command ls --user usu
  bash       F     usu     pts/0   0.00 secs Tue Jun 10 23:48
  bash       F     usu     pts/0   0.00 secs Tue Jun 10 23:48
  wc               usu     pts/0   0.00 secs Tue Jun 10 23:48
  ...後略...

予想に反して、ls コマンド以外の結果も得られてしまいました。
これは、どちらかの条件を満たす記録が出力されてしまうためです。
(つまり、ls コマンドか usu ユーザの実行した結果が出力されます。)

どちらかではなく、すべての条件を満たす記録だけに限定したい場合は、 --strict-match オプションを指定します。

  # lastcomm --strict-match --command ls --user usu
  ls               usu     pts/0   0.00 secs Tue Jun 10 23:47
  ls               usu     pts/0   0.00 secs Tue Jun 10 23:36
  ls               usu     pts/0   0.00 secs Mon Jun 10 22:58
  ...後略...

ちなみに、Linux カーネルが、プロセスアカウンティング情報を記録するタイミングは、 コマンドが終了するときです。

ですので、たとえば、sleep コマンドを実行しますと、sleep が終了するまで、 lastcomm コマンドの結果に出てきません。
以下のように、sleep コマンドを実行後、lastcomm コマンドで確認すると、 ちゃんと記録されています。

  # sleep 1
  # lastcomm --command sleep
  sleep            root    pts/3   0.00 secs Tue Jun 10 23:45

ですが、バックグラウンドで sleep を実行中に、lastcomm で確認しますと、 以下のように、記録には現れません。

  # sleep 100 &
  # lastcomm --command sleep
  sleep            root    pts/3   0.00 secs Tue Jun 10 23:45

もちろん、100秒後に sleep が終了した後であれば、現れます。

  # lastcomm --command sleep
  sleep            root    pts/3   0.00 secs Tue Jun 10 23:45
  sleep            root    pts/3   0.00 secs Tue Jun 10 23:45

 

さらにちなみに、みなさまの予想通りだとは思いますが、 ログファイルの参照には root の権限が必要です。
試しに、一般ユーザが実行しますと、以下のように叱られます。

  % lastcomm
  couldn't open file '/var/account/pacct': Permission denied

みんなのプロセスアカウンティングの情報を、だれでも参照できるのは、 さすがにまずいですもんね。

  % ls -l /var/account/pacct
  -rw------- 1 root root 28224  6月15日 19:31 /var/account/pacct

以上、プロセスアカウンティングの使用方法を、簡単にご紹介しました。

コマンドは、それこそ毎時毎分毎秒、大量に実行されますので、 情報量も半端ではありません。
プロセスアカウンティング機能を有効にされる際には、 ファイルシステムの空き容量にご注意ください。(…そして、宿題へと続きます。)

次回も、プロセスアカウンティングの続きを取り上げる予定です。
(今回の評判がものすごく悪くなければ…ですが…。)

宿題の答え

前回の宿題は、

  fakeroot で、setuid/setgid のコマンドを実行できない理由を考えて
  みましょう。

でした。

はい、まず、通常は、コマンドを実行すると、 コマンドを実行したユーザの権限で処理が行われます。これはご存じですよね。
ですが、setuid/setgid の設定されたコマンドを実行すると、ユーザではなく、 コマンドの所有者/所有グループの権限で動作します。

さて、LD_PRELOAD を設定しますと、 本来呼ばれるべきシステムコールや関数とは別の関数などが、 代わりに呼ばれる可能性があります。

もし、知らないうちに LD_PRELOAD が設定され、 いけないことをする関数が代わりに呼び出されるようになっていますと、 コマンドを実行した時点で、いけない処理が行われてしまう可能性があります。

もし、その実行したコマンドに setuid/setgid が設定されていますと、 ユーザの権限ではなく、コマンドの所有者/所有グループの権限で、 悪い処理が行われてしまいます。
(もし所有者が root だったりしますと、とっても危ないですよね。)

ですので、setuid/setgid のコマンドを実行する際には、 LD_PRELOAD の設定は無視されます。よって、fakeroot は動作しません。
(同様の理由で、LD_LIBRARY_PATH も無視されます。)

もちろん、setuid/setgid でない、普通のコマンドなどを実行する際も、 LD_PRELOAD や LD_LIBRARY_PATH の設定がおかしくないか、 たまには気をつけたほうがよいように思います。

今回の宿題

今回の宿題は、

  ファイルシステムの空き容量が少ないと、プロセスアカウンティングの
  記録はどうなるでしょうか。

です。

お試し環境であれば、比較的簡単に試せると思いますので、 試せる貴兄はやってみてください。試せない貴兄は、どうなるか想像しながら、 次回の宿題の答えをお待ちください。

あとがき

栗日記ぎゃらりーを常設していただいている、長野県は小布施にあります 栗庵風味堂さんにて、6月21日に、 初栗受賞記念感謝祭という催しが開催されます。

風味堂さんの「初栗」というお菓子が、 全国菓子大博覧会で農林水産大臣賞など受賞されたのを記念して、 初栗が安く買えたり、栗日記ぬりえ大会が行われたり、 いろいろお祭り的行事が行われます。

わたしも、現地で栗バッジを売ったり、 栗日記ぬりえ大会でなにかしたりする予定です。興味のあるかたや、 近くにお住いのかたは、ぜひ参加してみてくださいませ。 (メルマガ見てますとか声をかけていただけますと、 うれしくて号泣するかもしれません。)

本来なら、プログラマー的な催しで、なにかやるべきなのかもしれませんが、 そうでなくても、いろいろ学ぶべきことはあると思います。
行動しないで後悔するよりも、行動して失敗することのほうが、 後々の糧になると思って、積極的に失敗してこようと思います。

…あ、あとがきもそれだけです。
次回は、上記イベントでずたぼろになった心や体にむちを打って、 お届けする予定です。あまり期待せずに、お待ちいただけますと幸いです。

 

今回も、ここまで読んでいただき、ありがとうございました。
それでは、次回は 7月6日(日) 頃に、お会いしましょう!

 

「いますぐ実践! 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/ (栗日記ブログ)


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

トップ

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

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 5 をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューションや、Solaris10の例も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
Ubun通
Linux(主にUbuntu)と自作PCに関する投稿型情報サイトです。 私の知らない最新のソフトなどが紹介されています。
日本の 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

▼ せんでん




▼ 最近読んだ本

シッダールタ シッダールタ
Hermann Hesse
  何度も読んで理解したい本
新宿駅最後の小さなお店ベルク 新宿駅最後の小さなお店ベルク
井野朋也
  食べてみたくって仕方がありません
第五の山 第五の山
Paulo Coelho
  不可避なことから学べるようになりたい
入門LDAP/OpenLDAP 入門LDAP/OpenLDAP
デージーネット
  超具体的でわかりやすいです
エイジレス革命 エイジレス革命
Deepak Chopra
  固定観念にとらわれないで生きます
免疫革命 免疫革命
安保徹
  免疫力を高めて自力で治すべし!
悪い笛 悪い笛-エハイク2
吉田戦車
  エハイク第二弾。評が絶妙!
ハリー・ポッターと死の秘宝 ハリー・ポッターと死の秘宝
J.K.Rowling
  とうとう最後に…全部読んでよかった
ハリー・ポッターと謎のプリンス ハリー・ポッターと謎のプリンス
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターと不死鳥の騎士団 ハリー・ポッターと不死鳥の騎士団
J.K.Rowling
  ハリポ月刊なので読み直してます
.....

[X]
「賢者の書」 喜多川 泰
「セキュリティウォリア」 Cyrus Peikari, Anton Chuvakin
「CORE MEMORY」 John Alderman, Mark Richards
「新訳 星の王子さま」 サン=テグジュベリ / 倉橋 由美子
「センネン画報」 今日 マチ子
「粟津潔 デザインする言葉」 粟津潔
「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・チャルディーニ
  思わず納得します