Linuxでsshを使用して特定のコマンドを実行したIPを知るには


10

sshを使用して多くのユーザーがアクセスするサーバーがあります。特定のコマンドを実行したユーザーを特定しようとしています。

を使用して現在サーバーにアクセスしているユーザーのリストを確認できます。who また、を使用して実行されたコマンドのリストも確認できますhistory

しかしcp file1.sh file2.sh、サーバーのようにコマンドを実行したユーザーを知る方法は?ユーザーはすでにコマンドを実行してログアウトしています

回答:


4

接続する新しいユーザーごとにsshd、特定のPIDを持つ新しいセッションが生成されます。を使用pstreeして、どのコマンドがどのsshdセッションから継承されるかを出力し、このPIDをでクロスチェックでき/var/log/auth.logます。

例(匿名化):同じリモートユーザーを使用して、3つの同時セッションでリモートサーバーにログインしました。次に、クライアントがコマンドを実行したIPを確認しますwatch date

$ pstree -p | grep watch
        |           |-sshd(15243)---sshd(15342)---bash(15343)---watch(15450)
$ sudo grep 15243 /var/log/auth.log
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: Accepted publickey for XXXXXXXXXX from 12.34.56.78 port 48218 ssh2
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: pam_unix(sshd:session): session opened for user XXXXXXXXXX by (uid=0)
Mar  7 15:37:44 XXXXXXXXXX sudo: XXXXXXXXXX : TTY=pts/7 ; PWD=/home/XXXXXXXXXX ; USER=root ; COMMAND=/bin/grep 15243 /var/log/auth.log

pstree -pは、watchコマンドがsshdPID 15243で継承さgrep/var/auth/auth.logていることを示しています。このPIDをに入力すると、このセッションを開始したのはIP 12.34.56.78でした。したがって、これは開始したユーザーでもありますwatch

history特にこのユーザーの検索については、すべてのリモートユーザーが同じローカルSSHユーザーを使用しているときに、私が見ることができるものから行うことはできません。また、なりすましや無効化なども簡単に行えるため、信頼性はそれほど高くありません。履歴ファイルに保存されている場合は、cpコマンドを探してファイルを逆にたどることができますが、そこにない場合は、何もする必要はありません。


それはこのエラーを言いますgrep: /var/log/auth.log: No such file or directory:-(
Manu K Mohan

@ManuKMohan:自分がどのシステムを使用しているのかをまだ述べていません。RHEL / Fedora / Scientific Linux / etc。では、関連ファイルは/var/log/secureです。
Daniel Andersson 2013年

アンダーソン私はUbuntuを使用しています
Manu K Mohan

@ManuKMohan:/var/log/auth.log.1などが存在する場合は、それらに情報が含まれているかどうかを確認してください。その後、rsyslogsudo service rsyslog restart)を再起動しauth.log、それがすでに生成されているはずのが生成され始めるかどうかを確認します。SSHDは/var/log/auth.logデフォルトでUbuntuにログを記録するため、/etc/ssh/ssd_configまたはを介してロギングターゲットを明示的に変更していない限り/etc/syslog.confauthここでレベルが記録されているファイルを確認できます)、そこにあるはずです。そうでない場合:何かがアップしています:-)。
Daniel Andersson

1

この2行を/ etc / profileまたは/ etc / bashrcに追加して、bashによって実行されたすべてのコマンドをログに記録できます。

whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"                                                                                                  
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local3.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

これは、syslogを使用して、実行したすべてのコマンドと実行したユーザーおよびそのIPアドレスを次のような形式で記録します。

Jan  8 08:43:49 xpto local3.debug root: root@192.168.x.y [29385]: ls -al [0]

さらに、以下の行をsyslog構成(/etc/syslog.conf)に追加して、local3メッセージを特定のファイルにリダイレクトできます。

local3.*                                                /var/log/prompt.log

現在はsyslog-ng改善されており、設定ファイルは/etc/syslog-ng/syslog-ng.conf です。
ティモ

1

これにはスヌーピーを使用できます。

ログメッセージ形式の定義でIP =%{env:SSH_CLIENT}を指定して、カスタム環境変数(SSH_CLIENT)をログに記録するように構成する必要があります(./configureフラグまたは2.xバージョン以降のsnoopy.iniで構成可能)。

開示:スヌーピーのメンテナはこちら。


0

もしbashを使っていると仮定すると、history唯一のあなたに表示されますYOURコマンドライン履歴を。デフォルトで~/.bash_historyは、履歴を読み取ります。これは(ほとんどありませんが)のように変更することができますHISTFILE=/home/userFoo/.my_alt_history

あなたがボックスのルートであると仮定すると、ユーザーのすべてのディレクトリをスキャンし、その履歴を読んで、誰がそのコマンドを実行しているかを確認できます。


ああ、そしてもし彼らが悪意を持っているなら、彼らは彼らの歴史からこの命令を簡単に一掃することができるでしょう。コマンドを実行しているボックスでアクティブになっている場合は、ps -aux | grep "cp file1.sh file2.sh"

すべてのユーザーは、sshを使用してサーバーの同じユーザー名にリモートでアクセスしています。このユーザーにアクセスしてコマンドを実行したIPを知りたい。
Manu K Mohan 2013年

多くのユーザーがユーザー名とパスワードを共有することは良い方針ではありません。
pjc50 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.