Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 不断地分配内存以使系统崩溃,以及如何为标准用户阻止它_C_Linux - Fatal编程技术网

C 不断地分配内存以使系统崩溃,以及如何为标准用户阻止它

C 不断地分配内存以使系统崩溃,以及如何为标准用户阻止它,c,linux,C,Linux,嗨,我尝试使用calloc函数连续分配内存。很明显,系统内存被填满并崩溃。但最糟糕的是,即使我是一个标准用户,如果我能够运行该程序,系统也会崩溃。我们如何阻止标准用户发生这种情况 使用的代码是: #include <stdio.h> #include <stdlib.h> int main() { while(1) { int *abc; abc=(int*)calloc(1000,sizeof(int)); } } #包括 #包括 in

嗨,我尝试使用calloc函数连续分配内存。很明显,系统内存被填满并崩溃。但最糟糕的是,即使我是一个标准用户,如果我能够运行该程序,系统也会崩溃。我们如何阻止标准用户发生这种情况

使用的代码是:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  while(1)
  {
    int *abc;
    abc=(int*)calloc(1000,sizeof(int));
   }
}
#包括
#包括
int main()
{
而(1)
{
国际*abc;
abc=(int*)calloc(1000,sizeof(int));
}
}

可能有某种方法可以阻止这一点,否则用户很容易获得ssh访问权限,然后他就可以很容易地使系统崩溃。

首先,您在分配内存时没有释放任何内存。系统的内存是有限的,这意味着在某个时候,如果操作系统没有首先使系统崩溃,您将耗尽内存。
这是要解决的第一件事。 至于防止标准用户分配内存,程序无法自动识别用户是否为标准用户
因此,您可能需要定义一个变量/常量,当程序运行时,系统将参数传递给该变量/常量。检查常量/变量以确定用户是否为标准。如果用户不是,则该代码段不会运行
如何识别不同操作系统的标准用户和特权用户;所以,你可能需要先弄清楚这一点


希望这能给你一个开始的地方。

首先,你在分配内存时没有释放任何内存。系统的内存是有限的,这意味着在某个时候,如果操作系统没有首先使系统崩溃,您将耗尽内存。
这是要解决的第一件事。 至于防止标准用户分配内存,程序无法自动识别用户是否为标准用户
因此,您可能需要定义一个变量/常量,当程序运行时,系统将参数传递给该变量/常量。检查常量/变量以确定用户是否为标准。如果用户不是,则该代码段不会运行
如何识别不同操作系统的标准用户和特权用户;所以,你可能需要先弄清楚这一点


希望这能给您一个开始的地方。

然后您应该为ssh外壳设置内存限制。
有一些讨论

然后您应该为ssh外壳设置内存限制。
有一些讨论

在unix领域有一个“nice”的概念,它控制调度优先级。。。 所以当一个过程变得越来越急促时,它会得到一个越来越低的好数字。。。 而先发制人的调度程序将给它越来越少的时间。。。其他虚拟机机制可能会杀死它。。。但是,内核/调度程序要防止进程变得过于资源密集


实际上,我工作过的每个系统都可能会受到您编写的代码类型的影响。

在unix lands中,有一个“nice”概念,它控制调度优先级。。。 所以当一个过程变得越来越急促时,它会得到一个越来越低的好数字。。。 而先发制人的调度程序将给它越来越少的时间。。。其他虚拟机机制可能会杀死它。。。但是,内核/调度程序要防止进程变得过于资源密集


实际上,我所使用的每个系统都可能受到您编写的代码类型的影响。

我不确定您是否从正确的角度看待这一点

如果一个用户可以访问您的系统,并且该用户有恶意意图,那么一个使您的系统崩溃的简单DoS(拒绝服务)攻击就不必担心了


话虽如此,unix环境通常通过限制受信任用户对shell的访问来避免此问题,只有在极少数情况下才有必要直接限制进程的内存消耗。

我不确定您是否从正确的角度看待此问题

如果一个用户可以访问您的系统,并且该用户有恶意意图,那么一个使您的系统崩溃的简单DoS(拒绝服务)攻击就不必担心了


也就是说,unix环境通常通过限制受信任用户对shell的访问来避免此问题,只有在极少数情况下才需要直接限制进程的内存消耗。

您可以设置各种内存限制


ulimit
浮现在脑海中。这可以由shell设置(请参见)。还有一种在系统范围内设置它们的方法。有一个文件存储了这些信息,但我记不起它在哪里。你需要用谷歌搜索它。

你可以设置各种内存限制


ulimit
浮现在脑海中。这可以由shell设置(请参见)。还有一种在系统范围内设置它们的方法。有一个文件存储了这些信息,但我记不起它在哪里。你需要用谷歌搜索它。

不要在这里用C语言强制转换calloc()返回的地址,你也忘了释放内存。检查这些链接,@GrijeshChauhan感谢链接。乍一看,我会对2005年发表的一篇“现代内存管理”文章保持警惕,但我会看一看@约翰实际上还有一个新的,我正在寻找。如果我发现,我将在这里分享这不是一个真正的代码问题,而是一个关于linux/unix管理的问题。也许作为一个问题更合适?不要在C中强制转换calloc()返回的地址,同时你也忘记了释放内存。检查这些链接,@GrijeshChauhan感谢链接。乍一看,我会对2005年发表的一篇“现代内存管理”文章保持警惕,但我会看一看@约翰实际上还有一个新的,我正在寻找。如果我发现,我将在这里分享这不是一个真正的代码问题,而是一个关于linux/unix管理的问题。也许作为一个问题更合适?我想你没有抓住重点。关键是,是的,这个程序使系统崩溃,这是出于设计。关注者