ITPub博客

首页 > 数据库 > Oracle > 怎样限制Linux用户的进程数

怎样限制Linux用户的进程数

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

步骤/方法

  1. 1
    如何判断被 fork 炸了
    比如被 fork 炸了以后,就会出现:
    -bash: fork: retry: Resource temporarily unavailable
    下面就是一个最简单的 bash fork 炸弹:
    : () { : | : & } ; :
    上面几个符号看上去很复杂,其实如果写成下面这个样子就好懂了,: 是函数名,执行一个调用自己的递归并且 pipe 到自己,& 表示后台执行程序,最后的一个 : 是在函数外调用和执行 : () 这个函数的意思:
    : () {
    : | : &
    }; :
  2. 2
    如何避免 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
    END

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7312716/viewspace-1109614/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论