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

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

マシン上のすべてのシェルで送信されたすべてのコマンドをログに記録するエレガントな方法はありますか? これは、あまり使用されない Ubuntu サーバーのコンテキストでの話で、そのサーバーの唯一の人間ユーザーは私です。(自動化システムによって使用されるユーザー アカウントは複数あります。)

これを目立たず、オーバーヘッドの少ないものにしたいので、 のような単純な方法があれば嬉しいですscript

答え1

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

これらのacct機能は、今日でもほとんどの Unix および Linux システムに存在しています。

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

答え2

使用できるスヌーピー

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

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

答え3

これはとても素敵で素早いすべてのシェルコマンドをログに記録する方法:

ステップ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

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

答え4

使用できますスドッシュシェル ラッパーとして。実行するすべての操作の自動ログ記録が含まれ、ログ ファイルを再生できます。詳細についてはウェブサイトをご覧ください

関連情報