对于被盗的linux用户,forkpty失败了

时间:2013-07-22 09:06:55

标签: linux ubuntu fork pty nitrousio

我在服务器上安装了Ubuntu 12.04。每个注册用户也注册为linux用户&通过/etc/security/limits.conf监控有限的系统资源访问。

我尝试将服务器作为注册用户之一运行。该应用是一个nodejs应用 - http://github.com/pocha/terminal-codelearn。它使用https://github.com/chjj/pty.js为每个访问nodejs app的用户创建一个Pseudo Terminal。

应用失败,并且'forkpty(3)失败'错误指向https://github.com/chjj/pty.js/blob/65dd89fd8f87de914ff1814362918d7bd87c9cbf/src/unix/pty.cc的第184行

pid_t pid = pty_forkpty(&master, name, NULL, &winp);

if (pid) {
  for (i = 0; i < argl; i++) free(argv[i]);
  delete[] argv;
  for (i = 0; i < envc; i++) free(env[i]);
    delete[] env;
  free(cwd);
}

switch (pid) {
  case -1:
    return ThrowException(Exception::Error(
    String::New("forkpty(3) failed.")));

我能够在http://nitrous.io上成功部署该应用。他们可能有类似于jail用户的方式。我试过运行ulimits -a&amp;匹配除待处理信号之外的每个值。在我的服务器上,最大挂起信号值不超过约90k值,而在Nitrous服务器上则为584k。

以下是Nitrous服务器的ulimit -a输出

ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 548288
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 512
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 256
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

应用程序在heroku上失败并出现类似的错误。

任何人都可以帮助我在我的服务器上运行如何在nitrous.io上运行应用程序

2 个答案:

答案 0 :(得分:0)

我知道heroku无法分叉,因为它们实际上并没有运行POSIX,只是非常像posix一样。所以有些事情,比如forkpty,就是行不通。我不认为有办法解决这个问题:(希望有。

答案 1 :(得分:0)

我不确定我是否理解POSIX类型。但我发现在我的监狱环境中没有/ dev / ptmx&amp; / dev / pts / *。我google了&amp;创造了他们&amp;它开始工作了。