入力したすべてのコマンドをログに記録するにはどうすればよいですか


24

誰かがシェルに入力したすべてのコマンドをどのように記録できますか?

あなたが誰か他の人のサーバーにログインして何かが壊れた場合、または他の誰かがあなたのサーバーに(意図的または悪意を持って)ログインした場合、あなた自身を保護するために私は尋ねています。

初心者でも履歴バイパスunset historyたり、新しいシェルを作成してトラックを隠すことができます。

上級Linux管理者がどのコマンドが入力されたか/システムに加えられた変更をどのように追跡するのか興味があります。

回答:


29

auditdをチェックアウトします。追加する場合

-a exit,always -F arch=b64 -S execve
-a exit,always -F arch=b32 -S execve

/etc/audit/audit.rules実行されたすべてのコマンドが記録されます。参照:http : //whmcr.com/2011/10/14/auditd-logging-all-commands/

次に、syslogサーバーに送信します。


必ずexecveログを記録する必要があるシステムコールはこれだけではありません。なぜそうでもないのexecvpですか?またはexecl?など
2rs2ts

実際、私はそのマニュアルページexecで「exec() 関数のファミリーは現在のプロセスイメージを新しいプロセスイメージで置き換えます。このマニュアルページで説明されている関数はのフロントエンドexecve(2)です」と言っていることに気付きました。ですからexecveatexec家族については安心できますが、よくわかりません。
2rs2ts

5

スクリプトコマンドを使用できます。このコマンドはPOSIXには含まれていませんが、すべてのキーストロークと出力およびエラーメッセージをファイルに保存すると便利です。後でファイルを表示できます。重要な作業を行っており、すべてのアクティビティのログを保持したい場合は、ログインした直後にこのコマンドを呼び出す必要があります。

$ script
スクリプトが開始されました、ファイルはtypescript
$ _ これは別のシェルであることに注意してください-ログインシェルの子

プロンプトが返され、ここで入力するすべてのキーストローク(バックスペースに使用されるキーストロークを含む)がファイル「typescript」に記録されます。記録が終了したら、exitと入力してセッションを終了できます。
注:script filenameを入力すると、セッションはtypescriptではなくファイルfilenameに保存されます。つまり、特定のファイル名が指定されていない場合、typescriptがデフォルトになります。

記録されたセッションを表示するには、cat filenameまたはcat typescriptのいずれかを使用できます

古いファイルに新しいセッションを追加する場合は、次のコマンドを使用し ます。script -a 新しいセッションをtypescriptに追加します。ここでも同じデフォルトルールが適用されます。

これは、システム管理者がセッションを追跡できる1つの方法です。それが有益で有用であることを願っています。乾杯!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.