1

在 C 程序中,我必须处理RLIMIT_NPROCRLIMIT_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>/statuscat /proc/<PID>/limits

4

0 回答 0