限制进程在其生命周期内可以打开的文件描述符的数量

时间:2018-03-06 10:24:18

标签: ubuntu process linux-kernel file-descriptor ulimit

我使用的是基于debian的系统。我试图解决的漏洞之一是多个zero byte文件创建,这往往会耗尽文件系统中可用的inode。

我的系统允许用户在沙盒环境中执行代码,并设置所有资源ulimit(内存,cpu,进程,STDOUT等)。我无法设置的一个资源限制是进程可以创建的文件总数。

问题的存在是因为沙盒中有一些世界可写目录,并且由于其他限制,文件创建权限无法撤销到执行进程。

  1. ulimit有open files (-n)选项,但这只是指进程可以打开的并发文件描述符数。

  2. 我尝试了探索磁盘配额,但这看起来像用户可以创建的inode数量的用户特定限制。理想情况下,我认为这是流程限制而不是用户限制。

  3. Q1)是否没有可靠的方法来限制进程在其生命周期内可以创建的文件描述符的数量?

    OR

    Q2)是否有任何低开销的监控工具来跟踪流程open(O_CREAT)次呼叫的数量?

1 个答案:

答案 0 :(得分:0)

您可以使用setrlimit(2)限制流程内的资源(可以与bash builtin ulimit一起使用)。

您可以在文件系统上设置disk quotas

没有更精细的方法。

  

任何低开销监控工具,用于跟踪进程打开(O_CREAT)调用的次数?

您可以使用inotify(7)工具监控文件的创建。

您可以根据需要编写和使用一些FUSE文件系统。

同时查看containers,也许Docker