web-dev-qa-db-ja.com

すべてのセッション/画面/ byobu端末で、現在のユーザーが実行したすべてのコマンドを確認するにはどうすればよいですか?

Debianボックスがある場合、一部のユーザーはrootアカウントにアクセスでき、一部のユーザーはssh接続を開いてコマンドの実行を開始します。一部の画面は、コマンドを実行するための画面またはbyobuまたは他の同様のツールを開きます。

コマンド「history」は、実行されたコマンドの完全なリストを取得していないようです。

実行されたすべてのコマンドを取得するための最良の方法は何ですか?

3
sharp12345

これは一種のハックですが、少なくとも機能します。そのサーバーにrootが必要です。

ps auxの出力を見ると、たとえばこの場合のユーザーsshdのように、ユーザーのmstのフォークが表示されます。

$ ps aux | grep ssh
mst      19325  0.0  0.0  76268  1920 ?        S    21:20   0:00 sshd: mst@pts/6

したがって、このプロセスのファイル記述子を次のように確認します。

$ Sudo ls -lha /proc/19325/fd
total 0
dr-x------ 2 root root   0 Aug 30 21:26 .
dr-xr-xr-x 7 mst  users  0 Aug 30 21:25 ..
lrwx------ 1 root root  64 Aug 30 21:26 0 -> /dev/null
lrwx------ 1 root root  64 Aug 30 21:26 1 -> /dev/null
lrwx------ 1 root root  64 Aug 30 21:26 11 -> /dev/ptmx
lrwx------ 1 root root  64 Aug 30 21:26 12 -> /dev/ptmx
lrwx------ 1 root root  64 Aug 30 21:26 2 -> /dev/null
lrwx------ 1 root root  64 Aug 30 21:26 3 -> socket:[138972]
lrwx------ 1 root root  64 Aug 30 21:26 4 -> socket:[138198]
lrwx------ 1 root root  64 Aug 30 21:26 5 -> socket:[138200]
lrwx------ 1 root root  64 Aug 30 21:26 6 -> socket:[138207]
lr-x------ 1 root root  64 Aug 30 21:26 7 -> pipe:[138212]
l-wx------ 1 root root  64 Aug 30 21:26 8 -> pipe:[138212]
lrwx------ 1 root root  64 Aug 30 21:26 9 -> /dev/ptmx

これらのリンクのうち3つは/dev/ptmxを指しており、これらはstdinstdout、およびstderrです。ユーザーのシェルは、ユーザーが入力したすべてのコマンドとこれらのコマンドの出力を出力しているので、stdoutを使用してstraceシステムコールをフィルタリングすることにより、ユーザーのreadを監視します。 fd番号1111/dev/ptmxへの2番目のリンクであるため)。

Sudo strace -e read -s 256 -p 19325 2>&1 | grep 'read(11'

そして、ユーザーがlsコマンドを入力していることがわかります。

read(11, "l", 16384)                    = 1
read(11, "s", 16384)                    = 1

OK、出力はきれいではありません...しかし動作します

4
replay

最良の方法はauditdを使用することです。特定のユーザーが発行したすべてのコマンド、すべてのユーザーが発行したすべてのコマンド、または特定のコマンドの呼び出しなどをログに記録するように設定できます。

auditctlのmanページには、必要なルールの例がいくつか示されています。さらに、他のrootユーザーを信頼しない場合は、他のユーザーがアクセスできない別のサーバーにログインすることをお勧めします。

また、rootパスワードを提供せず、rootとしてsshログインを許可しないことをお勧めします。代わりに、ユーザー自身のアカウントへのログインのみを許可し、Sudo suルートになります。これにより、auditdがどのユーザーが何をしたかを追跡できるようになります。

3
Jenny D