解決策 1:
ログインを担当する pam 構成 (redhat ベースのディストリビューションでは system-auth) にこの行を追加します
session required pam_tty_audit.so enable=*
何が行われたかを調べるには、
を使用できます。ausearch -ts <some_timestamp> -m tty -i
これにより、次のような出力が生成されます:
type=TTY msg=audit(11/30/2011 15:38:39.178:12763684) : tty pid=32377 uid=root
auid=matthew major=136 minor=2 comm=bash data=<up>,<ret>
これの唯一の欠点は、少し読みにくいことですが、理論的にはセッション全体を記録するために使用できるため、ほとんどの提案されたソリューションよりもはるかに優れています.
編集:ああ、aureport を使用して、より役立つリストを生成できます。
# aureport --tty
...
12. 11/30/2011 15:50:54 12764042 501 ? 4294967295 bash "d",<^D>
13. 11/30/2011 15:52:30 12764112 501 ? 4294967295 bash "aureport --ty",<ret>
14. 11/30/2011 15:52:31 12764114 501 ? 4294967295 bash <up>,<left>,<left>,"t",<ret>
解決策 2:
あなたの問題に対する最善の解決策は、Linux に組み込まれている監査システムです。 man 8 auditd
を使用 または、このページで詳細を確認してください:http://linux.die.net/man/8/auditd.
また、このチュートリアルを確認することもできます - 質問の範囲から少し外れていますが、監査システムがどのように機能するかを示しています。
解決策 3:
スヌーピーを使うことができます。
これは単純なコマンド ログ ライブラリであり、適切な監査ソリューションではありません (簡単に回避されます)。開示:私は現在スヌーピーのメンテナーです。
解決策 4:
あまり知られていないトリックですが、最も素晴らしいのは、sudo
の組み込みの監査機能を使用することです。 . Sudo は sudoreplay
で出荷されます セッションの再生を簡単にするコマンド。 vim
も中継します セッション(あなたが提案するように)。
いくつかの簡単な手順で使用する方法は次のとおりです:
<オール>sudosh
をインストール システム上で;これは sudo
のシェルラッパーです ユーザーを sudo
にするコマンド 自分自身 (root
ではありません) ) であり、システム ログイン シェルとして使用できます
sudo
を有効にする ロギング。 /etc/sudoers.d/sudosh
を編集 :
Defaults log_output
Defaults!/usr/bin/sudoreplay !log_output
Defaults!/sbin/reboot !log_output
このコマンドを /etc/shells
に追加します それを使用してログインを許可するには:
/usr/bin/sudosh
ヒント :ユーザーが他のシェルを使用してログインできないようにするには、それらの他のシェルを /etc/shells
から削除します .
ユーザー foobar
を更新します sudosh
を使用するには shell.
chsh -s /usr/bin/sudosh foobar
詳細については、https://github.com/cloudposse/sudosh/ を参照してください。