web-dev-qa-db-ja.com

サーバー上のすべてのユーザーによるすべてのBashコマンドをログに記録する方法は?

私たちの小さな会社はUbuntu Server 11.10を実行しており、そこに数人がSSHアクセスを持っています。実際の端末も時々使用されます。ユーザーとタイムスタンプとともに、実行されたすべてのBashコマンドをローカルに記録するにはどうすればよいですか?

誰も悪名高くなく、積極的にロギングを回避しようとしていると想定できますが、ユーザーがログファイルに直接書き込みアクセスできないようにしたいのです。同時セッションは正しく処理する必要があります。

21
Tin

BASHシェルの場合、システム全体のBASHランタイム構成ファイルを編集します。

Sudo -e /etc/bash.bashrc

そのファイルの最後に追加します:

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

新しいファイルで「local6」のログを設定します。

Sudo -e /etc/rsyslog.d/bash.conf

そして内容...

local6.*    /var/log/commands.log

Rsyslogを再起動します。

Sudo service rsyslog restart

ログアウト。ログインしてください。

しかし、ログのローテーションを忘れました:

Sudo -e /etc/logrotate.d/rsyslog

同じ方法でローテーションするログファイルのリストがあります...

/var/log/mail.warn
/var/log/mail.err
[...]
/var/log/message

そのため、そのリストに新しいbash-commandsログファイルを追加します。

/var/log/commands.log

セーブ。

32
user8290

この点で、プロセスアカウンティングシステム、特にlastcommおよびacコマンドを提供する acct パッケージが役立つ場合があります。

Acコマンドは、ユーザーの接続時間に関する統計を時間単位で出力します。これは、ユーザーがSSHまたはシリアル端末を介してリモートで、またはコンソール上でシステムに接続された時間です。

Lastcommコマンドは、以前に実行されたコマンドに関する情報を表示します。最新のエントリはリストの一番上に表示されます。各プロセスが使用したCPU時間の合計も表示されます。

役に立つかもしれない古いチュートリアルはこちらです:

http://www.linuxjournal.com/article/6144?page=0,1

Lastなどのその他のアカウンティングコマンドは、このチュートリアルで見つけることができます。

http://www.techrepublic.com/article/system-accounting-in-linux/1053377

4
Sabacon

snoopy を使用できます。

スヌーピーロガーは、あなたの目的にぴったりかもしれません。避けられないロギングソリューションではなく、自分のアクションを追跡することを好む勤勉な管理者にとって役立つツールです。

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

3
Bostjan Skufca

here すべてのログを記録するスクリプトbashコマンド/ビルトインをテキストファイルまたはsyslogパッチまたは特別な実行可能ツールを使用しないサーバー。

bashの初期化時に1回呼び出す必要がある単純なシェルスクリプトであるため、展開が非常に簡単です。

それは無料で、あなたのニーズに合うことを願っています。

3

これを試してください(bash 4.3では上記のソリューションは100%動作しません):

export HISTTIMEFORMAT="%Y-%m-%d %T "
export Prompt_COMMAND='trap "" 1 2 15; history -a >(tee -a ~/.bash_history | while read line; do if [[ $line =~ ^#[0-9]*$ ]]; then continue; fi; logger -p user.info -t "bash[$$]" "($USER) $line"; done); trap 1 2 15;'

これはロギングを行い、bash履歴ファイルに使用されるタイムスタンプのロギングを防ぎます。 strg + cを複数回押すと、bashは「サブジョブ」に信号を送信するため、トラップが必要です(bash 4.3でテスト済み)。これにより、現在のユーザーのログアウトが強制されます(例:Sudoでログイン)

履歴ファイルを上書きしない複数のセッションを処理するには、Bshop起動ファイルに「shopt -s histappend」を配置する必要があります。同じ問題に関する この質問 も参照してください。

0
pdp

Acctをインストールすることもできます。 Acctは、Linuxシステムで行われていることの詳細な監査証跡を保持します。

Sudo apt-get install acct
0
user571354