在 C 程序中,我必须处理RLIMIT_NPROC
和RLIMIT_NOFILE
限制并另外绑定到小于 1024 的端口。我正在考虑在非特权用户下运行它,因为我的程序只需要两个功能。
我在这里看到我可以为进程设置功能,然后使用setuid()
. 现在,如果我在没有 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 命令来检查进程和子进程的状态cat /proc/<PID>/task/<PID>/status
,cat /proc/<PID>/limits