4

最近bind()、ポートを1024未満にするために、アプリをより高い特権レベルに昇格させる必要があることがわかりました。

私はそれをで実行してきましたがsudo、これは内部テストには問題ありませんが、rootとして実行してデプロイすることは一般的に非常に悪い考えです。

setuid rootについて聞いたことがありますがlighthttpd、たとえばソースコードを見ると、次のように表示されます。

#ifdef HAVE_GETUID
    if (!i_am_root && issetugid()) {
        /* we are setuid-root */

        log_error_write(srv, __FILE__, __LINE__, "s",
                "Are you nuts ? Don't apply a SUID bit to this binary");

        server_free(srv);
        return -1;
    }
#endif

それでは、特権ポートへのバインドを許可するために一般的に受け入れられている方法は何ですか?バインドには、より高い特権のみが必要です。その後、通常のユーザーとして実行できます。

これらは私が聞いたことがあるものですが、ほとんどのソフトウェアが使用しているものではないようです。そのため、私はこの質問をしています。

  • setuid-root
  • setcap
4

1 に答える 1

2

CAP_NET_BIND_SERVICE capabilityをバイナリに割り当てるか、 as を実行しrootてポートを取得し、すぐに権限を削除できます。

于 2013-02-19T04:08:43.263 に答える