sudoreplay(8) sudo のセッションログを再生する

書式

sudoreplay [-h] [-d directory] [-f filter] [-m max_wait] [-s speed_factor] ID

sudoreplay [-h] [-d directory] -l [search expression]

説明

sudoreplay は、sudo が生成した出力ログの再生、 または一覧表示を行う。再生する場合、 sudoreplay はセッションの再生をリアルタイムで実行することもできるし、 コマンドライン・オプションによって再生速度を (早くしたり、 遅くしたり) 調節することもできる。

上記書式の一つ目 (再生モード) で指定する ID は、 たとえば、 0100A5
のような、 数字とアルファベットの大文字からなる 6 字の文字列か、 sudoersiolog_file オプションにマッチするパターンかの、 どちらかでなければならない。sudoerslog_output オプションが有効な状態で、sudo を使ってコマンドを実行すると、 TSID=ID
という文字列が syslog 経由で、 あるいは sudo 独自のログファイルに記録される。 また、IDは、sudoreplay のリストモードを使用して、 特定することもできる。

[訳注]:

セッションの出力のロギングを有効にするには、sudoers ファイルの Defaults 行で log_output を指定するか、 あるいは、同ファイルのユーザ設定でコマンドに LOG_OUTPUT タグを付ける。 sudoers のマニュアルを参照してほしい。

リストモードで sudoreplay を使用すれば、ユーザ、使用した端末 (tty)、 実行したコマンドなど、いくつかの条件に基づいて、セッションの ID を知ることができる。

再生モードでは、標準出力がリダイレクトされていないかぎり、 以下のキーが有効である。

' ' (space)
出力を停止する。任意のキーを押せば、続行する。
'<'
再生速度を半分に下げる。
'>'
再生速度を倍にする。

オプション

sudoreplay では、以下のコマンドライン・オプションが使える。
-d directory
セッションログが格納されているディレクトリとして、デフォルトの /var/log/sudo-io の代わりに、directory を使用する。
-f filter
デフォルトでは、sudoreplay はコマンドの標準出力と標準エラー、 それに端末 (tty) への出力を再生する。-f を使えば、 そのうちのどれを出力するかを選択することができる。引き数 filter は、 コンマで区切られたリストであり、stdout, stderr, ttyout から一つ以上指定する。
-h
-h (help) オプションを指定すると、 sudoreplay は簡単なヘルプ・メッセージを標準出力に表示して、終了する。
-l [search expression]
「リストモード」を有効にする。このモードでは、sudoreplay は再生可能なセッション ID を一覧表示することになる。検索式 (search expression) を指定すると、表示する ID を絞り込むために、 それが使用される。検索式は以下の述語 (predicate) から構成される。
[訳注]:
このマニュアルで「ID」という言葉は、リストモードで表示される、 ある ID を持つセッションそのものや、 そのセッションの情報の意味でも使われている。
command command pattern
実行されたコマンドが command pattern にマッチすれば、真になる。 POSIX の正規表現をサポートするシステムでは、 パターンに拡張正規表現が使える。 POSIX の正規表現をサポートしていないシステムでは、 単なる部分文字列のマッチが行われる。
cwd directory
指定したディレクトリをカレントディレクトリとして、 コマンドが実行されていれば、真になる。
fromdate date
コマンドを実行した日付が date 以後なら、真になる。 サポートしている日時のフォーマットについては、 「日付と時刻のフォーマット」を参照すること。
group runas_group
指定された runas_group としてコマンドが実行されていれば、真になる。 runas_group を明示的に指定して、 sudo を実行しないかぎり、 この欄はログに書き込まれないことに注意してほしい。
runas runas_user
指定された runas_user としてコマンドが実行されていれば、真になる。 sudo は、デフォルトでは root ユーザとしてコマンドを実行することを忘れないように。
todate date
コマンドを実行した日付が date 以前なら、真になる。 サポートしている日付のフォーマットについては、 「日付と時刻のフォーマット」を参照すること。
tty tty
コマンドを実行したのが指定した端末デバイスならば、 真になる。tty/dev/ の部分を取って、指定する。 たとえば、/dev/tty01 ではなく、tty01 というように。 (訳注: この説明は sudo-1.7.4 のころの指定法である。 最近の sudoreplay では、/dev/tty01 などと指定する必要があるようだ。)
user user name
コマンドを実行したユーザが user name なら、真になる。

述語は、他と区別できるなら、最短の文字列にまで短縮できる (たとえば、現在のところ、述語 user の代わりに u が使える)。

述語は and, or, ! 演算子を使って、結合することができる。 また、'('')' を使えば、グループ化が可能だ (ただし、たいていの場合、カッコはシェルに解釈されないように、 エスケープしなければならない)。and 演算子の指定はしてもしなくてもよい。 隣り合った述語は、間に or がないかぎり、and で結合していると見なされるからだ。

-m max_wait
キーを押してから次のキーを押すまでの間や、データ出力同士の間にある 待ち時間の上限を指定する。sudo はデフォルトでは、 キーの押し下げやプログラムの出力の間にある経過時間を正確に再現する。 しかし、それだと、セッション中に長い間合いがある場合など、 うんざりすることになりかねない。 -m オプションを指定すれば、sudoreplay はそうした間合いを、 長くても max_wait 秒以内に抑えるようになる。この値は、 たとえば 2.5 といった、浮動小数点数で指定することも可能だ。
-s speed_factor
このオプションを指定すると、sudoreplay は、キーの押し下げやプログラムの出力の間にある待ち時間の秒数を調節する。 このオプションを使えば、表示速度を早くしたり遅くしたりできるわけだ。 たとえば、speed_factor2 を指定すれば、 出力の速度が 2 倍になるし、.5 を指定すれば、出力の速度が半分になる。
-V
-V (version) オプションを指定すると、 sudoreplay はバージョン番号を表示して終了する。

日付と時刻のフォーマット

日付と時刻の指定には、幾通りもの方法がある。よく使うフォーマットには、 次のものがある。
HH:MM:SS am MM/DD/CCYY timezone
午前/午後 (am/pm) の代わりに 24 時間制の時刻を使ってもよい。
HH:MM:SS am Month Day, Year timezone
午前/午後 (am/pm) の代わりに 24 時間制の時刻を使ってもよい。 月や曜日の名前には短縮形を使うこともできる。 月や曜日の名前は、英語で指定しなければならないのに注意すること。 (訳注: 曜日を指定する場合は、月と日にちの間以外なら、 たいていの場所に置くことができる。 なお、上記書式のように、年の前にコンマを入れるかどうかは、任意である。)
CCYY-MM-DD HH:MM:SS
ISO の日時フォーマット。
DD Month CCYY HH:MM:SS
月の名前には短縮形も使える。

日付と時刻の一方を省略することができる。 am/pm とタイムゾーンは、 指定してもしなくてもよい。日付が指定されない場合は、 当日が指定されたものと見なされる。時刻が指定されない場合は、 指定された日にちの 00:00:00 が使用される。 時刻や日付のそれほど重要ではない部分も省略できるが、 その場合は 0 が指定されたものと見なされる。 たとえば、以下の表記は、すべて有効である。

以下の表記は、すべて有効な日時の指定である。

now
今日の今。
tomorrow
今からちょうど 1 日後。
yesterday
24 時間前。
2 hours ago
2 時間前。
next Friday
次の金曜日の 00:00:00。
this week
時刻は現在時刻。日付は来週の最初の日。
a fortnight ago
14 日前の現在時刻。
10:01 am 9/17/2009
2009 年 9 月 17 日 午前 10 時 01 分。
10:01 am
今日の午前 10 時 01 分。
10
今日の午前 10 時 00 分。
9/17/2009
2009 年 9 月 17 日 午前 0 時 00 分。
10:01 am Sep 17, 2009
2009 年 9 月 17 日 午前 10 時 01 分。

ファイル

/var/log/sudo-io
I/O ログを格納するデフォルトのディレクトリ。
/var/log/sudo-io/00/00/01/log
セッションログの情報 (一例)。
/var/log/sudo-io/00/00/01/stdin
セッションの標準入力のログ (一例)。
/var/log/sudo-io/00/00/01/stdout
セッションの標準出力のログ (一例)。
/var/log/sudo-io/00/00/01/stderr
セッションの標準エラーのログ (一例)。
/var/log/sudo-io/00/00/01/ttyin
セッションの tty 入力のログ (一例)。
/var/log/sudo-io/00/00/01/ttyout
セッションの tty 出力のログ (一例)。
/var/log/sudo-io/00/00/01/timing
セッションのタイミングを記録したファイル (一例)。

sudo があるコマンドのためにパイプラインの一部として使用されたときを除いて、 stdin, stdout, stderr 用のファイルは空になることに注意してほしい。

用例

ユーザ millert が実行したセッションを列挙する。

 sudoreplay -l user millert

ユーザ bob が実行したセッションのうち、 コマンドに vi という文字列が含まれるものを列挙する。

 sudoreplay -l user bob command vi

ユーザ jeff が実行したセッションのうち、 コマンドが下記の正規表現にマッチするものを列挙する。

 sudoreplay -l user jeff command '/bin/[a-z]*sh'

jeffbob がコンソールで実行したセッションを列挙する。

 sudoreplay -l ( user jeff or user bob ) tty console

作者

Todd C. Miller

バグ

sudoreplay にバグを発見したと思ったら、下記にアクセスして、 バグレポートを提出していただきたい。
http://www.sudo.ws/sudo/bugs/

サポート

ある程度の無料サポートが sudo-users メーリングリストを通じて利用できる。 購読やアーカイブの検索をなさりたかったら、下記 URL をご覧になること。
http://www.sudo.ws/mailman/listinfo/sudo-users

免責

sudoreplay は「現状のまま」提供される。 明示的な、あるいは黙示的ないかなる保証も、 商品性や特定目的への適合性についての黙示的な保証を含め、 またそれのみに止まらず、これを否認する。詳細な全文については、 sudo と一緒に配布されている LICENSE ファイルや、 下記 Web ページを御覧いただきたい。
http://www.sudo.ws/sudo/license.html