| 著者: | A.Yoshiyama <yosshy@debian.or.jp> |
|---|---|
| バージョン: | 2.0.0 (2008/9/21) |
scriptedlogin とは、/bin/login プログラムを自動的に script コマンド環 境下に移行するプレロードライブラリです。
従来、セキュリティ等の目的でローカルログインやリモートログインのユー ザの操作履歴を取る為に、ユーザのログインシェルの初期実行スクリプト (BASH の .bashrc 等)に script コマンドを埋め込む、カーネルにパッチを 当てる、シリアルポートのログプログラムを使用する等のアプローチが取られ てきましたが、これらの方法には様々な問題がありました。
scriptedlogin では、上記の問題を回避する為、/bin/login プログラム実行 時点で script コマンドと同様の環境を整備し、その環境下で改めて /bin/login を実行する方式を採っています。これにより、ログファイルは一般 ユーザアカウントのアクセス不可なディレクトリ下に、一般ユーザアカウント が読み書き削除できないパーミッションのファイルとして作成されます。
また、導入のしやすさや OS 保守(商用ライセンス等)の観点から、 scriptedlogin はプレロードライブラリ方式を採用しています。これにより、 既存の /bin/login や getty、telnet 等、ライブラリ群に一切手を加えないで 導入・運用できるようになっています。
通常のコンソールログインは下記の流れになります。
scriptedlogin を導入すると、上記の流れが下記の通りになります。
/etc/ld.so.preload を使用している以上、OS 上で実行される全コマンドに libscriptedlogin.so はプレロードされ、main() の前に scriptedlogin のルー チンが実行されますが、scriptedlogin 内で自分自身がリンクされたコマンド の名前をチェックし、/bin/login 以外では即時処理を抜ける(→ 本来の main() が実行される)ようになっています。
上記以外にも、scriptedlogin のルーチンでは、様々なチェックが行われて おり、どれか1つでも条件が満たない場合は即時に本来の main() に実行が移 る設計になっています。
scriptedlogin 1.0.x では、※の箇所で script コマンドを実行し、その中で /bin/login を実行していましたが、2.0.0 より scriptedlogin 自体にscript コマンドの機能を取り込んでいます。これにより、script コマンドがインストー ルされていない環境でも使用できる上、不要なプロセスを生成しないように改 良されています。
main() 前の別ルーチン実行は gcc の機能に、main() 実行前のコマンド名や コマンドライン取得は Linux の /proc ファイルシステムに依存しています。 これらの条件が GNU/Linux と同様であれば、他の OS でも動作する可能性はあ ります。
なお、プレロードライブラリ機構を使用する都合上、/bin/login がダイナミッ クリンクされている必要があります。GNU/Linux でも /bin/login がスタティッ クリンクされている場合は機能しないでしょう。
インストールは至ってシンプルです。
ソースアーカイブを展開します。
下記コマンドを実行します:
make su root make install
デフォルトでは、/usr/local/lib 下に scriptedlogin 本体、 /usr/local/bin 下に操作再生ツール slreplay(script コマンド付属の scriptreplay コマンドの修正版)をインストールします。また、ログファイル は/var/log/scriptedlogin 下に保存されるようになっています。
上記のデフォルト設定を変更したい場合は、Makefile や scriptedlogin.c を修正して下さい。
アンインストールしたい場合は、下記コマンドを実行して下さい:
su root make uninstall
ライブラリやツールはアンインストールされますが、既にあるログファイル は削除されません。必要であれば別途削除して下さい。
scriptedlogin 自体は特別な使用法はありません。インストール後、普通に コンソールログインして下さい。
ログファイルの存在ぐらいは確認しても構いませんが、間違えても現在使用 中のシェルのログファイルを cat で表示しないで下さい!無限ループになりま す。既にログアウトしたシェルの操作履歴なら、内容を表示しても問題ありま せん。
ログファイルは2つあります:
/var/log/scriptedlogin/ <日付>-<ログイン時刻>-<ユーザ名>-<tty名>:操作ログ <日付>-<ログイン時刻>-<ユーザ名>-<tty名>-t:タイミングログ
前者は操作ログそのものです。ざっと操作履歴を確認するためにはこちらの 内容を確認して下さい。
後者は前者の出力タイミングを記録したものです(script コマンドの同様の 機能と同じ事をしています)。こちらを使用してコンソール操作を「再生」す る為には、scriptedlogin に同梱された slreplay コマンドを下記要領で使用 します(libscriptedlogin と同時にインストールされます):
slreplay <操作ログ> [<タイミングログ>] ※scriptedlogin 2.0.0 より引数の扱いが変わりました
綺麗に表示する為には、ユーザがログインしたターミナル環境と同じ環境で slreplay コマンドを実行する必要があります。
重要
ユーザのログイン毎にログファイルは増えていきます。 ログファイルの整理は怠らないようにして下さい。
scriptedlogin は /bin/login の実行に完全に依存したツールです。このた め、下記のケースではログを採取しません。
scriptedlogin 2.0.0 より、script コマンドのソースコードを流用していま すので、scriptedlogin のライセンスは script コマンドのライセンスに準じ ます(修正 BSD ライセンスのようです)。詳しくは scriptedlogin.c の先頭 部分を参照して下さい。
slreplay は script コマンドの付属ツール、scriptreplay コマンドに手を 加えたものです。ライセンスはオリジナルのまま(パブリックドメインの模様) です。
script コマンドのログ出力機能を内蔵
README 更新
初版リリース