web-dev-qa-db-ja.com

`lsof`を使用して、開いているポートに接続されているローカルプロセスを確実に判断できますか?

127.0.0.1:7646でサーバーアプリケーションを実行していて、ローカルプロセス(別のユーザーが所有している可能性があります)がそれに接続するとします。

lsof -Fp -i [email protected]:7646 -i [email protected]:<ClientPort>

のようなものを出力します

p6429
f4
p6433
f5

ここで、p*は、両方の参加者/エンドポイントのPIDです。

今私の質問です:lsofの出力を信頼できますか(誰もlsof- binaryを変更していない場合)?または別の言い方をすると、root権限のない誰かがlsofs出力を操作して別のPIDを表示できますか?

編集:これがプラットフォームに依存している場合、私は特にmacOS、Linux、FreeBSDに興味があります。

5
K. Biermann

Lsofを実行しているユーザーを信頼し、フルパス(/ usr/bin/lsof?)を指定すると、出力を信頼できるはずです。サーバーに接続しているユーザーとしてlsofを実行することを目的としている場合、パス内のlsofが実行されたり、エイリアスが最初に呼び出しをキャッチしたりするのを防ぐのは非常に困難です。 「netstat -A inet -A inet6 -alp」も参照してください

本当に偏執的である場合は、パッケージマネージャーデータベース(rpm、dpkgなど)をチェックして、インストール後にバイナリが変更されていないことを確認してから(フルパスで)呼び出してください。

1