回答:
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
セーブ。
PROMPT_COMMAND
非bashシェルにリセット、設定解除、または実行することで、ユーザーが簡単に無効にできると思います。
この点で、プロセスアカウンティングシステム、特に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
スヌーピーを使用できます。
スヌーピーロガーはあなたの目的にぴったりかもしれません。避けられないロギングソリューションではなく、自分のアクションを追跡することを好む勤勉な管理者にとって役立つツールです。
開示:私はスヌーピーメンテナーです。
これを試してください(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でログイン)