FirefoxをサンドボックスにするためにFirejailを使用しています。使用すると、lsof -i
接続は表示されません。 Firejailはプロセスの名前空間分離を実行するので、これを行います。
ps aux | grep firefox | awk ' { print $2} ' | while read p ; do nsenter -t $p lsof -i ; done
各名前空間を入力してlsof -iを使用します。私もnsenter -t <pid> -n lsof -i
試してみましたが、何も表示されません。しかし、rootとして実行すると機能します。ユーザーが開いたソケット接続をリストできないようにする必要がありますか?
答え1
このps | grep | awk
パイプは古くて醜いです。非常に古代の)。
さて、grep
自分のpidと一致します。だから、ほとんどの亜種はgrepのpidを除外するためにいくつかのトリックを使用します。一般的にps aux | grep command | grep -v grep
。最良の方法の1つは、正規表現と一緒に角括弧式にgrepを使用することです。より良いバージョンは、パイピング入力が正規表現パターンマッチングを実行し、次のように終了する可能性があるため、ほとんど常に重複してgrep
無意味awk
であり、不要または不要であることを認識しています。awk
ps aux | awk '/[c]ommand/ {print $2}'
とにかく恐ろしいゴミを使用しないでください。 90年代に死ぬ予定でしたが、ゾンビの死体が引き続き復活したり再創造されています。
代わりに、(タイトルなし)、(cmdlist一致)、および(出力形式)オプションでpgrep
ORを使用してください。これが彼らの目的です。ps
h
-C
-o
例えば
pgrep -f firefox | xargs -I {} nsenter -n -t {} lsof -i
または
ps h -C firefox -o pid | xargs -I {} nsenter -n -t {} lsof -i
または以下なしxargs
:
for pid in $(pgrep -f firefox) ; do
nsenter -n -t "$pid" lsof -i
done
これは完璧とは離れていますが、現在行っている作業よりはるかに優れた出発点になります。
しかし、pgrep
名前空間のすべてのPIDを一覧表示することは可能です。lsns
名前空間に関するさまざまな詳細を調べて抽出する機能もあります。ps
PIDに関連するさまざまな名前空間を一覧表示するオプションもあります。おそらく、これらすべてのマニュアルページを読む必要があります...特に、lsof
システムのlsofおよび/または/usr/bin/の独自のバイナリやマッピングがない名前空間でネットワークに接続されているディレクトリを一覧表示したい場合は、そうです。
残念ながら、lsof
独自に組み込まれた名前空間のサポートはないようです。おそらく今後のバージョンでは可能でしょう。
答え2
Firefoxは、実行および生成されたFirefoxプロセス用に別のサンドボックスを作成することがわかりました。したがって、ユーザーがコマンドラインでfirefoxを使用してfirejailを起動すると、現在のユーザーのlsnsが表示されます。
ただし、同じコマンドラインですべてのFirefoxプロセスに対してgrepを実行し、net名前空間を入力するとlsof -i
失敗します。
nsenter: cannot open /proc/8958/ns/net: Permission denied
ルートとして、lsnsはfirefoxプロセスと各名前空間の関連pidを表示します。すべての名前空間を入力すると、lsof -i
特定のPIDに対するFirefoxソケットの出力が表示されます。
ls
pid uidがユーザーで、生成されたlsof -i出力が/ proc / pidの場合、ファイルはすべてユーザーではなくルートが所有しているため、lsof -i
すべてのfirefoxプロセスでユーザーとして実行すると機能しません。
これが予想される動作かどうかは言い難いので、どんな意見でもいただければ幸いです。