root 以外のユーザーがポート 80 および 443 で Web サーバーを起動できるようにした場合、セキュリティへの影響がわかります。
root以外のユーザーがUbuntu 16とCentOS 7のポート80と443でWebサーバーを呼び出すことができるように、権限の確認を削除したいと思います。
コンピュータにrootアクセス権がありますが、NFS特権の問題を解決するには、別のユーザー名でWebサーバーを実行する必要があります。この代替ユーザー名にはrootアクセス権がありません。
これまで私は以下を見てきました:
setcap cap_net_bind_service=ep /path/to/the/executable
(実行ファイルはリモートで再コンパイルされ、NFSに保存されるため固定されません。)- パスワードのないユーザーをアクティブ
sudoers
にするようにファイルを編集します(まだNFSアクセスに問題があります)。sudo
root
理想的にはsetcapのようなものが欲しいが、ポート、実行可能ファイルの代わりに権限チェックを完全に放棄します。
authbind
有望に見えるけどうまくいかないようですGoLang Webサーバーの使用
Ubuntu 16は古すぎて、権限のないポート起動範囲の変更を許可しません。
> sudo sysctl net.ipv4.ip_unprivileged_port_start=80
sysctl: cannot stat /proc/sys/net/ipv4/ip_unprivileged_port_start: No such file or directory
答え1
setcap
私はこれがあなたの答えになると思います。ここで本当の質問は次のとおりです。 NFSのWebサーバーがタッチされてsetcap
コマンドを実行できる場合、システムはどのように認識しますか?
私の考えでは、建物を建てたいと思います。inotify
またはsystemd.path
このWebサーバーを監視します。そのバイナリが置き換えられたら、それを検出してsetcap
適切なコマンドをトリガーします。この方法は、Webサーバーがすでにsystemdを介して実行されている場合に特に効果的です。
systemd.path
以下は、サーバーがシステムサービスとして実行されていると仮定する例です。webserver.service
# /etc/systemd/system/webcap.path
[Unit]
Description=Watching changes in the webserver binary
# Start monitoring only after the webserver is running.
After=webserver.service
[Path]
# Whenever someone writes to this path (binary is replaced), do something
PathModified=/path/to/webserver
# This is the service you launch when the above condition is met
Unit=webcap.service
[Install]
#Whenever the webserver is started, this monitor will also start
WantedBy=webserver.service
# /etc/systemd/system/webcap.service
[Unit]
Description=Update caps of webserver
[Service]
Type=oneshot
ExecStart=ssetcap cap_net_bind_service=ep /path/to/webserver
答え2
スチュワートが好きですが、回答、パイプライン()に潜在的に中断される可能性がある別の部分を追加するので、最終的にperをsystemd
使用するようになりました。capsh
この回答。再コンパイルする必要がありました。ソースから環境機能機能(生成されたバイナリをとして保存/sbin/capsh2
)を取得するには、これを起動コマンドとして設定できます。
/sbin/capsh2 --keep=1 --user=nonrootuser --inh=cap_net_bind_service --addamb=cap_net_bind_service -- -c /path/to/webserver
このコマンドをrootとして実行すると、Webサーバーが正しく起動し、nonrootuser
「ユーザースペース」のポート80と443にバインドできます。