[解決済み] Linux で非 root プロセスが "特権" ポートにバインドする方法はありますか?
2022-03-22 08:41:24
質問
私以外のユーザーはいないはずなのに、私の開発用ボックスでこのような制限があるのは非常に迷惑なことです。
私が意識しているのは 標準的な回避策 しかし、どれも私が欲しいものを正確に行うことはできません。
- authbind (Debian テスト版である 1.0 は IPv4 のみをサポートしています)
- iptablesのREDIRECTターゲットを使って、ローポートをハイポートにリダイレクトします。 (IPv6版ip6tablesでは、quot;nat;テーブルはまだ実装されていません)
- sudo (rootで実行するのは避けたい)
- SELinux(またはそれに類するもの)。(これは私の開発用ボックスなので、余計な複雑さを持ち込みたくありません)。
何か簡単な
sysctl
変数を使って、Linux で非 root プロセスが "privileged" ポート (1024 未満のポート) にバインドできるようにすることはできますか?
EDIT: 場合によっては 能力を使う を実行します。
解決方法は?
なるほど、能力系を指摘してくれた人たちのおかげで
CAP_NET_BIND_SERVICE
ケーパビリティがあります。最近のカーネルであれば、これを利用して、非 root でサービスを起動しつつ、低いポートをバインドすることは、確かに可能です。簡単に言うと、「できる」ということです。
setcap 'cap_net_bind_service=+ep' /path/to/program
そして、いつでも
program
が実行されると、それ以降は
CAP_NET_BIND_SERVICE
能力を持つ。
setcap
は、debian パッケージに含まれる
libcap2-bin
.
では、注意点です。
- 最低でも2.6.24のカーネルが必要です
- ファイルがスクリプトの場合、この方法は使えません。(つまり、インタプリタを起動するために #! 行を使用する場合)。この場合、私が理解する限り、インタープリタの実行ファイル自体に能力を適用しなければならず、もちろん、そのインタープリタを使用するすべてのプログラムが能力を持つので、セキュリティ上の悪夢となります。この問題を回避する簡単な方法は見つかりませんでした。
-
Linux は、すべての
program
のような昇格した特権を持つsetcap
またはsuid
. ですから、もしprogram
は、独自の.../lib/
ポートフォワーディングのような別のオプションを検討する必要があるかもしれません。
リソース
- capabilities(7) のマニュアルページ . 実運用環境でcapabilitiesを使うなら、これをじっくり読んでください。exec() 呼び出し間でどのように能力が継承されるかについて、実に厄介な詳細がここに書かれています。
- セットキャップマニュアルページ
-
GNU/Linuxでrootを使わずに1024以下のポートをバインドする"。
: 最初に指摘された文書
setcap
.
関連
-
centos7 インストール クリックハウスとセット ユーザー名 パスワード ケース 詳細
-
Manjaro linuxでマウスの速度を設定する方法は?Manjaroのマウスのカーソル速度を設定する方法に関するヒント
-
Linux 5.10.10 正式版リリース:NULLポインタの不具合修正など。
-
Linux MintのデスクトップでNoteをイタリックにすることは可能ですか?
-
TclError: 表示名がなく、$DISPLAY環境変数もない。
-
makeの低レベルエラー:セパレータストップがない
-
Process.waitFor()の戻り値の意味するところ
-
[解決済み] mkdirのオプションが明確でない
-
[解決済み] POSIX」の意味を教えてください。
-
[解決済み] 特定のファイル/フォルダを除外してディレクトリをtarするシェルコマンド
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Linux NICがRTNETLINK answersというエラーで起動できない場合、どうすればよいですか?ファイルが存在するか?
-
Kali Linuxのデフォルトのひげメニューアイコンを変更する方法は?
-
deepin20を使って、ドローイングボードで画像を開くには?deepinのお絵かき掲示板で画像を開く2つの方法
-
Deepin20システムのフォントを設定するには?Deepin端末のフォントサイズを設定する方法
-
TclError: 表示名がなく、$DISPLAY環境変数もない。
-
リクエスト・エンティティが大きすぎる問題の解決策
-
[解決済み] bash sh - command not found [重複].
-
[解決済み] Linuxで特定のテキストを含むすべてのファイルを検索するにはどうすればよいですか?
-
[解決済み] ワイルドカードマッチングに基づいて、現在のフォルダとサブフォルダ内のすべてのファイルを再帰的に検索するにはどうすればよいですか?
-
[解決済み] Linuxのディレクトリ内のファイルを再帰的にカウントする