(57)【要約】【課題】ユーザにより入力されるコマンドなどの操作履歴を取得することができる装置を提供する。【解決手段】この情報処理装置１は、ＯＳ１０が起動した後、ロギングプログラム１３よる処理プロセスの配下プロセスとして、ＯＳ１０上で動作するシェルプログラム１４を起動するシェルプログラム起動部３７と、コマンドが入力され、そのコマンドをシェルプログラム１４が実行する度に、コマンド並びに当該コマンドの実行結果をシェルプログラム１４に対するユーザの操作履歴として操作履歴記録部４０に記録する操作履歴管理部３９と、を備えて成る。【選択図】図２
2010237744.tif 000002
【特許請求の範囲】
【請求項１】
ＯＳが起動した後、当該ＯＳ上で動作する監視対象プログラムが起動する前に起動する親プロセスの配下プロセスとして前記監視対象プログラムを起動する監視対象プログラム起動手段と、
コマンドが入力され、そのコマンドを前記監視対象プログラムが実行する度に、前記コマンド並びに当該コマンドの実行結果を前記監視対象プログラムに対する前記ユーザの操作履歴として記録する操作履歴管理手段と、を備えて成る、
情報処理装置。
【請求項２】
前記監視対象プログラムの起動による処理プロセスを識別するためのＩＤを生成するＩＤ生成手段と、
前記監視対象プログラムの起動時に前記ＩＤを含むプロンプトを生成するプロンプト生成手段と、を更に備えており、
前記操作履歴管理手段は、前記プロンプトに続いて前記コマンドが入力され、そのコマンドを前記監視対象プログラムが実行する度に、前記プロンプト、コマンド並びに当該コマンドの実行結果を文字列として保持するとともに、保持されている文字列の中から前記ＩＤを含むプロンプトに続くコマンドを文字列探索により抽出し、抽出したコマンドを前記監視対象プログラムに対する前記ユーザの操作履歴として記録する、
請求項１記載の情報処理装置。
【請求項３】
時刻情報を出力する時刻出力手段を備えており、
前記操作履歴管理手段は、前記コマンドが実行されたときの時刻情報を前記時刻出力手段より取得し、取得した時刻情報を前記操作履歴と関連付けて記録する、
請求項２記載の情報処理装置。
【請求項４】
乱数を発生する乱数発生手段を備えており、
前記プロンプト生成手段は、前記乱数発生手段で発生した乱数を前記ＩＤとして前記プロンプトを生成する、
請求項２または３記載の情報処理装置。
【請求項５】
ＯＳ及び当該ＯＳ上で動作する監視対象プログラムを搭載した情報処理装置が実行する方法であって、
前記ＯＳが起動した後、前記監視対象プログラムが起動する前に起動する親プロセスの配下プロセスとして前記監視対象プログラムを起動させる段階と、
コマンドの入力をユーザに促す段階と、
前記コマンドが入力され、そのコマンドを前記監視対象プログラムが実行する度に、前記コマンド並びに当該コマンドの実行結果を前記監視対象プログラムに対する前記ユーザの操作履歴として記録する段階とを有する、
操作履歴取得方法。
【請求項６】
ＯＳ及び当該ＯＳ上で動作する監視対象プログラムを搭載したコンピュータ装置を、
前記ＯＳが起動した後、前記監視対象プログラムが起動する前に起動する親プロセスの配下プロセスとして、前記監視対象プログラムを起動する監視対象プログラム起動手段、
コマンドが入力され、そのコマンドを前記監視対象プログラムが実行する度に、前記コマンド並びに当該コマンドの実行結果を前記監視対象プログラムに対する前記ユーザの操作履歴として記録する操作履歴管理手段、
として機能させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＯＳカーネルの外で動作するシェル(shell) プログラム上で入力されるコマンドなどの操作履歴を記録する手法に関する。
【背景技術】
【０００２】
近年、企業における機密データは、クライアントＰＣ（Personal Computer）などの端末装置ではなく、サーバに集約されることが多くなっている。例えばＳａａＳ（Software as a Service）を用いたデスクトップ環境では、いずれかの端末装置で作成されたファイルがサーバに一括して保存される。また、ＣＲＭ（Customer Relationship Management）の普及により、顧客データもサーバを用いて一括管理されることが多くなっている。
このような状況では、サーバへのアクセス権限を有するユーザが、本来割り当てられた権限を超えて不正に機密データを取得ないし利用する危険性がある。そのため、このような不正な行為を抑制する必要性が高まっている。
【０００３】
対策の一つとして、アクセス権限を有するユーザにより入力されるコマンドなどの操作履歴をすべて記録することにより、不正な行為の抑制を図る手法がある。この手法では、例えばキーロガー（key logger）のように実行コマンドを取得したり、定期的に画面をキャプチャして収集することで、ユーザによる操作履歴を記録する。従来のこのような操作履歴を取得するためのプログラム（以下、「ロギングプログラム」という。）は、アプリケーションとしてシステムに常駐する形式、オペレーティングシステム（以下、「ＯＳ」（Operating System）という。）カーネルを改良することでＯＳの一機能としてシステムに常駐する形式、ＯＳカーネルの改良を必要とせずＯＳの一機能としてシステムに常駐し、ＯＳカーネルがダイナミックリンクによるモジュールの挿入を許可する形式（例えば、Ｌｉｎｕｘ（登録商標）のカーネルモジュール）等がある。
【０００４】
ロギングプログラムは、アプリケーションの場合でもＯＳの一機能の場合でも、システムに常駐するため、システムへ負荷がかかり、メモリリークが発生しやすい。ロギングプログラム自体は、通常、バックグラウンドで動作する補助機能であるが、これにより主作業に影響が及ぶことは、極力避けることが望ましい。
また、ロギングプログラムをＯＳの一機能にする場合、不具合が発生すると、ＯＳの再起動が必要になる。システムにおいて、ＯＳの再起動を無計画に行うことはできないので、この場合には、ロギングプログラムを不具合が発生したまま動作させることになり、操作履歴の正常な取得ができなくなる。更に、カーネルのバージョンアップが頻繁に行われるＯＳでは、ＯＳカーネルを改良してロギングプログラムをＯＳの一機能とする場合に、ＯＳベンダのサポート対象外になり、システムの運用上好ましくない。さらに、ＯＳのバージョンアップの際には、ユーザ側でロギングプログラムの再インストールが必要になり、保守コストが高くなる。
【０００５】
ロギングプログラムをアプリケーションとして搭載した情報処理装置を開示したものとして、特許文献１がある。特許文献１に開示された情報処理装置では、ロギングプログラムがユーザのログインにより起動され、ログオフにより停止する。そのために、ロギングプログラムがシステムに常駐せず、システムへの負荷が軽減される。しかし、ロギングプログラムは、ユーザのログインの際にシェルプログラムにより起動されるアプリケーションであるために、シェルプログラムの起動中でも、ロギングプログラムのみを停止可能であり、悪意のあるユーザに対しては無力となる。
【０００６】
ロギングプログラムがＯＳの一機能としてシステムに常駐する形式の情報処理装置を開示したものとして、特許文献２がある。特許文献２に開示された情報処理装置では、ＯＳからアプリケーションへ送られるメッセージに時刻を付加し、これを操作履歴として記録する。そのため、特許文献１と特許文献２とを組み合わせることにより、操作履歴に時刻を付加して記録すること自体は、可能である。
しかし、この場合であっても、ロギングプログラムがアプリケーションの場合には、悪意のユーザによりロギングプログラムのみが停止されるという問題を解決できず、ロギングプログラムをＯＳの一機能とする場合には、ＯＳのバージョンアップ等があったときにサポートを受けられないという問題がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０００−３５４０３６号公報
【特許文献２】特開２００７−１７２４６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明は、ＯＳの一機能とせず、常駐型でもなく、ユーザが悪意をもって操作する余地も無い状態で、ユーザにより入力されるコマンドなどの操作履歴を取得することができる技術を提供することを主たる課題とする。
【課題を解決するための手段】
【０００９】
上記の課題を解決する本発明の情報処理装置は、ＯＳが起動した後、当該ＯＳ上で動作する監視対象プログラムが起動する前に起動する親プロセスの配下プロセスとして前記監視対象プログラムを起動する監視対象プログラム起動手段と、コマンドが入力され、そのコマンドを前記監視対象プログラムが実行する度に、前記コマンド並びに当該コマンドの実行結果を前記監視対象プログラムに対する前記ユーザの操作履歴として記録する操作履歴管理手段と、を備えて成る
【００１０】
本発明の情報処理装置は、ＯＳが起動した後で、各構成要素が動作するために、ＯＳの一機能ではなく、また常駐型でもない。さらに、監視対象プログラムが親プロセスの配下プロセスとなるので、親プロセスの中で監視対象プログラムのみの停止は可能で有るが、親プロセスは起動を続ける。そのために、監視対象プログラムの起動、停止にかかわらず操作履歴管理手段が監視対象プログラムに対するユーザの操作履歴を取得可能である。また、ユーザが悪意をもって操作する余地を無くしている。
なお、入力されるコマンドには、ＣＵＩ（Character-based User Interface）のようなテキストによるコマンド入力の他に、ＧＵＩ（Graphical User Interface）によるポインティングデバイスによるコマンド入力なども含まれる。
【００１１】
本発明の情報処理装置は、前記監視対象プログラムの起動による処理プロセスを識別するためのＩＤを生成するＩＤ生成手段と、前記監視対象プログラムの起動時に前記ＩＤを含むプロンプトを生成するプロンプト生成手段を更に備えていてもよい。この場合に前記操作履歴管理手段は、前記プロンプトに続いて前記コマンドが入力され、そのコマンドを前記監視対象プログラムが実行する度に、前記プロンプト、コマンド並びに当該コマンドの実行結果を文字列として保持するとともに、保持されている文字列の中から前記ＩＤを含むプロンプトに続くコマンドを文字列探索により抽出し、抽出したコマンドを前記監視対象プログラムに対する前記ユーザの操作履歴として記録することが可能となる。このような構成では、コマンドのみを操作履歴として抽出することができ、ユーザが実際に入力したコマンドがわかりやすくなる。また、プロンプトに含まれるＩＤによりどの処理プロセスについての操作履歴であるかが容易にわかるようになる。
本発明の情報処理装置は、時刻情報を出力する時刻出力手段を更に備えていてもよい。この場合に前記操作履歴管理手段は、前記コマンドが実行されたときの時刻情報を前記時刻出力手段より取得し、取得した時刻情報を前記操作履歴と関連付けて記録することが可能となる。このような構成では、コマンドの入力時刻も履歴として残され、より詳細な操作履歴が得られる。
本発明の情報処理装置は、乱数を発生する乱数発生手段を更に備えていてもよい。この場合に前記プロンプト生成手段は、前記乱数発生手段で発生した乱数を前記ＩＤとして前記プロンプトを生成することが可能となる。乱数であるので、監視対象プログラムが起動する度に異なるＩＤがプロンプトに含まれる。乱数を記録しておくことで、例えばいつ起動された監視対象プログラムによる操作履歴であるかの識別が可能になる。
【００１２】
本発明の操作履歴取得方法は、ＯＳ及び当該ＯＳ上で動作する監視対象プログラムを搭載した情報処理装置が実行する方法である。情報処理装置が、前記ＯＳが起動した後、前記監視対象プログラムが起動する前に起動する親プロセスの配下プロセスとして前記監視対象プログラムを起動させる段階と、コマンドの入力をユーザに促す段階と、前記コマンドが入力され、そのコマンドを前記監視対象プログラムが実行する度に、前記コマンド並びに当該コマンドの実行結果を前記監視対象プログラムに対する前記ユーザの操作履歴として記録する段階とを有する。
【００１３】
本発明の操作履歴取得方法では、ＯＳの起動後、監視対象プログラムが起動する前に、親プロセスが起動する。そのために親プロセスは、ＯＳの一機能ではなく、また常駐型でもない。親プロセスは、、監視対象プログラムを配下プロセスとして起動するために、親プロセスを停止すると監視対象プログラムも停止する。ユーザが親プロセスを停止させようとすると、配下プロセスである監視対象プログラムも停止するために、ユーザが悪意をもって操作する余地は無い。
【００１４】
本発明のコンピュータプログラムは、ＯＳ及び当該ＯＳ上で動作する監視対象プログラムを搭載したコンピュータ装置を、前記ＯＳが起動した後、前記監視対象プログラムが起動する前に起動する親プロセスの配下プロセスとして前記監視対象プログラムを起動する監視対象プログラム起動手段、コマンドが入力され、そのコマンドを前記監視対象プログラムが実行する度に、前記コマンド並びに当該コマンドの実行結果を前記監視対象プログラムに対する前記ユーザの操作履歴として記録するログ管理手段、として機能させるコンピュータプログラムである。
【発明の効果】
【００１５】
本発明によれば、監視対象プログラムを配下プログラムとして起動して、入力されるコマンドを監視対象プログラムが実行する度に、コマンド並びに当該コマンドの実行結果を監視対象プログラムに対するユーザの操作履歴として記録する。これらは、ＯＳの起動後に行われるために、ＯＳの一機能でもなく、常駐型でもない。監視対象プログラムが配下プロセスとして実行されるために、監視対象プログラムを実行しつつ操作履歴の記録を停止させることができない。そのために、ユーザによる悪意の操作を防止することができる。
【図面の簡単な説明】
【００１６】
【図１】情報処理装置を含むシステムの全体構成図である。
【図２】ログイン処理時に端末装置に形成される機能ブロックを表す図である。
【図３】ＯＳ起動後の最初のログインからログアウトまでの処理のフローチャートである。
【図４】ログイン処理のときの各プログラムの起動状況の説明図である。
【図５】図５（ａ）はプロンプトのみが表示された表示装置の画面の例示図であり、図５（ｂ）はコマンド及び実行結果が表示された表示装置の画面の例示図であり、図５（ｃ）は図５（ｂ）から乱数が含まれる行のみを抽出した結果の例示図である。
【図６】従来の各プログラムの起動状況の説明図である。
【図７】ロギングプログラム１３が二重に起動される場合の各プログラムの起動状況の説明図である。
【図８】第２実施例の端末装置に搭載されるプログラムの例示図である。
【図９】第２実施例の端末装置に形成される機能ブロック図である。
【図１０】第２実施例のログイン処理のフローチャートである。
【図１１】ユーザ変更前後の各ユーザが操作履歴の取得対象者である場合のログイン処理時の各プログラムの起動状況の説明図である。
【図１２】ユーザがグラフィカルログインを要求した場合の各プログラムの起動状況の説明図である。
【発明を実施するための形態】
【００１７】
以下、本発明の実施形態を、図面を参照して説明する。
＜第１実施例＞
図１は、本発明を適用した情報処理装置を含むシステムの全体構成図である。
このシステムは、複数の端末装置１とサーバ２とを含んで構成されている。
各端末装置１は、ネットワークＮを介して、サーバ２とデータの送受信可能に接続されている。ネットワークＮは、ＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network）、或いは公衆回線を用いたネットワークなど、どのような形態のものでもよい。
【００１８】
サーバ２は、端末装置１で処理に用いられるデータ、プログラムなどを保持するものであり、端末装置１からのアクセスにより、これらのデータ、プログラムなどを提供する。例えば、サーバ２は、図示のようなユーザ管理テーブル２０を保持する。このユーザ管理テーブル２０は、ユーザが端末装置１にログインする際に参照されるテーブルであり、すべてのユーザのログインＩＤ（IDentification）、パスワード、及びユーザが操作履歴の取得対象者であるか否かを表す対象者情報などが記録される。対象者情報が「対象」となっているユーザは操作履歴の取得対象者であり、「非対象」となっているユーザは操作履歴の取得対象者ではない。
【００１９】
サーバ２は、また、後述する操作履歴ファイルを各端末装置１から取得して一括して保存する。サーバ２に保存される操作履歴ファイルは、必要に応じてシステムの管理者により解析され、ユーザが各端末装置１によりどのようなコマンドなどの入力を行ったかがわかるようになっている。なお、各端末装置１から取得した操作履歴ファイルを、端末装置１毎に分けて保存するようにしてもよい。このようにすることで、誰が、どの端末装置１により、どのようなコマンドなどの入力を行ったかがわかる。サーバ２は、各端末装置１から操作履歴ファイルを逐次取得してもよく、また、各端末装置１で一旦保存させておき、定期的に収集するようにしてもよい。
【００２０】
端末装置１は、キーボードやマウスなどの入力装置及び表示装置が接続されており、ＣＰＵ（Central Processing Unit）、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、ネットワークカード、及び入出力インタフェースを備えた本発明の情報処理装置の一例となる装置である。端末装置１は、図１に示されるように、ＯＳ１０とＯＳ１０上で動作するアプリケーション１１とを搭載している。図１の例では、アプリケーション１１として、ユーザのログイン時に用いられるプログラムのみを記載しているが、他のプログラムを保持していても構わない。また、サーバ２に保持されるプログラムを実行することも可能である。ユーザのログイン時に用いられるアプリケーション１１として、本実施形態の例では、認証プログラム１２、ロギングプログラム１３及びこの実施形態で監視対象となるシェルプログラム１４を含む。認証プログラム１２及びシェルプログラム１４は、従来のこの種の端末装置１でも用いられるアプリケーションである。
【００２１】
認証プログラム１２は、ユーザの認証処理を行うためのアプリケーションである。
認証処理は、例えば、ユーザがログインの際に入力装置により入力するログインＩＤ及びパスワードが正当なものか否かを、ユーザ管理テーブル２０を参照して判断することで行われる。また認証処理では、ユーザ管理テーブル２０の対象者情報を参照することで、ユーザが操作履歴の取得対象者であるか否かの判断も行う。従来の認証プログラムは、認証処理によりユーザを認証した後に、シェルプログラム１４の起動を指示する。しかし、本実施形態の認証プログラム１２は、ユーザが操作履歴の取得対象者である場合にロギングプログラム１３の起動を指示し、ユーザが操作履歴の取得対象者ではない場合にシェルプログラム１４の起動を指示する。
【００２２】
ロギングプログラム１３は、ユーザが入力装置から入力するコマンドなどの操作履歴を表す操作履歴ファイルを作成して、所定の記憶装置に記憶するためのアプリケーションである。ロギングプログラム１３は、シェルプログラム１４を起動するための引数を生成する。ロギングプログラム１３がシェルプログラム１４の起動を指示する場合には、この引数が用いられる。
【００２３】
シェルプログラム１４は、従来のログイン処理時にも実行されるアプリケーションである。シェルプログラム１４は、ユーザにより入力されたコマンドを解釈して処理を実行し、その実行結果を返す。シェルプログラム１４は、コマンドなどを受け付け可能な状態であることを表すプロンプトを表示する。シェルプログラム１４がロギングプログラム１３で生成された引数を用いて起動される場合には、この引数がプロンプトの少なくとも一部に含まれる。シェルプログラム１４が引数を用いずに起動される場合には、ユーザにより設定されるプロンプトが表示される。シェルプログラム１４の処理プロセスは、認証プログラム１２により起動が指示される場合に、認証プログラム１２の起動による処理プロセスを親プロセスとした子プロセス（配下プロセス）になり、ロギングプログラム１３により起動が指示されるには、ロギングプログラム１３の起動による処理プロセスの配下プロセスになる。
【００２４】
なお、本実施形態では、図１のようなサーバ・クライアントシステムとしての例を説明するが、本発明は、端末装置１がスタンドアローンの状態であっても、認証プログラム１２、ロギングプログラム１３、及びシェルプログラム１４を備えていれば実施が可能である。端末装置１がスタンドアローンの場合、ユーザ管理テーブル２０は、端末装置１が保持することになる。
【００２５】
ログイン処理時に端末装置１に形成される機能ブロックを図２に示す。
端末装置１には、入力受付部３１、表示制御部３２、処理部３３、通信制御部３４、認証部３５、乱数発生部３６、シェルプログラム起動部３７、時刻出力部３８、操作履歴管理部３９、操作履歴記録部４０、及びプロンプト生成部４１が形成される。
この実施形態では、認証部３５は、認証プログラム１２の実行により形成される。乱数発生部３６、時刻出力部３８、操作履歴管理部３９、及び操作履歴記録部４０は、ロギングプログラム１３の実行により形成される。処理部３３及びプロンプト生成部４１は、シェルプログラム１４の実行により形成される。シェルプログラム起動部３７は、認証プログラム１２或いはロギングプログラム１３の実行により形成される。入力受付部３１、表示制御部３２、及び通信制御部３４は、ＯＳ１０の起動時に、図示しない各種ドライバにより形成される。しかし、どの機能ブロックがどのプログラムにより形成されるかは、この限りではない。
【００２６】
入力受付部３１は、入力装置から入力されるコマンドなどを受け付ける。
表示制御部３２は、表示装置に所定の画像を表示する。表示制御部３２は、入力受付部３１で受け付けたコマンドやその実行結果等を表示装置に表示する。表示制御部３２は、端末装置１が入力装置からのコマンドなどの入力を受け付け可能な状態である場合に、プロンプトを表示装置に表示する。
コマンドなどの入力があると、表示制御装置３２は、プロンプトに続けて入力されたコマンドを表示する。また、コマンドの実行結果は、プロンプトとは異なる領域、例えばプロンプトやコマンドが表示されない行に表示される。
処理部３３は、入力受付部３２で受け付けたコマンドの内容等に応じた情報処理を実行する。実行結果は、表示制御部３２に送られて、表示装置に表示される。
【００２７】
通信制御部３４は、ネットワークＮを介してサーバ２との間でデータの送受信を行う。通信制御部３４は、サーバ２から処理に必要なデータやプログラムを受信したり、或いは、サーバ２に対して操作履歴ファイルを送信する。操作履歴ファイルの送信は、サーバ２からの要求により、或いは逐次行う。
【００２８】
認証部３５は、入力受付部３１により受け付けるログインＩＤ及びパスワードによりユーザ管理テーブル２０を参照して、ユーザが操作履歴の取得対象者であるか否かの判断を含めたユーザの認証処理を行う。
【００２９】
乱数発生部３６は、シェルプログラム１４の起動の前に乱数を発生させる。例えば、複数のユーザが同じ端末装置１にログインする場合には、各ユーザに対して一つずつ乱数を発生させる。同じユーザであってもログインの度に異なる乱数を発生させる。
シェルプログラム起動部３７は、ロギングプログラム１３の実行により形成される場合に、乱数発生部３６で発生した乱数を引数としてシェルプログラム１４を起動する。シェルプログラム起動部３７がロギングプログラム１３の実行により形成される場合に、シェルプログラム１４の処理プロセスは、ロギングプログラム１３の起動による処理プロセスを親プロセスとした配下プロセスになる。シェルプログラム起動部３７は、認証プログラム１２の実行により形成される場合に、引数を用いずにシェルプログラム１４を起動する。シェルプログラム起動部３７が認証プログラム１２の実行により形成される場合に、シェルプログラム１４の処理プロセスは、認証プログラム１２の起動による処理プロセスを親プロセスとした配下プロセスになる。
乱数は、前述の通り、同じユーザであってもログインの度に発生される。つまり、シェルプログラム１４の起動時の引数がその都度変わる。そのために、シェルプログラム１４の起動による処理プロセスの識別が引数、つまり乱数により可能となる。
【００３０】
時刻出力部３８は、例えばＯＳ１０で計時される現在時刻、或いはサーバ２で計時される現在時刻を取得して出力する。自身で現在時刻を計時するようにしてもよい。
【００３１】
操作履歴管理部３９は、ユーザによりコマンドが入力され、シェルプログラム１４によりそのコマンドが実行される度に、コマンド及びその実行結果から、シェルプログラム１４に対するユーザの操作履歴を表す操作履歴ファイルを作成して操作履歴記録部４０に記録する。操作履歴管理部３９は、コマンド及びその実行結果をそのまま操作履歴ファイルとしてもよいが、例えば、プロンプト、コマンド並びにコマンドの実行結果を文字列として保持し、この中から、プロンプトに続くコマンドを文字列探索により抽出して、抽出したコマンドにより操作履歴ファイルを作成してもよい。後述の通りプロンプトには乱数発生部３６で発生した乱数が含まれており、コマンドの抽出は、例えばこの乱数が含まれる行を抽出することにより行われる。行の抽出は、例えば、コマンドの入力があり、それに対する処理が終了して表示装置に表示される度に行われる。操作履歴管理部３９は、時刻出力部３８から現在時刻を取得しており、抽出した行に現在時刻を付加して記録する。このような構成では、コマンドの入力の度にその操作履歴が記録され、各コマンドの入力時刻が容易にわかるようになる。操作履歴ファイルに、例えばログインＩＤを付加すれば、どのユーザの操作履歴ファイルであるかがわかる。
また、プロンプトに含まれる乱数は、ログインの度に発生されるので、操作履歴ファイルを作成する際の乱数がその都度変わる。そのために、操作履歴ファイルの識別が乱数により可能となる。
【００３２】
プロンプト生成部４１は、シェルプログラム１４の起動による処理プロセスを識別するためのＩＤを含むプロンプトを生成する。この実施形態では、ＩＤに乱数発生部３６で発生された乱数を用いる。プロンプト生成部４１は、シェルプログラム１４の起動により形成されるが、シェルプログラム１４の起動のために乱数が引数として用いられることで、乱数を含んだプロンプトを生成することができる。プロンプトに含まれるＩＤは、ユーザによる改変が不可能であることが望ましい。
【００３３】
このようなシステムでは、端末装置１により、以下のようにしてユーザのログインからログアウトまでの処理が行われる。
図３は、ＯＳ１０起動後の最初のログインからログアウトまでの処理のフローチャートである。図４は、ログイン処理のときの各プログラムの起動状況の説明図である。図４では、線部分が各プログラムの待機時であり、矩形部分が各プログラムの起動時である。以下、同様のプログラムの起動状況の説明図で各プログラムの待機時、起動時を同様に表現される。
まず、端末装置１でＯＳ１０が起動されると、ユーザにより入力装置からログインＩＤ及びパスワードの入力が可能となる。これらが入力されると、端末装置１は、ユーザの認証要求を受け付ける。認証要求を受け付けると、認証プログラム１２が起動して認証部３５の機能を立ち上げ、ユーザが操作履歴の取得対象者であるか否かの判断を含めた認証処理を行う（ステップＳ１０）。認証処理によりユーザを認証できない場合、端末装置１は、その旨を表示装置に表示させ、再度のログインＩＤ及びパスワードの入力をユーザに促す。
【００３４】
認証処理により認証したユーザが操作履歴の取得対象者である場合には、認証プログラム１２によりロギングプログラム１３が起動される（ステップＳ２０：Y、ステップＳ３０）。
ロギングプログラム１３が起動されると、時刻出力部３８、操作履歴管理部３９、及び操作履歴記録部４０が形成されて、ユーザの操作履歴の取得が開始される。ロギングプログラム１３は、ユーザからのログアウト要求があるまで起動し続ける。ロギングプログラム１３起動後に、端末装置１は、乱数発生部３６で発生した乱数を引数として、シェルプログラム起動部３７によりシェルプログラム１４を起動する（ステップＳ４０）。
【００３５】
認証処理により認証したユーザが操作履歴の取得対象者でない場合には、認証プログラム１２によりシェルプログラム１４が起動される（ステップＳ２０：N、ステップＳ５０）。
【００３６】
シェルプログラム１４が起動することで、所望の情報処理を端末装置１により行えるようになる。表示装置にはプロンプトが表示される。シェルプログラム１４が乱数を引数として起動される場合には、プロンプトに乱数が含まれる。シェルプログラム１４が、ステップ２０でユーザが操作履歴の取得対象者でないと判断されて起動された場合には、シェルプログラム１４は、認証プログラム１２の起動による処理プロセスを親プロセスとした配下プロセスとなる。シェルプログラム１４は、ロギングプログラム１３の起動後に起動される場合に、ロギングプログラム１３の起動による処理プロセスを親プロセスとした配下プロセスとなる。
【００３７】
図５（ａ）は、乱数が含まれたプロンプトが表示された表示装置の画面例を示した図である。「efd98793472kojfa」が乱数である。この例では、プロンプトが乱数のみからなっているが、これに、例えばユーザのログインＩＤなどを付加してもよい。
【００３８】
入力装置からコマンドが入力されると、入力受付部３１でコマンドを受け付け、処理部３３により該コマンドに応じた処理を行う。入力受付部３１で受け付けたコマンドは、プロンプトと同じ行に並んで表示される。処理部３３による実行結果は、プロンプトとは異なる行に表示される。図５（ｂ）は、そのようなコマンド及び実行結果が表示された表示装置の画面例を示した図である。「ls」がコマンドであり、「admin apps kernel service system」が実行結果である。実行結果が表示されると、実行結果の次の行に、プロンプト「[efd98793472kojfa］ #」が表示される。
【００３９】
操作履歴管理部３９は、図５（ｂ）のようなプロンプト、コマンド並びにコマンドの実行結果を文字列として保持する。操作履歴管理部３９は、シェルプログラム１４の親プロセスであるロギングプログラム１３により形成されるために、図５（ａ）、（ｂ）のような表示の前に、操作履歴管理部３９がこれらの文字列を取得することになる。図５（ｂ）に表示される文字列のすべてを操作履歴として操作履歴記録部４０に記録してもよいが、この実施形態では、プロンプト及びコマンドを抽出して記録する。そのために操作履歴管理部３９は、乱数が含まれる行を抽出する。操作履歴管理部３９は、プロンプト、コマンド並びにコマンドの実行結果を文字列の中から乱数を文字列探索して、プロンプトに続くコマンドを抽出する。
図５（ｃ）は、図５（ｂ）から乱数が含まれる行を抽出した結果例を示した図である。図５（ｃ）の例では、抽出した行の先頭に、時刻出力部３８から取得した現在時刻を付加してある。「20080927112011」が現在時刻である。ここでは、行単位で抽出を行っているが、これは一例であり、例えば、２行にわたるコマンドの入力がある場合には、プロンプトに続くコマンドをすべて抽出することで、操作履歴を取得する。
【００４０】
このように、端末装置１は、入力装置から入力されるコマンドを現在時刻とともに操作履歴ファイルに記録することができる。従来、本実施形態のロギングプログラム１３のようにアプリケーションで操作履歴を取得する場合には、コマンドのみの記録及び現在時刻の取得が困難であった。そのために、コマンドをその実行結果とともにすべて操作履歴ファイルとして記録するしかなかった。これに対して本実施形態ではコマンドのみを記録することができるので、従来よりも操作履歴ファイルのサイズを小さくできる。なお、ここでコマンドのみとは、実行結果を除くすべての文字列である。端末装置１への入力がコマンド以外の文字列を含んでいる場合でも、ここで言うコマンドのみにあたる。
【００４１】
ログアウト時は、ユーザが、入力装置によりログアウトの要求を入力する。ログアウトの要求があると、端末装置１は、まずシェルプログラム１４を停止し（ステップＳ６０）、その後ロギングプログラム１３を停止する（ステップＳ７０）。
認証処理により認証したユーザが操作履歴の取得対象者でない場合には、ステップＳ５０でシェルプログラム１４が起動された後、ログアウトの要求があると、端末装置１は、シェルプログラム１４を停止する（ステップＳ８０）。
以上のように、ログアウト処理が終了する。ＯＳ１０を停止させる場合には、入力装置によりシャットダウンコマンドを端末装置１に入力する（ステップＳ９０）。
【００４２】
図６は、従来の各プログラムの起動状況の説明図である。従来は、認証プログラム１２で認証処理を行った後にシェルプログラム１４が起動される。ロギングプログラム１３は、ＯＳ１０の起動直後且つ認証プログラム１２の起動前（パタン１）、或いはシェルプログラム１４の起動後（パタン２）に、起動される。
従来のロギングプログラム１３は、パタン１の場合に、システムに常駐し、ユーザ認証要求時には既にコマンドの取得を行っている。そのため、メモリリークなどの問題が発生しやすい。これに対して本実施形態のロギングプログラム１３は、ユーザ認証処理の後に起動されている。つまり、常駐型ではないため、従来のようなメモリリークなどの問題が発生しにくくなっている。
また、従来のロギングプログラム１３は、パタン２の場合に、特許文献１のように、シェルプログラム１４が起動状態で、ロギングプログラム１３のみが停止するような事態が発生する。これに対して本実施形態のロギングプログラム１３は、シェルプログラム１４の起動前に起動され、ロギングプログラム１３を停止する場合には、その前にシェルプログラム１４が停止する。そのためにロギングプログラム１３のみが停止することはない。このように、ロギングプログラム１３をシェルプログラム１４よりも前に起動させることで、シェルプログラム１４が起動中に従来のようにコマンドの履歴が取得できなくなるという状況を、回避することができる。
ロギングプログラム１３は、ＯＳ１０の一機能ではなく、アプリケーション１１として端末装置１にインストールされるため、ＯＳ１０のバージョンアップに影響を受けることがない。また、ロギングプログラム１３の動作が不良になった場合でも、ＯＳ１０をシャットダウンする必要がない。
【００４３】
＜第２実施例＞
第１実施例の端末装置１において、ログイン処理後にユーザの変更が行われることがある。この場合、既にログインしているユーザが操作履歴の取得対象者でない場合には、変更後のユーザに対して図３に示す処理を行うことで、ログイン処理が行われる。また、既にログインしているユーザが操作履歴の取得対象者である場合でも、変更後のユーザが操作履歴の取得対象者でない場合には、変更後のユーザに対して図３に示す処理を行うことで、ログイン処理が可能である。
しかし、既にログインしているユーザが操作履歴の取得対象者で、変更後のユーザも操作履歴の取得対象者である場合には、図３に示す処理を行うとロギングプログラム１３が二重に起動される。例えば図７に示す各プログラムの起動状況の説明図に示すように、ロギングプログラム１３が二重に起動される。ロギングプログラム１３が二重に起動されると、操作履歴が正常に取得できなくなる。
【００４４】
第２実施例の端末装置１’では、図８に示すように、アプリケーション１１として、第１実施例に示す各プログラムの他にアプリケーション１１にロギング起動プログラム１５を搭載する。ロギング起動プログラム１５により、二重にロギングプログラム１３が起動されることを防止する。
ロギング起動プログラム１５は、自身の起動による処理プロセスの親プロセスを検索して、親プロセス中のロギングプログラム１３の起動による処理プロセス（以下、「ロギングプロセス」という。）の有無を確認する（以下、「状況判定処理」という。）ためのアプリケーションである。親プロセスの中にロギングプロセスが有る場合には、既にロギングプログラム１３が起動されているので、更なるロギングプログラム１３の起動が必要ない。そのためにロギング起動プログラム１５は、シェルプログラム１４の起動を指示する。親プロセスの中にロギングプロセスが無い場合には、ロギングプログラム１３が未だ起動されていないので、ロギング起動プログラム１５は、ロギングプログラム１３の起動を指示する。ロギング起動プログラム１５は、認証プログラム１２により、ユーザが操作履歴の取得対象者であると判断された場合に起動される。
シェルプログラム１４は、ＯＳ１０の仕様上、ログイン時にのみ用いられるだけでなく、様々な状況で用いられる。従って、ロギング起動プログラム１５は、それらのすべての状況を踏まえて、逐次シェルプログラム１４と同様の動きをする必要がある。そのために、ロギング起動プログラム１５は、シェルプログラム１４をエミュレートする。
【００４５】
図９は、第２実施例の端末装置１’に形成される機能ブロック図である。第２実施例の端末装置１’の機能ブロックは、第１実施例の機能ブロックに状況判定部４２を追加した構成であり、他に変更点はない。同じ機能ブロックには同じ符号を振ってあり、その機能も同じである。
状況判定部４２は、状況判定処理を行う。なお、第２実施例では、シェルプログラム起動部３７が、ロギング起動プログラム１５の実行により、或いはロギングプログラム１３の実行により形成される。
【００４６】
このような第２実施例の端末装置１’では、以下のようにしてログイン処理が行われる。図１０はログイン処理のフローチャートである。図１１は、ユーザ変更前後の各ユーザが操作履歴の取得対象者である場合のログイン処理時の各プログラムの起動状況の説明図である。
最初のユーザのログイン時には、ユーザの認証要求があると端末装置１’は認証処理（ステップＳ２０１）を行い、認証したユーザが操作履歴の取得対象者であるか否かを判定する（ステップＳ２０２）。操作履歴の取得対象者でない場合には、認証プログラム１５によりシェルプログラム１４が起動される（ステップＳ２０２：N、ステップＳ２０４）。
【００４７】
認証したユーザが操作履歴の取得対象者である場合には、認証プログラム１２によりロギング起動プログラム１５が起動される（ステップＳ２０２：Y、ステップＳ２０３、図１１のロギング起動プログラム（１）１５）。ロギング起動プログラム（１）１５により、状況判定部４２を用いた状況判定処理が行われる（テップＳ２０５）。ここでは、最初のユーザのログイン処理であり親プロセスには認証プログラム１２による処理プロセスしかないので、そのままロギングプログラム１３が起動される（ステップＳ２０５：無、ステップＳ２０６）。ロギングプログラム１３が起動されると、最初のユーザの操作履歴の取得が開始される。ロギングプログラム１３起動後に、端末装置１’は、乱数発生部３６で発生した乱数を引数として、シェルプログラム起動部３７によりシェルプログラム１４を起動する（ステップＳ２０８、図１１のシェルプログラム（１）１４）。
【００４８】
次いで、最初のユーザのログイン後にユーザを変更する場合のログイン処理について説明する。最初のユーザは、操作履歴の取得対象者であり、既に、ロギングプログラム１３が起動しているものとする。
【００４９】
ユーザの変更要求があると、端末装置１’は、変更するユーザの認証処理（ステップＳ２０１）を行い、認証したユーザが操作履歴の取得対象者であるか否かを判定する（ステップＳ２０２）。操作履歴の取得対象者でない場合には、認証プログラム１５によりシェルプログラム１４が起動される（ステップＳ２０２：N、ステップＳ２０４）。
【００５０】
認証したユーザが操作履歴の取得対象者である場合には、認証プログラム１２によりロギング起動プログラム１５が起動される（ステップＳ２０２：Y、ステップＳ２０３、図１１のロギング起動プログラム（２）１５）。ロギング起動プログラム（２）１５により、状況判定部４２を用いた状況判定処理が行われる（テップＳ２０５）。ここでは、ユーザの変更であり、最初のユーザが操作履歴の取得対象者であるので、親プロセスにはロギングプロセスが含まれる。そのためにロギング起動プログラム（２）１５により、シェルプログラム起動部３７を用いてシェルプログラム１４が起動される（ステップＳ２０５：有、Ｓ２０７、図１１のシェルプログラム（２）１４）。
ロギングプログラム１３は最初に起動されたシェルプログラム（１）１４を監視しているので、最初に起動されたシェルプログラム（１）１４の孫プロセスである変更後のユーザのシェルプログラム（２）１４を監視することができる。
このようにして、ロギングプログラム１３が二重に起動されることを防止できる。このような処理において、ステップＳ２０４で起動されるシェルプログラム１４による処理プロセスは認証プログラム１２の起動による処理プロセスの配下プロセスであり、ステップＳ２０７で起動されるシェルプログラム１４による処理プロセスはロギング起動プログラム１５の起動による処理プロセスの配下プロセスであり、ステップＳ２０８で起動されるシェルプログラム１４による処理プロセスはロギングプロセスの配下プロセスである。
【００５１】
＜第３実施例＞
第１、第２実施例は、コンソールログインを想定している。ここで、コンソールログインとは、ユーザがＯＳ１０に命令を与えるためのインターフェースとして、テキストによるコマンド入力画面（コンソールやターミナルやコマンドプロンプトと呼ばれる）が用意される、いわゆるＣＵＩによるログインを指す。
近年は、ＣＵＩよりもＧＵＩが主流になっている。ユーザは、ＯＳ１０に命令を与えるインターフェースとして、ＧＵＩを選択する場合がある。この場合、シェルプログラム１４が起動される前に、ＧＵＩ画面を司るウィンドウマネージャ（ＧＮＯＭＥなど）の初期化プログラムなどの様々なプログラムの起動が必要となる。
第１実施例において、ユーザがグラフィカルログインを要求した場合、ロギングプログラム１３がＧＵＩの準備をさせる必要がある。通常、ＧＵＩの準備はウィンドウマネージャが行うものであり、非常に膨大なコード量となる。そのため、ロギングプログラム１３がウィンドウマネージャの代行を行うのは非現実解である。
【００５２】
そこで、第３実施例においては、認証プログラム１２はロギング起動プログラム１５を起動し、ロギング起動プログラム１５がロギングプログラム１３を起動する第２実施例と同様の構成とする。
図１２は、ユーザがグラフィカルログインを要求した場合の各プログラムの起動状況の説明図である。
操作履歴の取得対象者がグラフィカルログインを要求すると、認証プログラム１２はロギング起動プログラム１５を起動する。ロギング起動プログラム１５はＧＵＩに必要な種々のプログラム（ＧＵＩ関連プログラム１６）を起動した後に、ロギングプログラム１３を起動する。ロギングプログラム１３はシェルプログラム１４を起動するともに、起動済みのＧＵＩ環境と連携させる。
この場合ロギングプログラム１３は、コマンド及びその実行結果だけでなく、ＧＵＩに対する特定の操作（マウスクリックなど）を検知し、画面をキャプチャした画像を操作履歴として取得する機能をさらに備えていてもよい。
【００５３】
このように、認証プログラム１２が直接ロギングプログラム１３を起動するのではなく、いったんロギング起動プログラム１５を起動する構成とすることで、ＳＦＴＰログイン要求（ＴＴＹが割り当てられないので、子プロセス監視に基づく操作履歴の取得が実行できない）や、操作履歴を取得中のシェルプログラム１４におけるlessコマンド実施（lessコマンドはユーザ情報管理テーブルにしたがってシェルプログラムを再起動するので、ロギングプログラム１３が二重に起動してしまう）など、様々な利用状況に対処して、ロギングプログラム１３の正常動作を確保することができる。
【符号の説明】
【００５４】
１、１’…端末装置、１０…ＯＳ、１１…アプリケーション、１２…認証プログラム、１３…ロギングプログラム、１４…シェルプログラム、１５…ロギング起動プログラム、１６…ＧＵＩ関連プログラム、２…サーバ、２０…ユーザ管理テーブル、３１…入力受付部、３２…表示制御部、３３…処理部、３４…通信制御部、３５…認証部、３６…乱数発生部、３７…シェルプログラム起動部、３８…時刻出力部、３９…操作履歴管理部、４０…操作履歴記録部、４１…プロンプト生成部、４２…状況判定部
【図１】
2010237744.tif 000003
【図２】
2010237744.tif 000004
【図３】
2010237744.tif 000005
【図４】
2010237744.tif 000006
【図５】
2010237744.tif 000007
【図６】
2010237744.tif 000008
【図７】
2010237744.tif 000009
【図８】
2010237744.tif 000010
【図９】
2010237744.tif 000011
【図１０】
2010237744.tif 000012
【図１１】
2010237744.tif 000013
【図１２】
2010237744.tif 000014