Bash の非常に強力でクールなコマンドは歴史にあります。簡単に言えば、デフォルトでは、Bash は入力したすべてのコマンドの履歴を保存します。 HISTSIZE 変数の値によって、セッション中に履歴リストに保持されるイベントの数が決まります。 HISTSIZE のデフォルト値は 500 ですが、10000 などのより便利な値に設定することもできます。シェルを終了すると、最近実行されたコマンドが HISTFILE 変数で指定されたファイルに保存されます (デフォルトはホーム ディレクトリの .bash_history です)。この投稿では、Linux で特定のユーザーのコマンド履歴を保存する手順の概要を説明します。
1. 新しいグループ モニターを作成します。監視する必要があるユーザーをセカンダリ グループとして追加します。
# groupadd monitor # usermod -a -G monitor [user]
例:
# usermod -a -G monitor opc # id opc uid=1000(opc) gid=1000(opc) groups=1000(opc),1002(admins),1003(monitor)
2. シェル履歴が保存されるディレクトリ /var/log/shelllogs を作成します。
# mkdir /var/log/shelllogs # chown root:monitor /var/log/shelllogs # chmod 770 /var/log/shelllogs # chmod +t /var/log/shelllogs
3. /etc/profile.d にスクリプトを作成し、履歴形式を微調整して、ユーザーがログインするたびにエクスポートされるようにします。
# cat /etc/profile.d/history.sh export HISTSIZE=10000 export HISTTIMEFORMAT='%F %T ' export HISTFILE=/var/log/shelllogs/$(who am i | awk '{print $1}';exit)-as-$(whoami)-$(date +%F-%T) export PROMPT_COMMAND='history -a'
4. /etc/bashrc を編集します ファイルの末尾に次の行を追加します。
test "$(ps -ocommand= -p $PPID | awk '{print $1}')" == 'script' || (script -f /var/log/shelllogs/$(who am i | awk '{print $1}';exit)-as-$(whoami)-$(date +%F-%T)_console.log)
別の ssh/putty セッションを介して同じサーバーにログインし、ファイルが作成されていることを確認します。