Solarisでは、ユーザーに権限を割り当てることができると思います。
Linuxでは、実行可能ファイルに機能を割り当てることはできますが、ユーザーにも機能を割り当てることはできますか?
答え1
はい。Linuxでは、root以外のユーザーとして実行されているプロセスに追加機能を提供できます。これはping
、これらのユーザーがsetuid以外のバイナリを実行したり、特権ポート(< 1024)にバインドされたサーバーを実行したりするのに役立ちます。
多くの場合、あなたは必要です環境能力この機能が正常に機能するにはサポートが必要なため、root以外のユーザーに機能を有効にするために必要なすべての機能のロックを解除するには、最新のカーネルとライブラリを使用する必要があります。
(継承可能な関数を使用することもできますが、これを行うには、一致するファイル関数で実行するバイナリを表示する必要がありますsetcap
。)
使用例カプス(1)root以外のユーザーとしてsetuid以外のpingを実行する方法は次のとおりです。
sudo capsh --caps="cap_net_raw+eip cap_setpcap,cap_setuid,cap_setgid+ep" \
--keep=1 --user=nobody --addamb=cap_net_raw -- \
-c "./ping -c1 127.0.0.1"
--addamb
環境機能をサポートするには、capsh および libcap バージョン 2.25 以降 ( の場合) と Linux カーネル 4.3 以降が必要です。バラよりこの問題詳細をご覧ください(上記のコマンドのソース)。
sudo
(ルートのみ機能を追加できるため)上記のコマンドが必要ですが、ping
実行時にユーザーは「nobody」で削除されるため、完全なping
root権限では絶対に実行できず、cap_net_rawのみを実行できます。
この機能が役に立つもう一つの状況は、デーモンを起動する時です。たとえば、ルートで起動する必要なしにポート80でHTTPサーバーを実行し、そのポートにバインドした後にのみ権限を削除します。
systemdから提供機能構成のガイドラインUser=
サービスユニットでは、サービスの設定によって、root 以外のユーザーとしてプロセスを実行することもできます。アドインを持つ root 以外のユーザーでプロセスを実行する場合は、Linux カーネル 4.3 以降を必要とする環境機能サポートが必要になる場合があります。