クエリプロセスをrootとして実行せずに/proc/pid/ns/netにアクセスしますか?

クエリプロセスをrootとして実行せずに/proc/pid/ns/netにアクセスしますか?

プログラムは(記号)/proc/pid/リンクを検索してネットワークネームスペースを列挙しますns/net。プログラムは、ホスト自体の「ルート」ネームスペース(元の初期化)内で実行されます。通常、スキャナー部分をルートとして実行する必要があります。そうしないと、/proc/pid/他のプロセス情報へのアクセスが制限されます。可能であれば、スキャナをrootとして実行するのを避け、権限を削除する手間も避けたいと思います。

/proc/pid/root以外のユーザーがスキャナを実行し、ツリー全体を見てネットワークの名前空間リンクを読むことができるように、スキャナにどのLinux機能を設定する必要がありますか?

答え1

何度か試行錯誤の最後に、CAP_SYS_PTRACEそれが実際に必要であることがわかりました。

代わりに、同様の操作を含む必要なアクセス権は提供CAP_DAC_READ_SEARCHされません。CAP_DAC_OVERRIDEreadlink()

私が見たことは相互に確認することができます:まず、ptrace.c必要な手がかりが提供されます__ptrace_may_access()

/* May we inspect the given task?
 * This check is used both for attaching with ptrace
 * and for allowing access to sensitive information in /proc.
 *
 * ptrace_attach denies several cases that /proc allows
 * because setting up the necessary parent/child relationship
 * or halting the specified task is impossible.
 */

第二に、次のnsfs関連の機能があります。proc_ns_readlink()(間接)呼び出し__ptrace_may_access()

ついに、プライベート7ネームスペース話す:

このサブディレクトリのシンボリックリンクは次のとおりです。[...]逆参照または読み取り(readlink(2))これらのシンボリックリンクに対する権限は、ptraceアクセスモードPTRACE_MODE_READ_FSCREDSチェックによって制御されます。 ptrace(2) を参照してください。

答え2

正確に言えば、ネットワーク名前空間を入力するにはCAP_SYS_PTRACEとCAP_SYS_ADMINが必要です。例は次のとおりです。

# docker run -it --rm --pid host --cap-add CAP_SYS_PTRACE --cap-add CAP_SYS_ADMIN debian:bullseye-slim bash
root@8b40f2f48808:/# nsenter --net=/proc/1/ns/net bash

また、見ることができますこの回答

関連情報