您好,欢迎来到思海网络,我们将竭诚为您提供优质的服务! 诚征网络推广 | 网站备案 | 帮助中心 | 软件下载 | 购买流程 | 付款方式 | 联系我们 [ 会员登录/注册 ]
促销推广
客服中心
业务咨询
有事点击这里…  531199185
有事点击这里…  61352289
点击这里给我发消息  81721488
有事点击这里…  376585780
有事点击这里…  872642803
有事点击这里…  459248018
有事点击这里…  61352288
有事点击这里…  380791050
技术支持
有事点击这里…  714236853
有事点击这里…  719304487
有事点击这里…  1208894568
有事点击这里…  61352289
在线客服
有事点击这里…  531199185
有事点击这里…  61352288
有事点击这里…  983054746
有事点击这里…  893984210
当前位置:首页 >> 技术文章 >> 文章浏览
技术文章

如何限制Linux用户的进程数呢?

添加时间:2010-12-6  添加: admin 
我们这两天监测到一位客户的 VPS 持续维持 100% 的 CPU 利用率很长一段时间,然后昨天客户向我们报告他的 VPS 无法登录了,从我们这边来看他的 VPS 正在运行,而且网络也有反应,只不过 CPU 利用率满负荷而已,VPSee 收到客户消息的第一反应是客户的 VPS 被 CC (Challenge Collapsar) 攻击了,后来客户告诉我们他没有做网站,只是开了一些 shell 帐号供别人通过 ssh 使用,这有可能是其中某个帐号(被黑了以后)放了 fork 炸弹,这是非常简单而且很常用的一类恶意程序,原理很简单,就是通过不停的 fork 进程来达到消耗 Linux 系统所有资源的目的,使得系统无法(没有资源)运行其他程序。比如被 fork 炸了以后,就会出现:

  -bash: fork: retry: Resource temporarily unavailable

  下面就是一个最简单的 bash fork 炸弹:

  : () { : | : & } ; :

  上面几个符号看上去很复杂,其实如果写成下面这个样子就好懂了,: 是函数名,执行一个调用自己的递归并且 pipe 到自己,& 表示后台执行程序,最后的一个 : 是在函数外调用和执行 : () 这个函数的意思:

  : () {

  : | : &

  }; :

  如何避免 fork 炸弹呢?方法很简单,只要限制每个用户可以调用的进程数就可以避免,这个可以通过修改 vi /etc/security/limits.conf 文件来设定:

  # vi /etc/security/limits.conf

  vpsee hard nproc 32

  @student hard nproc 32

  @faculty hard nproc 64

  上面的配置文件意思是说限制 vpsee 这个用户只能 fork 32 个进程;然后限制 student 这个用户组的每个成员最多能 fork 32 个进程;限制 faculty 这个用户组的每个成员最多能 fork 64 个进程。不过要事先检查系统是否有 pam_limits.so 这个模块以及是否已经加载:

  # ls /lib64/security/pam_limits.so

  /lib64/security/pam_limits.so

  # vi /etc/pam.d/login

  session required pam_loginuid.so

  如果自己是 Linux 普通用户,不是 root 用户不能修改 limits.conf 和重启系统的话,可以用 ulimit 来临时限制自己允许创建的进程数,ulimit 有 Hard 和 Soft 两种方法限制,用 Hard 的话可以减少最大可用的进程数,但是就不能重新增大这个限制了;用 Soft 的话可以自己自由增大和减小限制(ulimit,-H 和 -S 的详细说明可以参看 man ulimit)。不同的 Linux 版本对这个 ulimit -u 的默认值不同,在 CentOS 上默认情况下最大运行进程数是 8256,在 Fedora 上是 1024,所以这个要看不同的发行版本,不过这个无所谓,反正可以改,不过改成32后就不能再改成比32更大的了(比如64),只能再改成比32小的,ulimit 不带 -H 和 -S 参数的时候同时设置 Hard 和 Soft:

  $ ulimit -u

  8256

  $ ulimit -u 32

  $ ulimit -u 64

  -bash: ulimit: max user processes: cannot modify limit: Operation not permitted

  $ 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) 8256

  max locked memory (kbytes, -l) 32

  max memory size (kbytes, -m) unlimited

  open files (-n) 1024

  pipe size (512 bytes, -p) 8

  POSIX message queues (bytes, -q) 819200

  real-time priority (-r) 0

  stack size (kbytes, -s) 10240

  cpu time (seconds, -t) unlimited

  max user processes (-u) 32

  virtual memory (kbytes, -v) unlimited

  file locks (-x) unlimited

分享到:

顶部 】 【 关闭
版权所有:佛山思海电脑网络有限公司 ©1998-2024 All Rights Reserved.
联系电话:(0757)22630313、22633833
中华人民共和国增值电信业务经营许可证: 粤B1.B2-20030321 备案号:粤B2-20030321-1
网站公安备案编号:44060602000007 交互式栏目专项备案编号:200303DD003  
察察 工商 网安 举报有奖  警警  手机打开网站