在C程序中,我必须处理RLIMIT_NPROC
和RLIMIT_NOFILE
限制并另外绑定到小于1024的端口。我打算在非特权用户下运行它,因为我的程序只需要两种能力。
我看到here我可以为流程设置功能,然后使用setuid()
删除root权限。现在,如果我在没有root权限的情况下分叉将保留设置的功能列表的进程,那么我的程序将以最小的权限保持运行。
对我的计划进行了粗略的概述:
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;
}
我缺乏使用任何系统调用来设置功能。对这些功能的任何想法都会有很大的帮助。
PS:我可以通过命令实用程序setcap
分配上限并使用cap_set_file()
,但我想以其他方式执行此操作,因为我不是每次都确定二进制路径。
一些有用的proc命令来检查进程&amp;子流程的状态cat /proc/<PID>/task/<PID>/status
,cat /proc/<PID>/limits