web-dev-qa-db-ja.com

LinuxマシンにSSHで接続したユーザーを追跡するにはどうすればよいですか?

Ubuntu 10.04を実行しています。ボックスに誰がログオンしたか、何時にログオンしたか、毎日のレポートを取得する方法はありますか?さらに、質問が多すぎる可能性があります-使用したコマンドのレポートを取得できますか?これは使用量の少ないボックスなので、これでどのようなアクティビティが発生しているかを確認するのに最適な方法だと思います。

これらと同じように、rsyncやsshを介してリモートで単一のコマンドを実行するなど、非インタラクティブシェルを介してボックス上で何が行われたかを追跡することは不可能だと聞きました。それは本当ですか、それともこれをログに記録して追跡する方法はありますか?

23
cwd

ログインしたユーザーの情報は、/var/log/auth.log(または他のディストリビューションの他のログファイル)にあります。必要に応じて構成した情報を抽出できる複数のログ監視プログラムがあります。正常なシステムでは、すべてのユーザー認証がログに記録されます。

すべてのコマンドの呼び出しを記録するには(引数は除く)、 process accounting を使用します( acctパッケージInstall acct Ubuntuで。アカウンティングサブシステムが稼働中の場合、 lastcomm は終了したプロセスに関する情報を表示します。

whoまたはwを使用して、SSHユーザーを含め、現在システムにログインしているユーザーを確認することもできます。

10
Tim

いくつかのrsylogを実行するようにbashシェルを変更することもできます。

事実上、特定の接続を受け入れるようにリモートホストでrsyslogを設定します。次に、監視するホストシェルを変更します。次の機能が有効になっているバージョンを使用してバージョンをコンパイルします。

vi config-top.h
#define SYSLOG_HISTORY
#if defined (SYSLOG_HISTORY)
#  define SYSLOG_FACILITY LOG_USER
#  define SYSLOG_LEVEL LOG_INFO
#endif

これを有効にしてコンパイルしたら、bashをこのバージョンに置き換えることができますORログインをリダイレクトすることで、ユーザーにログインさせることができます。

詳細:

https://www.pacificsimplicity.ca/blog/remote-logging-using-syslog-and-logging-Shell-commands-remotely

0
mcdoomington

通常、誰かがユーザーシステムにログインすると、/ var/log/messagesに次のように出力されます。

sshd[18468]: Accepted keyboard-interactive/pam for root from 134.64.66.666 port 49867 ssh2

したがって、メッセージを次のようにgrepします。

grep -E "Accepted keyboard-interactive/pam for" /var/log/messages
0
RKum