すべてのユーザーが送信したすべてのUNIXシェルコマンドをログに記録するにはどうすればよいですか?


8

マシン上のすべてのシェルで送信されたすべてのコマンドを記録するための洗練された方法はありますか?これは、私が唯一の人間のユーザーである、使用頻度の低いUbuntuサーバーに関連しています。(自動システムで使用されるユーザーアカウントがいくつかあります。)

これは控えめでオーバーヘッドの少ないものにしたいので、などの簡単な方法があったらいいと思いますscript

回答:


9

Unixとそのクローンには、黎明期(実際には人々が実際に使用したコンピューターサイクルごとに実際にお金を支払わなければならなかった時代から遡りますacct)に組み込まれたプロセスアカウンティング()と呼ばれるシステムがありました。これにより、システム管理者は正確に知ることができました。ユーザーが何をしているかに応じて、それに応じて請求することができます。

acct施設はまだこの日にほとんどのUnixおよびLinuxシステムに存在します。

このサイト:http : //www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.htmlは、それを有効にする方法を説明しています。


これは、どのユーザーがsudoとsuを実行し、どのrootのコマンドを後で実行したかをログに記録するためにも使用できますか?
ダニエルベック

ユーザー、ttyなどのキーで実行されたすべてのコマンドをログに記録すると思います。tty上のコマンドをそのttyにログインしたユーザーと一致させて、suまたはsudoしたユーザーを追跡できます。
Majenko

ありがとう、私はこの機能をまったく知りませんでした。manページをざっと読んでみると、ディスク容量が少ない状態に達するまでロギングが続くことが示唆されます。おそらくlogrotateスクリプトが必要になるでしょう。
jl6

プロセスアカウンティングは、すべての引数を持つコマンドではなく、実行されたプログラムをログに記録しただけだと思いましたか?
Sirex

2

ここにすべてのシェルコマンドをログに記録する非常に素晴らしくて速い方法があります

ステップ1:

お好みのテキストエディタを使用して/ etc / bashrcを開き、最後に次の行を追加します。

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

ステップ2:

/etc/syslog.confファイルに次の行を追加して、sysloggerがlocal6をログファイルにトラップするように設定します。

local6.*                /var/log/cmdlog.log

[完全なブログ投稿はこちらをご覧ください]


ユーザーがこれを無効にして変数をリセットできることを警告します。これは「各プライマリプロンプトを発行する前に」実行されるため、この事実はログに記録されません。
dmckee ---元モデレーターの子猫2012

2

あなたはスヌーピーを使うことができます。

インストールと削除は非常に簡単です(カーネルモジュールやパッチは必要ありません)。これは適切な監査ソリューションではなく、簡単に回避できることに注意してください。

開示:私は現在のスヌーピーのメンテナーです。


Bostjan Skufcaは、SnoopyをUbuntuにインストールするための追加の指示をここに提供し、同じスレッドの追加コメントにもここで提供しています
karel、2014年

スヌーピーの場合は+1。/var/log/auth.logにコマンドと引数の素敵なログを提供します
David Goodwin '27

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