ルート以外のIDを使用してWebサーバーを起動します。システムユニットファイル。
listen tcp :80: bind: permission denied
逃げたがまだ残ってる
setcap cap_net_bind_service=+ep
実行可能ファイルに。
私が見つけたインターネットのサンプル単位ファイルから
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
ユニットファイルに使用されます。それで試してみましたが、突然アプリケーションはポート80をバインドできました。
これが私に何を教えてくれますか?setcap
廃止、廃止、無視されますか?通じるだけシステムそれとも通常はLinuxのみを使用しますか?
答え1
正しい言葉は通常、systemdが管理するファイル機能を使用しませんが、setcap
それをサービスユニットの一部として構成する必要があることです。
したがって、完全には使用されていませんsetcap
...(システム起動サービスの外部で有効な用途に使用できます).しかし、少なくともシステムサービスには適用されません.
実際、ファイル機能(設定によるsetcap
)は常に最初から疑わしかったです。 「継承可能」機能を使用する必要がありますが、これは多少誤って考えられ、多くの欠点があります...「環境」機能のカーネルは次のとおりです。これらの多くの問題を解決するために導入されており、新しいシステムが採用しているのです(ここにはAmbientCapabilities=
低ポートにバインドできるようにサービスを設定していることが分かるようにsystemdを含む)。
関数のトピックは非常に複雑です...問題の詳細な紹介については、確認したい場合があります。「受け継がれた能力」LWNから。関数セットのいくつかの代数表記を含む詳細については、次を参照してください。能力(7)マンページ。