在linux进程中设置一些功能然后删除超级用户权限?

时间:2014-02-28 17:44:19

标签: c linux setuid linux-capabilities

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

0 个答案:

没有答案