3

機能のマンページはかなり長く、いくつかのことを完全には理解していません。

たとえば、CAP_NET_RAW にアクセスできるかどうかを決定する関数はどのように見えるでしょうか?

入力:

  • a = 実効 uid は 0
  • b = 0 であるいくつかの実際の/保存された/任意の uid があります
  • c = CAP_NET_RAW は +e
  • d = CAP_NET_RAW は +i
  • e = CAP_NET_RAW は +p
  • f = CAP_NET_RAW は「境界セット」から除外されます

出力:

  • x = socketEPERM を取得せずに呼び出すことができるようになりました
  • y = いくつかのトリッキー (ファイルシステムベースchmod +sまたはsetcapアクセス昇格、外部ヘルパーへの接続を含まない) の後、たとえば、capsetp最終的に raw ソケットを開くことができるようになります。

私が現在理解しているように、それは次のようなものです:

  • x = !f && (a || c)
  • y = !f && (b || a || c || e)

実際にはどうですか?

4

1 に答える 1

0

ドキュメントをもう少し読んでください、今はこれのようです:

x = c
can_regain_caps_without_execve = (a || b) && !NO_NEW_PRIVS && (!SECBIT_NO_SETUID_FIXUP || ( CAP_SETPCAP && !SECBIT_NO_SETUID_FIXUP_LOCKED))
y = c || e || can_regain_caps_without_execve

つまり

  • ゼロ/非ゼロのuidは、それが変更され、「ルートハック」がアクティブな場合にのみ意味があります。
  • チェックには効果的な機能のみが使用されます。他のすべては機能管理です。
  • 境界セットと継承された機能は、execve=>この回答の範囲外です。
于 2013-02-01T19:01:05.680 に答える