gpt4 book ai didi

linux - linux 上的进程忽略资源限制

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:37 25 4
gpt4 key购买 nike

前段时间我在 stackoverflow 上问了一些关于开发在线法官的问题,我找到了很多很好的答案。我已经开始着手开发一个,但似乎在我的代码中遇到了一个重大缺陷。

用户提交的源码会在服务器上编译。这是通过在 fork 进程中执行 gcc 来完成的。现在我对 CPU 时间设置了资源限制,超过该限制时,会向进程发送 SIGXCPU 信号。到目前为止一切都很好。但是,假设有人编写了自己处理 SIGXCPU 代码的恶意代码,它会继续在服务器上运行,并可能为某人远程控制服务器开辟一条道路。

那么我在这里缺少什么?必须有某种方式可以防止这种情况。

编译模块的基本原型(prototype)是这样的:

int main(){    int pid;    int rv;    if (!( pid=fork() ))    {        struct rlimit limit;        getrlimit(RLIMIT_CPU, &limit);        limit.rlim_cur = 1;        setrlimit(RLIMIT_CPU, &limit);       //execl() with gcc and source file name    }    else if(pid)    {        wait(&rv);    }    else        printf("Error forking\n");    return 0;}

如果源文件包含类似

的内容
void handler(int signum){    if (signum == SIGXCPU)        printf("Caught SIGXCPU signal\n");}int main(){signal(SIGXCPU, handler);while(1);return 0;}

...这是个大麻烦

最佳答案

在 Linux 上,具体而言,用户可以按照您的指令进行操作。但是,如果达到硬限制(与您设置的软限制相反),linux 将向进程发送 sigkill,这将终止进程。

(不过请记住,您确实需要在 chroot 环境中运行您的东西)

关于linux - linux 上的进程忽略资源限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1045290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com