Debian ボックスがある場合、一部のユーザーは root アカウントにアクセスでき、一部のユーザーは SSH 接続を開いてコマンドの実行を開始し、一部は画面を開くか、byobu などのツールを使用してコマンドを実行します。
"history"コマンドは、実行されたコマンドの完全なリストを取得できないようです。
実行されたすべてのコマンドを取得する最良の方法は何ですか?
答え1
ハッキングですが、少なくとも動作します。root
そのサーバーには以下が必要です。
出力を見ると、ps aux
ユーザーのフォークが表示されますsshd
。たとえば、この場合、userは次のようになります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
とを指します。ユーザーのシェルは彼が入力したすべてのコマンドとそのコマンドの出力を印刷するので、私はfd番号のシステムコールを使用してフィルタリングして彼のコマンドを観察します(2番目のリンクも同じです)。stdin
stdout
stderr
stdout
strace
read
11
11
/dev/ptmx
sudo strace -e read -s 256 -p 19325 2>&1 | grep 'read(11'
ユーザーが次のコマンドを入力したことを確認できますls
。
read(11, "l", 16384) = 1
read(11, "s", 16384) = 1
さて、出力は良くありませんが…動作します
答え2
最良の方法は auditd を使用することです。特定のユーザーが実行したすべてのコマンド、すべてのユーザーが実行したすべてのコマンド、特定のコマンドの呼び出しなどを記録するように設定できます。
マニュアルページでは、auditctl
必要なルールの例をいくつか示します。また、他のrootユーザーを信頼できない場合は、他のユーザーがアクセスできない別のサーバーにログインすることをお勧めします。
また、root パスワードを提供せず、root で SSH ログインを許可しないことをお勧めします。代わりに、ログインしたユーザーにのみ自分のアカウントを許可し、rootとして作成してくださいsudo su
。 auditdは、どのユーザーが何をしたのかを追跡することもできます。