热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

限制Linux用户的进程数

文章标题:限制Linux用户的进程数。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  我们这两天监测到一位客户的 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


推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 树莓派Linux基础(一):查看文件系统的命令行操作
    本文介绍了在树莓派上通过SSH服务使用命令行查看文件系统的操作,包括cd命令用于变更目录、pwd命令用于显示当前目录位置、ls命令用于显示文件和目录列表。详细讲解了这些命令的使用方法和注意事项。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了使用SSH免密登录的步骤,包括生成公私钥、传递公钥给被登录机、修改文件权限的操作。同时提醒用户注意私钥的传递方式,建议使用U盘等离线方式传递。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
author-avatar
520TING小妖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有