ローカルシステムでのリモートsshfsインストールの検出

ローカルシステムでのリモートsshfsインストールの検出

私はこの質問をもう一度受けたいと思います。これ郵便はがき。

ユーザー離れてクライアントマウントディレクトリ地元のサーバーは彼のファイルシステムで見ることができますが、またはを通してsshfsサーバーから見ることはできません。リンクされた質問には、次のサーバーに対する解決策が提案されています。wholast

ps aux | grep -i sftp | grep -v grep

しかし、多くの情報を提供するわけではありません。ユーザー名とSFTP接続の存在のみを提供します。選択した回答へのコメントのように尋ねたかったです。仕える人):

1)より簡潔で専用のコマンドはありますか?

2) より多くの情報を得る方法はありますか? (サーバーから)知りたい:操作を実行したユーザー名、リモートクライアントのホスト名またはIPアドレス、サーバーのインストールディレクトリ、およびインストールが開始された時刻。

これはサーバーがUbuntu 14.04を実行していると仮定していますが、すべての* nixシステムでこれらのコマンドを使用できる場合は良いでしょう。

答え1

サーバ側は、クライアントが SSHFS を介してアクセスする SFTP セッションと、クライアントが他のクライアントソフトウェアを介してアクセスする SFTP セッションを区別することはできません。しかし、SFTPセッションに関するより多くの情報を確実に得ることができます。

各SFTPセッションには関連付けられたsftp-serverプロセスがあります。 Linuxでは、実行中のプロセスIDをsftp-server使用または一覧表示できます。または、次のPOSIX互換コマンドを使用できます(必要に応じてパスを調整する)。pgrep -x sftp-serverps -C sftp-serversftp-server

ps -e -o pid,cmd | sed -n 's!^\([0-9]*\) /usr/lib/openssh/sftp-server$!\1!p'

このプロセスは、SFTPへのログインに使用されるユーザーアカウントで実行されます。 SFTP セッションの開始時に開始されます。

ps -e -o pid,user,etime,cmd |
awk '$4 == "/usr/lib/openssh/sftp-server" {print "pid=" $1, "user=" $2, $3 " ago"}'

POSIXの開始時刻の表示は面倒です。日付ではなく、プロセスが開始されてから経過した時間がわかります。ほとんどのシステムにはより便利な機能があります。 Linuxではより多くのフォーマットを使用できますが、実際には便利なフォーマットはありません。日付はフィールド22から取得されますが、/proc/$pid/stat面倒です。古い(<2.6)カーネルを除いて、クロックサイクル(除算またはgetconf CLK_TCK返された値sysconf(_SC_CLK_TCK))の開始日です。 jiffies(値を見つけるのが難しい)安定して出力されます。 )開始時間は、開始後に秒単位で表示される行btimeの値です。/proc/stat連帯(あなたが望むかもしれません人間が読める形式に変換)。

cat /proc/$pid/stat | awk '
    BEGIN {
        "getconf CLK_TCK" | getline ticks;
        while (!btime) {
            getline <"/proc/stat";
            if ($1 == "btime") btime = $2;
        }
    }
    { print "pid=" $1, "start_time=" int($22 / ticks + btime) }'

SSH_CLIENTプロセス環境の変数を見ると、クライアントのIPアドレスとポートを見つけることができます。ほとんどのUnixバリアントにはこれを行う方法がありますが、POSIXはまだそれを標準化していません。 Linuxでは、次のものを使用できます。

</proc/$pid/environ grep -z '^SSH_CLIENT='

インストールがどのディレクトリにあるのかわからないと思います。 SSHFS クライアントは、アクセスする各ファイルに関する情報を送信します。

これらすべてのデータを収集できるプログラムはありませんが、頻繁に実行するわけではないので、おそらく私が知らないプログラムがあります。

答え2

 ~ % mount -l -t fuse.sshfs
i@somewhere:/mnt/x on /mnt/x type fuse.sshfs (ro,nosuid,nodev,relatime,user_id=1000,group_id=100)
~ % mount --version
mount from util-linux 2.36.2 (libmount 2.36.2: btrfs, namespaces, assert, debug)

おそらくmount -l -t fuse.sshfsそれはあなたに必要なものかもしれません。

関連情報