C プログラムでは、対処しRLIMIT_NPROC
、RLIMIT_NOFILE
制限し、さらに 1024 未満のポートにバインドする必要があります。私のプログラムには 2 つの機能しか必要ないため、非特権ユーザーでこれを実行することを考えています。
ここで、プロセスの機能を設定し、setuid()
. ここで、機能のセット リストを保持するプロセスを root 権限なしで fork すると、プログラムは最小限の権限で実行され続けます。私の計画の非常に大まかな概要:
int main()
{
int nproc,nfds,port;
/*
* set capabilities to the process
* then drop priviales
*/
setuid(getuid()); //Drop privilages to real user id
fork() //Now create a child apparantly which will be having parents set capabilties
/*Now do tasks to which the whole is being played*/
set_nproclimit(nproc);
set_nofilelimit(nfds);
do_bind_to_port(port);
return 0;
}
ここでは、syscall を使用して機能を設定することができません。そのような機能のアイデアは大きな助けになります。
setcap
PS: コマンド ユーティリティを使用してキャップを割り当てることもできcap_set_file()
ますが、バイナリのパスについて毎回確信があるわけではないため、別の方法でこれを行いたいと考えています。
プロセスとサブプロセスのステータスを確認するためのいくつかの便利な proc コマンドcat /proc/<PID>/task/<PID>/status
、cat /proc/<PID>/limits