説明

情報処理装置、操作履歴取得方法、コンピュータプログラム

【課題】ユーザにより入力されるコマンドなどの操作履歴を取得することができる装置を提供する。
【解決手段】この情報処理装置1は、OS10が起動した後、ロギングプログラム13よる処理プロセスの配下プロセスとして、OS10上で動作するシェルプログラム14を起動するシェルプログラム起動部37と、コマンドが入力され、そのコマンドをシェルプログラム14が実行する度に、コマンド並びに当該コマンドの実行結果をシェルプログラム14に対するユーザの操作履歴として操作履歴記録部40に記録する操作履歴管理部39と、を備えて成る。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、OSカーネルの外で動作するシェル(shell) プログラム上で入力されるコマンドなどの操作履歴を記録する手法に関する。
【背景技術】
【0002】
近年、企業における機密データは、クライアントPC(Personal Computer)などの端末装置ではなく、サーバに集約されることが多くなっている。例えばSaaS(Software as a Service)を用いたデスクトップ環境では、いずれかの端末装置で作成されたファイルがサーバに一括して保存される。また、CRM(Customer Relationship Management)の普及により、顧客データもサーバを用いて一括管理されることが多くなっている。
このような状況では、サーバへのアクセス権限を有するユーザが、本来割り当てられた権限を超えて不正に機密データを取得ないし利用する危険性がある。そのため、このような不正な行為を抑制する必要性が高まっている。
【0003】
対策の一つとして、アクセス権限を有するユーザにより入力されるコマンドなどの操作履歴をすべて記録することにより、不正な行為の抑制を図る手法がある。この手法では、例えばキーロガー(key logger)のように実行コマンドを取得したり、定期的に画面をキャプチャして収集することで、ユーザによる操作履歴を記録する。従来のこのような操作履歴を取得するためのプログラム(以下、「ロギングプログラム」という。)は、アプリケーションとしてシステムに常駐する形式、オペレーティングシステム(以下、「OS」(Operating System)という。)カーネルを改良することでOSの一機能としてシステムに常駐する形式、OSカーネルの改良を必要とせずOSの一機能としてシステムに常駐し、OSカーネルがダイナミックリンクによるモジュールの挿入を許可する形式(例えば、Linux(登録商標)のカーネルモジュール)等がある。
【0004】
ロギングプログラムは、アプリケーションの場合でもOSの一機能の場合でも、システムに常駐するため、システムへ負荷がかかり、メモリリークが発生しやすい。ロギングプログラム自体は、通常、バックグラウンドで動作する補助機能であるが、これにより主作業に影響が及ぶことは、極力避けることが望ましい。
また、ロギングプログラムをOSの一機能にする場合、不具合が発生すると、OSの再起動が必要になる。システムにおいて、OSの再起動を無計画に行うことはできないので、この場合には、ロギングプログラムを不具合が発生したまま動作させることになり、操作履歴の正常な取得ができなくなる。更に、カーネルのバージョンアップが頻繁に行われるOSでは、OSカーネルを改良してロギングプログラムをOSの一機能とする場合に、OSベンダのサポート対象外になり、システムの運用上好ましくない。さらに、OSのバージョンアップの際には、ユーザ側でロギングプログラムの再インストールが必要になり、保守コストが高くなる。
【0005】
ロギングプログラムをアプリケーションとして搭載した情報処理装置を開示したものとして、特許文献1がある。特許文献1に開示された情報処理装置では、ロギングプログラムがユーザのログインにより起動され、ログオフにより停止する。そのために、ロギングプログラムがシステムに常駐せず、システムへの負荷が軽減される。しかし、ロギングプログラムは、ユーザのログインの際にシェルプログラムにより起動されるアプリケーションであるために、シェルプログラムの起動中でも、ロギングプログラムのみを停止可能であり、悪意のあるユーザに対しては無力となる。
【0006】
ロギングプログラムがOSの一機能としてシステムに常駐する形式の情報処理装置を開示したものとして、特許文献2がある。特許文献2に開示された情報処理装置では、OSからアプリケーションへ送られるメッセージに時刻を付加し、これを操作履歴として記録する。そのため、特許文献1と特許文献2とを組み合わせることにより、操作履歴に時刻を付加して記録すること自体は、可能である。
しかし、この場合であっても、ロギングプログラムがアプリケーションの場合には、悪意のユーザによりロギングプログラムのみが停止されるという問題を解決できず、ロギングプログラムをOSの一機能とする場合には、OSのバージョンアップ等があったときにサポートを受けられないという問題がある。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2000−354036号公報
【特許文献2】特開2007−172463号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
本発明は、OSの一機能とせず、常駐型でもなく、ユーザが悪意をもって操作する余地も無い状態で、ユーザにより入力されるコマンドなどの操作履歴を取得することができる技術を提供することを主たる課題とする。
【課題を解決するための手段】
【0009】
上記の課題を解決する本発明の情報処理装置は、OSが起動した後、当該OS上で動作する監視対象プログラムが起動する前に起動する親プロセスの配下プロセスとして前記監視対象プログラムを起動する監視対象プログラム起動手段と、コマンドが入力され、そのコマンドを前記監視対象プログラムが実行する度に、前記コマンド並びに当該コマンドの実行結果を前記監視対象プログラムに対する前記ユーザの操作履歴として記録する操作履歴管理手段と、を備えて成る
【0010】
本発明の情報処理装置は、OSが起動した後で、各構成要素が動作するために、OSの一機能ではなく、また常駐型でもない。さらに、監視対象プログラムが親プロセスの配下プロセスとなるので、親プロセスの中で監視対象プログラムのみの停止は可能で有るが、親プロセスは起動を続ける。そのために、監視対象プログラムの起動、停止にかかわらず操作履歴管理手段が監視対象プログラムに対するユーザの操作履歴を取得可能である。また、ユーザが悪意をもって操作する余地を無くしている。
なお、入力されるコマンドには、CUI(Character-based User Interface)のようなテキストによるコマンド入力の他に、GUI(Graphical User Interface)によるポインティングデバイスによるコマンド入力なども含まれる。
【0011】
本発明の情報処理装置は、前記監視対象プログラムの起動による処理プロセスを識別するためのIDを生成するID生成手段と、前記監視対象プログラムの起動時に前記IDを含むプロンプトを生成するプロンプト生成手段を更に備えていてもよい。この場合に前記操作履歴管理手段は、前記プロンプトに続いて前記コマンドが入力され、そのコマンドを前記監視対象プログラムが実行する度に、前記プロンプト、コマンド並びに当該コマンドの実行結果を文字列として保持するとともに、保持されている文字列の中から前記IDを含むプロンプトに続くコマンドを文字列探索により抽出し、抽出したコマンドを前記監視対象プログラムに対する前記ユーザの操作履歴として記録することが可能となる。このような構成では、コマンドのみを操作履歴として抽出することができ、ユーザが実際に入力したコマンドがわかりやすくなる。また、プロンプトに含まれるIDによりどの処理プロセスについての操作履歴であるかが容易にわかるようになる。
本発明の情報処理装置は、時刻情報を出力する時刻出力手段を更に備えていてもよい。この場合に前記操作履歴管理手段は、前記コマンドが実行されたときの時刻情報を前記時刻出力手段より取得し、取得した時刻情報を前記操作履歴と関連付けて記録することが可能となる。このような構成では、コマンドの入力時刻も履歴として残され、より詳細な操作履歴が得られる。
本発明の情報処理装置は、乱数を発生する乱数発生手段を更に備えていてもよい。この場合に前記プロンプト生成手段は、前記乱数発生手段で発生した乱数を前記IDとして前記プロンプトを生成することが可能となる。乱数であるので、監視対象プログラムが起動する度に異なるIDがプロンプトに含まれる。乱数を記録しておくことで、例えばいつ起動された監視対象プログラムによる操作履歴であるかの識別が可能になる。
【0012】
本発明の操作履歴取得方法は、OS及び当該OS上で動作する監視対象プログラムを搭載した情報処理装置が実行する方法である。情報処理装置が、前記OSが起動した後、前記監視対象プログラムが起動する前に起動する親プロセスの配下プロセスとして前記監視対象プログラムを起動させる段階と、コマンドの入力をユーザに促す段階と、前記コマンドが入力され、そのコマンドを前記監視対象プログラムが実行する度に、前記コマンド並びに当該コマンドの実行結果を前記監視対象プログラムに対する前記ユーザの操作履歴として記録する段階とを有する。
【0013】
本発明の操作履歴取得方法では、OSの起動後、監視対象プログラムが起動する前に、親プロセスが起動する。そのために親プロセスは、OSの一機能ではなく、また常駐型でもない。親プロセスは、、監視対象プログラムを配下プロセスとして起動するために、親プロセスを停止すると監視対象プログラムも停止する。ユーザが親プロセスを停止させようとすると、配下プロセスである監視対象プログラムも停止するために、ユーザが悪意をもって操作する余地は無い。
【0014】
本発明のコンピュータプログラムは、OS及び当該OS上で動作する監視対象プログラムを搭載したコンピュータ装置を、前記OSが起動した後、前記監視対象プログラムが起動する前に起動する親プロセスの配下プロセスとして前記監視対象プログラムを起動する監視対象プログラム起動手段、コマンドが入力され、そのコマンドを前記監視対象プログラムが実行する度に、前記コマンド並びに当該コマンドの実行結果を前記監視対象プログラムに対する前記ユーザの操作履歴として記録するログ管理手段、として機能させるコンピュータプログラムである。
【発明の効果】
【0015】
本発明によれば、監視対象プログラムを配下プログラムとして起動して、入力されるコマンドを監視対象プログラムが実行する度に、コマンド並びに当該コマンドの実行結果を監視対象プログラムに対するユーザの操作履歴として記録する。これらは、OSの起動後に行われるために、OSの一機能でもなく、常駐型でもない。監視対象プログラムが配下プロセスとして実行されるために、監視対象プログラムを実行しつつ操作履歴の記録を停止させることができない。そのために、ユーザによる悪意の操作を防止することができる。
【図面の簡単な説明】
【0016】
【図1】情報処理装置を含むシステムの全体構成図である。
【図2】ログイン処理時に端末装置に形成される機能ブロックを表す図である。
【図3】OS起動後の最初のログインからログアウトまでの処理のフローチャートである。
【図4】ログイン処理のときの各プログラムの起動状況の説明図である。
【図5】図5(a)はプロンプトのみが表示された表示装置の画面の例示図であり、図5(b)はコマンド及び実行結果が表示された表示装置の画面の例示図であり、図5(c)は図5(b)から乱数が含まれる行のみを抽出した結果の例示図である。
【図6】従来の各プログラムの起動状況の説明図である。
【図7】ロギングプログラム13が二重に起動される場合の各プログラムの起動状況の説明図である。
【図8】第2実施例の端末装置に搭載されるプログラムの例示図である。
【図9】第2実施例の端末装置に形成される機能ブロック図である。
【図10】第2実施例のログイン処理のフローチャートである。
【図11】ユーザ変更前後の各ユーザが操作履歴の取得対象者である場合のログイン処理時の各プログラムの起動状況の説明図である。
【図12】ユーザがグラフィカルログインを要求した場合の各プログラムの起動状況の説明図である。
【発明を実施するための形態】
【0017】
以下、本発明の実施形態を、図面を参照して説明する。
<第1実施例>
図1は、本発明を適用した情報処理装置を含むシステムの全体構成図である。
このシステムは、複数の端末装置1とサーバ2とを含んで構成されている。
各端末装置1は、ネットワークNを介して、サーバ2とデータの送受信可能に接続されている。ネットワークNは、LAN(Local Area Network)、WAN(Wide Area Network)、或いは公衆回線を用いたネットワークなど、どのような形態のものでもよい。
【0018】
サーバ2は、端末装置1で処理に用いられるデータ、プログラムなどを保持するものであり、端末装置1からのアクセスにより、これらのデータ、プログラムなどを提供する。例えば、サーバ2は、図示のようなユーザ管理テーブル20を保持する。このユーザ管理テーブル20は、ユーザが端末装置1にログインする際に参照されるテーブルであり、すべてのユーザのログインID(IDentification)、パスワード、及びユーザが操作履歴の取得対象者であるか否かを表す対象者情報などが記録される。対象者情報が「対象」となっているユーザは操作履歴の取得対象者であり、「非対象」となっているユーザは操作履歴の取得対象者ではない。
【0019】
サーバ2は、また、後述する操作履歴ファイルを各端末装置1から取得して一括して保存する。サーバ2に保存される操作履歴ファイルは、必要に応じてシステムの管理者により解析され、ユーザが各端末装置1によりどのようなコマンドなどの入力を行ったかがわかるようになっている。なお、各端末装置1から取得した操作履歴ファイルを、端末装置1毎に分けて保存するようにしてもよい。このようにすることで、誰が、どの端末装置1により、どのようなコマンドなどの入力を行ったかがわかる。サーバ2は、各端末装置1から操作履歴ファイルを逐次取得してもよく、また、各端末装置1で一旦保存させておき、定期的に収集するようにしてもよい。
【0020】
端末装置1は、キーボードやマウスなどの入力装置及び表示装置が接続されており、CPU(Central Processing Unit)、RAM(Random Access Memory)、ROM(Read Only Memory)、ネットワークカード、及び入出力インタフェースを備えた本発明の情報処理装置の一例となる装置である。端末装置1は、図1に示されるように、OS10とOS10上で動作するアプリケーション11とを搭載している。図1の例では、アプリケーション11として、ユーザのログイン時に用いられるプログラムのみを記載しているが、他のプログラムを保持していても構わない。また、サーバ2に保持されるプログラムを実行することも可能である。ユーザのログイン時に用いられるアプリケーション11として、本実施形態の例では、認証プログラム12、ロギングプログラム13及びこの実施形態で監視対象となるシェルプログラム14を含む。認証プログラム12及びシェルプログラム14は、従来のこの種の端末装置1でも用いられるアプリケーションである。
【0021】
認証プログラム12は、ユーザの認証処理を行うためのアプリケーションである。
認証処理は、例えば、ユーザがログインの際に入力装置により入力するログインID及びパスワードが正当なものか否かを、ユーザ管理テーブル20を参照して判断することで行われる。また認証処理では、ユーザ管理テーブル20の対象者情報を参照することで、ユーザが操作履歴の取得対象者であるか否かの判断も行う。従来の認証プログラムは、認証処理によりユーザを認証した後に、シェルプログラム14の起動を指示する。しかし、本実施形態の認証プログラム12は、ユーザが操作履歴の取得対象者である場合にロギングプログラム13の起動を指示し、ユーザが操作履歴の取得対象者ではない場合にシェルプログラム14の起動を指示する。
【0022】
ロギングプログラム13は、ユーザが入力装置から入力するコマンドなどの操作履歴を表す操作履歴ファイルを作成して、所定の記憶装置に記憶するためのアプリケーションである。ロギングプログラム13は、シェルプログラム14を起動するための引数を生成する。ロギングプログラム13がシェルプログラム14の起動を指示する場合には、この引数が用いられる。
【0023】
シェルプログラム14は、従来のログイン処理時にも実行されるアプリケーションである。シェルプログラム14は、ユーザにより入力されたコマンドを解釈して処理を実行し、その実行結果を返す。シェルプログラム14は、コマンドなどを受け付け可能な状態であることを表すプロンプトを表示する。シェルプログラム14がロギングプログラム13で生成された引数を用いて起動される場合には、この引数がプロンプトの少なくとも一部に含まれる。シェルプログラム14が引数を用いずに起動される場合には、ユーザにより設定されるプロンプトが表示される。シェルプログラム14の処理プロセスは、認証プログラム12により起動が指示される場合に、認証プログラム12の起動による処理プロセスを親プロセスとした子プロセス(配下プロセス)になり、ロギングプログラム13により起動が指示されるには、ロギングプログラム13の起動による処理プロセスの配下プロセスになる。
【0024】
なお、本実施形態では、図1のようなサーバ・クライアントシステムとしての例を説明するが、本発明は、端末装置1がスタンドアローンの状態であっても、認証プログラム12、ロギングプログラム13、及びシェルプログラム14を備えていれば実施が可能である。端末装置1がスタンドアローンの場合、ユーザ管理テーブル20は、端末装置1が保持することになる。
【0025】
ログイン処理時に端末装置1に形成される機能ブロックを図2に示す。
端末装置1には、入力受付部31、表示制御部32、処理部33、通信制御部34、認証部35、乱数発生部36、シェルプログラム起動部37、時刻出力部38、操作履歴管理部39、操作履歴記録部40、及びプロンプト生成部41が形成される。
この実施形態では、認証部35は、認証プログラム12の実行により形成される。乱数発生部36、時刻出力部38、操作履歴管理部39、及び操作履歴記録部40は、ロギングプログラム13の実行により形成される。処理部33及びプロンプト生成部41は、シェルプログラム14の実行により形成される。シェルプログラム起動部37は、認証プログラム12或いはロギングプログラム13の実行により形成される。入力受付部31、表示制御部32、及び通信制御部34は、OS10の起動時に、図示しない各種ドライバにより形成される。しかし、どの機能ブロックがどのプログラムにより形成されるかは、この限りではない。
【0026】
入力受付部31は、入力装置から入力されるコマンドなどを受け付ける。
表示制御部32は、表示装置に所定の画像を表示する。表示制御部32は、入力受付部31で受け付けたコマンドやその実行結果等を表示装置に表示する。表示制御部32は、端末装置1が入力装置からのコマンドなどの入力を受け付け可能な状態である場合に、プロンプトを表示装置に表示する。
コマンドなどの入力があると、表示制御装置32は、プロンプトに続けて入力されたコマンドを表示する。また、コマンドの実行結果は、プロンプトとは異なる領域、例えばプロンプトやコマンドが表示されない行に表示される。
処理部33は、入力受付部32で受け付けたコマンドの内容等に応じた情報処理を実行する。実行結果は、表示制御部32に送られて、表示装置に表示される。
【0027】
通信制御部34は、ネットワークNを介してサーバ2との間でデータの送受信を行う。通信制御部34は、サーバ2から処理に必要なデータやプログラムを受信したり、或いは、サーバ2に対して操作履歴ファイルを送信する。操作履歴ファイルの送信は、サーバ2からの要求により、或いは逐次行う。
【0028】
認証部35は、入力受付部31により受け付けるログインID及びパスワードによりユーザ管理テーブル20を参照して、ユーザが操作履歴の取得対象者であるか否かの判断を含めたユーザの認証処理を行う。
【0029】
乱数発生部36は、シェルプログラム14の起動の前に乱数を発生させる。例えば、複数のユーザが同じ端末装置1にログインする場合には、各ユーザに対して一つずつ乱数を発生させる。同じユーザであってもログインの度に異なる乱数を発生させる。
シェルプログラム起動部37は、ロギングプログラム13の実行により形成される場合に、乱数発生部36で発生した乱数を引数としてシェルプログラム14を起動する。シェルプログラム起動部37がロギングプログラム13の実行により形成される場合に、シェルプログラム14の処理プロセスは、ロギングプログラム13の起動による処理プロセスを親プロセスとした配下プロセスになる。シェルプログラム起動部37は、認証プログラム12の実行により形成される場合に、引数を用いずにシェルプログラム14を起動する。シェルプログラム起動部37が認証プログラム12の実行により形成される場合に、シェルプログラム14の処理プロセスは、認証プログラム12の起動による処理プロセスを親プロセスとした配下プロセスになる。
乱数は、前述の通り、同じユーザであってもログインの度に発生される。つまり、シェルプログラム14の起動時の引数がその都度変わる。そのために、シェルプログラム14の起動による処理プロセスの識別が引数、つまり乱数により可能となる。
【0030】
時刻出力部38は、例えばOS10で計時される現在時刻、或いはサーバ2で計時される現在時刻を取得して出力する。自身で現在時刻を計時するようにしてもよい。
【0031】
操作履歴管理部39は、ユーザによりコマンドが入力され、シェルプログラム14によりそのコマンドが実行される度に、コマンド及びその実行結果から、シェルプログラム14に対するユーザの操作履歴を表す操作履歴ファイルを作成して操作履歴記録部40に記録する。操作履歴管理部39は、コマンド及びその実行結果をそのまま操作履歴ファイルとしてもよいが、例えば、プロンプト、コマンド並びにコマンドの実行結果を文字列として保持し、この中から、プロンプトに続くコマンドを文字列探索により抽出して、抽出したコマンドにより操作履歴ファイルを作成してもよい。後述の通りプロンプトには乱数発生部36で発生した乱数が含まれており、コマンドの抽出は、例えばこの乱数が含まれる行を抽出することにより行われる。行の抽出は、例えば、コマンドの入力があり、それに対する処理が終了して表示装置に表示される度に行われる。操作履歴管理部39は、時刻出力部38から現在時刻を取得しており、抽出した行に現在時刻を付加して記録する。このような構成では、コマンドの入力の度にその操作履歴が記録され、各コマンドの入力時刻が容易にわかるようになる。操作履歴ファイルに、例えばログインIDを付加すれば、どのユーザの操作履歴ファイルであるかがわかる。
また、プロンプトに含まれる乱数は、ログインの度に発生されるので、操作履歴ファイルを作成する際の乱数がその都度変わる。そのために、操作履歴ファイルの識別が乱数により可能となる。
【0032】
プロンプト生成部41は、シェルプログラム14の起動による処理プロセスを識別するためのIDを含むプロンプトを生成する。この実施形態では、IDに乱数発生部36で発生された乱数を用いる。プロンプト生成部41は、シェルプログラム14の起動により形成されるが、シェルプログラム14の起動のために乱数が引数として用いられることで、乱数を含んだプロンプトを生成することができる。プロンプトに含まれるIDは、ユーザによる改変が不可能であることが望ましい。
【0033】
このようなシステムでは、端末装置1により、以下のようにしてユーザのログインからログアウトまでの処理が行われる。
図3は、OS10起動後の最初のログインからログアウトまでの処理のフローチャートである。図4は、ログイン処理のときの各プログラムの起動状況の説明図である。図4では、線部分が各プログラムの待機時であり、矩形部分が各プログラムの起動時である。以下、同様のプログラムの起動状況の説明図で各プログラムの待機時、起動時を同様に表現される。
まず、端末装置1でOS10が起動されると、ユーザにより入力装置からログインID及びパスワードの入力が可能となる。これらが入力されると、端末装置1は、ユーザの認証要求を受け付ける。認証要求を受け付けると、認証プログラム12が起動して認証部35の機能を立ち上げ、ユーザが操作履歴の取得対象者であるか否かの判断を含めた認証処理を行う(ステップS10)。認証処理によりユーザを認証できない場合、端末装置1は、その旨を表示装置に表示させ、再度のログインID及びパスワードの入力をユーザに促す。
【0034】
認証処理により認証したユーザが操作履歴の取得対象者である場合には、認証プログラム12によりロギングプログラム13が起動される(ステップS20:Y、ステップS30)。
ロギングプログラム13が起動されると、時刻出力部38、操作履歴管理部39、及び操作履歴記録部40が形成されて、ユーザの操作履歴の取得が開始される。ロギングプログラム13は、ユーザからのログアウト要求があるまで起動し続ける。ロギングプログラム13起動後に、端末装置1は、乱数発生部36で発生した乱数を引数として、シェルプログラム起動部37によりシェルプログラム14を起動する(ステップS40)。
【0035】
認証処理により認証したユーザが操作履歴の取得対象者でない場合には、認証プログラム12によりシェルプログラム14が起動される(ステップS20:N、ステップS50)。
【0036】
シェルプログラム14が起動することで、所望の情報処理を端末装置1により行えるようになる。表示装置にはプロンプトが表示される。シェルプログラム14が乱数を引数として起動される場合には、プロンプトに乱数が含まれる。シェルプログラム14が、ステップ20でユーザが操作履歴の取得対象者でないと判断されて起動された場合には、シェルプログラム14は、認証プログラム12の起動による処理プロセスを親プロセスとした配下プロセスとなる。シェルプログラム14は、ロギングプログラム13の起動後に起動される場合に、ロギングプログラム13の起動による処理プロセスを親プロセスとした配下プロセスとなる。
【0037】
図5(a)は、乱数が含まれたプロンプトが表示された表示装置の画面例を示した図である。「efd98793472kojfa」が乱数である。この例では、プロンプトが乱数のみからなっているが、これに、例えばユーザのログインIDなどを付加してもよい。
【0038】
入力装置からコマンドが入力されると、入力受付部31でコマンドを受け付け、処理部33により該コマンドに応じた処理を行う。入力受付部31で受け付けたコマンドは、プロンプトと同じ行に並んで表示される。処理部33による実行結果は、プロンプトとは異なる行に表示される。図5(b)は、そのようなコマンド及び実行結果が表示された表示装置の画面例を示した図である。「ls」がコマンドであり、「admin apps kernel service system」が実行結果である。実行結果が表示されると、実行結果の次の行に、プロンプト「[efd98793472kojfa] #」が表示される。
【0039】
操作履歴管理部39は、図5(b)のようなプロンプト、コマンド並びにコマンドの実行結果を文字列として保持する。操作履歴管理部39は、シェルプログラム14の親プロセスであるロギングプログラム13により形成されるために、図5(a)、(b)のような表示の前に、操作履歴管理部39がこれらの文字列を取得することになる。図5(b)に表示される文字列のすべてを操作履歴として操作履歴記録部40に記録してもよいが、この実施形態では、プロンプト及びコマンドを抽出して記録する。そのために操作履歴管理部39は、乱数が含まれる行を抽出する。操作履歴管理部39は、プロンプト、コマンド並びにコマンドの実行結果を文字列の中から乱数を文字列探索して、プロンプトに続くコマンドを抽出する。
図5(c)は、図5(b)から乱数が含まれる行を抽出した結果例を示した図である。図5(c)の例では、抽出した行の先頭に、時刻出力部38から取得した現在時刻を付加してある。「20080927112011」が現在時刻である。ここでは、行単位で抽出を行っているが、これは一例であり、例えば、2行にわたるコマンドの入力がある場合には、プロンプトに続くコマンドをすべて抽出することで、操作履歴を取得する。
【0040】
このように、端末装置1は、入力装置から入力されるコマンドを現在時刻とともに操作履歴ファイルに記録することができる。従来、本実施形態のロギングプログラム13のようにアプリケーションで操作履歴を取得する場合には、コマンドのみの記録及び現在時刻の取得が困難であった。そのために、コマンドをその実行結果とともにすべて操作履歴ファイルとして記録するしかなかった。これに対して本実施形態ではコマンドのみを記録することができるので、従来よりも操作履歴ファイルのサイズを小さくできる。なお、ここでコマンドのみとは、実行結果を除くすべての文字列である。端末装置1への入力がコマンド以外の文字列を含んでいる場合でも、ここで言うコマンドのみにあたる。
【0041】
ログアウト時は、ユーザが、入力装置によりログアウトの要求を入力する。ログアウトの要求があると、端末装置1は、まずシェルプログラム14を停止し(ステップS60)、その後ロギングプログラム13を停止する(ステップS70)。
認証処理により認証したユーザが操作履歴の取得対象者でない場合には、ステップS50でシェルプログラム14が起動された後、ログアウトの要求があると、端末装置1は、シェルプログラム14を停止する(ステップS80)。
以上のように、ログアウト処理が終了する。OS10を停止させる場合には、入力装置によりシャットダウンコマンドを端末装置1に入力する(ステップS90)。
【0042】
図6は、従来の各プログラムの起動状況の説明図である。従来は、認証プログラム12で認証処理を行った後にシェルプログラム14が起動される。ロギングプログラム13は、OS10の起動直後且つ認証プログラム12の起動前(パタン1)、或いはシェルプログラム14の起動後(パタン2)に、起動される。
従来のロギングプログラム13は、パタン1の場合に、システムに常駐し、ユーザ認証要求時には既にコマンドの取得を行っている。そのため、メモリリークなどの問題が発生しやすい。これに対して本実施形態のロギングプログラム13は、ユーザ認証処理の後に起動されている。つまり、常駐型ではないため、従来のようなメモリリークなどの問題が発生しにくくなっている。
また、従来のロギングプログラム13は、パタン2の場合に、特許文献1のように、シェルプログラム14が起動状態で、ロギングプログラム13のみが停止するような事態が発生する。これに対して本実施形態のロギングプログラム13は、シェルプログラム14の起動前に起動され、ロギングプログラム13を停止する場合には、その前にシェルプログラム14が停止する。そのためにロギングプログラム13のみが停止することはない。このように、ロギングプログラム13をシェルプログラム14よりも前に起動させることで、シェルプログラム14が起動中に従来のようにコマンドの履歴が取得できなくなるという状況を、回避することができる。
ロギングプログラム13は、OS10の一機能ではなく、アプリケーション11として端末装置1にインストールされるため、OS10のバージョンアップに影響を受けることがない。また、ロギングプログラム13の動作が不良になった場合でも、OS10をシャットダウンする必要がない。
【0043】
<第2実施例>
第1実施例の端末装置1において、ログイン処理後にユーザの変更が行われることがある。この場合、既にログインしているユーザが操作履歴の取得対象者でない場合には、変更後のユーザに対して図3に示す処理を行うことで、ログイン処理が行われる。また、既にログインしているユーザが操作履歴の取得対象者である場合でも、変更後のユーザが操作履歴の取得対象者でない場合には、変更後のユーザに対して図3に示す処理を行うことで、ログイン処理が可能である。
しかし、既にログインしているユーザが操作履歴の取得対象者で、変更後のユーザも操作履歴の取得対象者である場合には、図3に示す処理を行うとロギングプログラム13が二重に起動される。例えば図7に示す各プログラムの起動状況の説明図に示すように、ロギングプログラム13が二重に起動される。ロギングプログラム13が二重に起動されると、操作履歴が正常に取得できなくなる。
【0044】
第2実施例の端末装置1’では、図8に示すように、アプリケーション11として、第1実施例に示す各プログラムの他にアプリケーション11にロギング起動プログラム15を搭載する。ロギング起動プログラム15により、二重にロギングプログラム13が起動されることを防止する。
ロギング起動プログラム15は、自身の起動による処理プロセスの親プロセスを検索して、親プロセス中のロギングプログラム13の起動による処理プロセス(以下、「ロギングプロセス」という。)の有無を確認する(以下、「状況判定処理」という。)ためのアプリケーションである。親プロセスの中にロギングプロセスが有る場合には、既にロギングプログラム13が起動されているので、更なるロギングプログラム13の起動が必要ない。そのためにロギング起動プログラム15は、シェルプログラム14の起動を指示する。親プロセスの中にロギングプロセスが無い場合には、ロギングプログラム13が未だ起動されていないので、ロギング起動プログラム15は、ロギングプログラム13の起動を指示する。ロギング起動プログラム15は、認証プログラム12により、ユーザが操作履歴の取得対象者であると判断された場合に起動される。
シェルプログラム14は、OS10の仕様上、ログイン時にのみ用いられるだけでなく、様々な状況で用いられる。従って、ロギング起動プログラム15は、それらのすべての状況を踏まえて、逐次シェルプログラム14と同様の動きをする必要がある。そのために、ロギング起動プログラム15は、シェルプログラム14をエミュレートする。
【0045】
図9は、第2実施例の端末装置1’に形成される機能ブロック図である。第2実施例の端末装置1’の機能ブロックは、第1実施例の機能ブロックに状況判定部42を追加した構成であり、他に変更点はない。同じ機能ブロックには同じ符号を振ってあり、その機能も同じである。
状況判定部42は、状況判定処理を行う。なお、第2実施例では、シェルプログラム起動部37が、ロギング起動プログラム15の実行により、或いはロギングプログラム13の実行により形成される。
【0046】
このような第2実施例の端末装置1’では、以下のようにしてログイン処理が行われる。図10はログイン処理のフローチャートである。図11は、ユーザ変更前後の各ユーザが操作履歴の取得対象者である場合のログイン処理時の各プログラムの起動状況の説明図である。
最初のユーザのログイン時には、ユーザの認証要求があると端末装置1’は認証処理(ステップS201)を行い、認証したユーザが操作履歴の取得対象者であるか否かを判定する(ステップS202)。操作履歴の取得対象者でない場合には、認証プログラム15によりシェルプログラム14が起動される(ステップS202:N、ステップS204)。
【0047】
認証したユーザが操作履歴の取得対象者である場合には、認証プログラム12によりロギング起動プログラム15が起動される(ステップS202:Y、ステップS203、図11のロギング起動プログラム(1)15)。ロギング起動プログラム(1)15により、状況判定部42を用いた状況判定処理が行われる(テップS205)。ここでは、最初のユーザのログイン処理であり親プロセスには認証プログラム12による処理プロセスしかないので、そのままロギングプログラム13が起動される(ステップS205:無、ステップS206)。ロギングプログラム13が起動されると、最初のユーザの操作履歴の取得が開始される。ロギングプログラム13起動後に、端末装置1’は、乱数発生部36で発生した乱数を引数として、シェルプログラム起動部37によりシェルプログラム14を起動する(ステップS208、図11のシェルプログラム(1)14)。
【0048】
次いで、最初のユーザのログイン後にユーザを変更する場合のログイン処理について説明する。最初のユーザは、操作履歴の取得対象者であり、既に、ロギングプログラム13が起動しているものとする。
【0049】
ユーザの変更要求があると、端末装置1’は、変更するユーザの認証処理(ステップS201)を行い、認証したユーザが操作履歴の取得対象者であるか否かを判定する(ステップS202)。操作履歴の取得対象者でない場合には、認証プログラム15によりシェルプログラム14が起動される(ステップS202:N、ステップS204)。
【0050】
認証したユーザが操作履歴の取得対象者である場合には、認証プログラム12によりロギング起動プログラム15が起動される(ステップS202:Y、ステップS203、図11のロギング起動プログラム(2)15)。ロギング起動プログラム(2)15により、状況判定部42を用いた状況判定処理が行われる(テップS205)。ここでは、ユーザの変更であり、最初のユーザが操作履歴の取得対象者であるので、親プロセスにはロギングプロセスが含まれる。そのためにロギング起動プログラム(2)15により、シェルプログラム起動部37を用いてシェルプログラム14が起動される(ステップS205:有、S207、図11のシェルプログラム(2)14)。
ロギングプログラム13は最初に起動されたシェルプログラム(1)14を監視しているので、最初に起動されたシェルプログラム(1)14の孫プロセスである変更後のユーザのシェルプログラム(2)14を監視することができる。
このようにして、ロギングプログラム13が二重に起動されることを防止できる。このような処理において、ステップS204で起動されるシェルプログラム14による処理プロセスは認証プログラム12の起動による処理プロセスの配下プロセスであり、ステップS207で起動されるシェルプログラム14による処理プロセスはロギング起動プログラム15の起動による処理プロセスの配下プロセスであり、ステップS208で起動されるシェルプログラム14による処理プロセスはロギングプロセスの配下プロセスである。
【0051】
<第3実施例>
第1、第2実施例は、コンソールログインを想定している。ここで、コンソールログインとは、ユーザがOS10に命令を与えるためのインターフェースとして、テキストによるコマンド入力画面(コンソールやターミナルやコマンドプロンプトと呼ばれる)が用意される、いわゆるCUIによるログインを指す。
近年は、CUIよりもGUIが主流になっている。ユーザは、OS10に命令を与えるインターフェースとして、GUIを選択する場合がある。この場合、シェルプログラム14が起動される前に、GUI画面を司るウィンドウマネージャ(GNOMEなど)の初期化プログラムなどの様々なプログラムの起動が必要となる。
第1実施例において、ユーザがグラフィカルログインを要求した場合、ロギングプログラム13がGUIの準備をさせる必要がある。通常、GUIの準備はウィンドウマネージャが行うものであり、非常に膨大なコード量となる。そのため、ロギングプログラム13がウィンドウマネージャの代行を行うのは非現実解である。
【0052】
そこで、第3実施例においては、認証プログラム12はロギング起動プログラム15を起動し、ロギング起動プログラム15がロギングプログラム13を起動する第2実施例と同様の構成とする。
図12は、ユーザがグラフィカルログインを要求した場合の各プログラムの起動状況の説明図である。
操作履歴の取得対象者がグラフィカルログインを要求すると、認証プログラム12はロギング起動プログラム15を起動する。ロギング起動プログラム15はGUIに必要な種々のプログラム(GUI関連プログラム16)を起動した後に、ロギングプログラム13を起動する。ロギングプログラム13はシェルプログラム14を起動するともに、起動済みのGUI環境と連携させる。
この場合ロギングプログラム13は、コマンド及びその実行結果だけでなく、GUIに対する特定の操作(マウスクリックなど)を検知し、画面をキャプチャした画像を操作履歴として取得する機能をさらに備えていてもよい。
【0053】
このように、認証プログラム12が直接ロギングプログラム13を起動するのではなく、いったんロギング起動プログラム15を起動する構成とすることで、SFTPログイン要求(TTYが割り当てられないので、子プロセス監視に基づく操作履歴の取得が実行できない)や、操作履歴を取得中のシェルプログラム14におけるlessコマンド実施(lessコマンドはユーザ情報管理テーブルにしたがってシェルプログラムを再起動するので、ロギングプログラム13が二重に起動してしまう)など、様々な利用状況に対処して、ロギングプログラム13の正常動作を確保することができる。
【符号の説明】
【0054】
1、1’…端末装置、10…OS、11…アプリケーション、12…認証プログラム、13…ロギングプログラム、14…シェルプログラム、15…ロギング起動プログラム、16…GUI関連プログラム、2…サーバ、20…ユーザ管理テーブル、31…入力受付部、32…表示制御部、33…処理部、34…通信制御部、35…認証部、36…乱数発生部、37…シェルプログラム起動部、38…時刻出力部、39…操作履歴管理部、40…操作履歴記録部、41…プロンプト生成部、42…状況判定部

【特許請求の範囲】
【請求項1】
OSが起動した後、当該OS上で動作する監視対象プログラムが起動する前に起動する親プロセスの配下プロセスとして前記監視対象プログラムを起動する監視対象プログラム起動手段と、
コマンドが入力され、そのコマンドを前記監視対象プログラムが実行する度に、前記コマンド並びに当該コマンドの実行結果を前記監視対象プログラムに対する前記ユーザの操作履歴として記録する操作履歴管理手段と、を備えて成る、
情報処理装置。
【請求項2】
前記監視対象プログラムの起動による処理プロセスを識別するためのIDを生成するID生成手段と、
前記監視対象プログラムの起動時に前記IDを含むプロンプトを生成するプロンプト生成手段と、を更に備えており、
前記操作履歴管理手段は、前記プロンプトに続いて前記コマンドが入力され、そのコマンドを前記監視対象プログラムが実行する度に、前記プロンプト、コマンド並びに当該コマンドの実行結果を文字列として保持するとともに、保持されている文字列の中から前記IDを含むプロンプトに続くコマンドを文字列探索により抽出し、抽出したコマンドを前記監視対象プログラムに対する前記ユーザの操作履歴として記録する、
請求項1記載の情報処理装置。
【請求項3】
時刻情報を出力する時刻出力手段を備えており、
前記操作履歴管理手段は、前記コマンドが実行されたときの時刻情報を前記時刻出力手段より取得し、取得した時刻情報を前記操作履歴と関連付けて記録する、
請求項2記載の情報処理装置。
【請求項4】
乱数を発生する乱数発生手段を備えており、
前記プロンプト生成手段は、前記乱数発生手段で発生した乱数を前記IDとして前記プロンプトを生成する、
請求項2または3記載の情報処理装置。
【請求項5】
OS及び当該OS上で動作する監視対象プログラムを搭載した情報処理装置が実行する方法であって、
前記OSが起動した後、前記監視対象プログラムが起動する前に起動する親プロセスの配下プロセスとして前記監視対象プログラムを起動させる段階と、
コマンドの入力をユーザに促す段階と、
前記コマンドが入力され、そのコマンドを前記監視対象プログラムが実行する度に、前記コマンド並びに当該コマンドの実行結果を前記監視対象プログラムに対する前記ユーザの操作履歴として記録する段階とを有する、
操作履歴取得方法。
【請求項6】
OS及び当該OS上で動作する監視対象プログラムを搭載したコンピュータ装置を、
前記OSが起動した後、前記監視対象プログラムが起動する前に起動する親プロセスの配下プロセスとして、前記監視対象プログラムを起動する監視対象プログラム起動手段、
コマンドが入力され、そのコマンドを前記監視対象プログラムが実行する度に、前記コマンド並びに当該コマンドの実行結果を前記監視対象プログラムに対する前記ユーザの操作履歴として記録する操作履歴管理手段、
として機能させるコンピュータプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate


【公開番号】特開2010−237744(P2010−237744A)
【公開日】平成22年10月21日(2010.10.21)
【国際特許分類】
【出願番号】特願2009−82010(P2009−82010)
【出願日】平成21年3月30日(2009.3.30)
【出願人】(000102728)株式会社エヌ・ティ・ティ・データ (438)
【Fターム(参考)】