我目前正在尝试使用Docker开发沙箱。 Docker通过运行中的守护程序生成进程,而启用limits.conf文件中列出的限制使其适用于守护程序时,我遇到了很多麻烦。具体来说,我正在运行一个forkbomb,以便守护程序是生成所有新进程的进程。我对进行此调用的用户施加的nproc限制似乎没有得到应用,而且我一生都无法弄清楚如何使其工作。我很肯定地说,这就像将正确的文件添加到/etc/pam.d/一样简单,但是我不确定。

最佳答案

PAM限制仅适用于与PAM配合良好的过程。默认情况下,当您在容器中启动 shell 程序时,它与PAM无关,并且通过PAM设置限制就行不通了。

这是实现它的其他一些方法!

  • 您可以启动一个微型包装器脚本,而不是立即启动过程,该脚本将在执行过程之前执行适当的ulimit调用。
  • 如果您需要交互式 shell ,则可以运行login -f <username>(例如login -f root);它将使用正常的登录过程自动在计算机上登录您(并且应通过正常的PAM机制进行)。
  • 如果您希望所有容器都受到这些限制,则可以在您的系统上设置限制,然后使用这些较低的限制重新启动Docker;容器是由Docker创建的,默认情况下,它们也会继承这些限制。
  • 关于daemon - 为正在运行的守护程序启用PAM配置(limits.conf),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21979137/

    10-09 18:56