Scroll to navigation

SUDOREPLAY(8) System Manager's Manual SUDOREPLAY(8)

名前

sudoreplay - sudo のセッションログを再生する

書式

sudoreplay [-h] [-d dir] [-f filter] [-m num] [-s num] ID

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

説明

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

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

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

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

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

'\n' または '\r'
次の再生イベントに飛ぶ。イベント間の休止が長いとき便利。
' ' (space)
出力を停止する。任意のキーを押せば、続行する。
'<'
再生速度を半分に下げる。
'>'
再生速度を倍にする。

オプションとして以下のものが使用できる。

セッションログは、デフォルトの /var/log/sudo-io ではなく、 dir にある。
再生する I/O タイプを選択する。 デフォルトでは、sudoreplay はコマンドの標準出力、標準エラー、 それに端末 (tty) への出力を表示することになっている。 引き数 filter は、コンマで区切ったリストであり、stdout, stderr, ttyout から一つ以上指定する。
簡単なヘルプ・メッセージを標準出力に表示して終了する。
「リスト・モード」を有効にする。 このモードでは、sudoreplay は、再生可能なセッションのリストを、 sudo のログファイルにおける表記と同じような書式で、 /var/log/sudo-io 以下のファイル名 (すなわち、シーケンス・ナンバー) によってソートして表示する。検索式 (search expression) を指定すると、 表示する ID を絞り込むために、それが使用されることになる。 検索式は以下の述語 (predicate) から構成される。

実行されたコマンドが POSIX の拡張正規表現 pattern にマッチすれば、 真になる。
指定したディレクトリをカレントディレクトリとしてコマンドが実行されていれば、 真になる。
コマンドを実行した日付が date 以後なら、真になる。 サポートしている日時のフォーマットについては、 「日付と時刻のフォーマット」を参照すること。
指定された runas_group としてコマンドが実行されていれば、真になる。 runas_group を明示的に指定して、 sudo を実行していないかぎり、 この欄はログに書き込まれないことに注意していただきたい。
指定された runas_user としてコマンドが実行されていれば、真になる。 sudo は、デフォルトでは root ユーザとしてコマンドを実行することをお忘れなく。
コマンドを実行した日付が date 以前なら、真になる。 サポートしている日付のフォーマットについては、 「日付と時刻のフォーマット」を参照すること。
コマンドを実行したのが指定した端末デバイスならば、 真になる。tty name/dev/ の部分を取って指定するべきである。 たとえば、/dev/tty01 ではなく、tty01 のように。 (訳注: この説明は sudo-1.7.4 のころの指定法である。 最近の sudoreplay では、/dev/tty01 などと指定する必要があるようだ。)
コマンドを実行したユーザが user name なら、真になる。

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

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

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

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

日付と時刻の指定には、幾通りもの方法がある。よく使うフォーマットには、 次のものがある。

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

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

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

今日の今。
今からちょうど 1 日後。
24 時間前。
2 hours ago
2 時間前。
来週の (やがて来る週の) 金曜日の 00:00:00。 "this friday" と混同してはいけない。 "this friday" ならば、今週の金曜日とマッチする。
7 日前の現在時刻。"a week 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 分。

注意していただきたいが、相対的な日時指定は、 必ずしも期待通りに動作するとはかぎらない。 たとえば、"next" 修飾子は、"next Monday" などのように、 曜日と一緒に使うようになっている。 week, month, year などの単位と組み合わせて使った場合は、結果が期待よりも 1 多いものになってしまうのだ。たとえば、"next week" は、 今からちょうど 2 週間後の日時を指すことになってしまい、 意図したところとはたぶん違うだろう。この問題については、 sudoreplay の将来のバージョンで対処するつもりだ。

sudoreplay のデバッグ

バージョン 1.8.4 以上の sudoreplay は、 柔軟なデバッグ用の枠組みをサポートしており、 sudo.conf(5) ファイルの Debug 行で設定するようになっている。

sudo.conf(5) の設定についてさらに詳しいことをお知りになりたかったら、 sudo.conf(5) のマニュアルをご覧になっていただきたい。

ファイル

/etc/sudo.conf
デバッグ用枠組みの設定
/var/log/sudo-io
入出力ログを格納するデフォルトのディレクトリ
/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

関連項目

script(1), sudo.conf(5), sudo(8)

作者

多数の人々が長年に渡って sudo の開発に携わってきた。 当バージョンは主として次の者が書いたコードからできている。

Todd C. Miller

sudo の開発に貢献してくださった方々の詳細なリストについては、 配布物中の CONTRIBUTORS ファイルをご覧になっていただきたい。 (https://www.sudo.ws/contributors.html)

バグ

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

サポート

ある程度の無料サポートが sudo-users メーリングリストを通して利用できる。 購読やアーカイブの検索には、次の URL を御覧になるとよい。 https://www.sudo.ws/mailman/listinfo/sudo-users

免責

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

May 4, 2016 Sudo 1.8.17