ulimit 是一个用于控制 shell 进程资源使用的命令行工具。通过限制用户或进程可以使用的资源,可以提高系统的安全性和稳定性。以下是一些使用 ulimit 提升系统安全性的方法:
每个进程可以打开的文件描述符数量是有限的。过多的文件描述符可能会导致系统资源耗尽。
ulimit -n 4096 # 将每个进程可以打开的文件描述符数量限制为4096
限制单个用户可以同时运行的进程数,防止恶意用户或脚本消耗过多资源。
ulimit -u 1024 # 将单个用户可以同时运行的进程数限制为1024
限制进程可以使用的CPU时间,防止单个进程长时间占用CPU资源。
ulimit -t 3600 # 将进程可以使用的CPU时间限制为3600秒(1小时)
限制进程可以使用的最大内存量,防止内存溢出攻击。
ulimit -v 512000 # 将进程可以使用的最大内存量限制为512MB
限制进程的堆栈大小,防止缓冲区溢出攻击。
ulimit -s 8192 # 将进程的堆栈大小限制为8MB
限制核心转储文件的大小,防止生成过大的核心转储文件。
ulimit -c 0 # 禁止生成核心转储文件
限制管道缓冲区的大小,防止管道缓冲区溢出攻击。
ulimit -p 8192 # 将管道缓冲区大小限制为8KB
限制进程的数据段大小,防止数据段溢出攻击。
ulimit -d 1048576 # 将数据段大小限制为1MB
限制进程可以创建的文件大小,防止大文件攻击。
ulimit -f 1073741824 # 将文件大小限制为1GB
限制进程可以锁定的内存大小,防止锁定大量内存。
ulimit -l 65536 # 将锁定的内存大小限制为64MB
上述 ulimit 设置在当前 shell 会话中有效。要使其在系统重启后仍然生效,可以将这些设置添加到用户的 shell 配置文件中(如 .bashrc 或 .bash_profile),或者将其添加到系统的 /etc/security/limits.conf 文件中。
例如,在 /etc/security/limits.conf 中添加以下内容:
* soft nofile 4096
* hard nofile 4096
* soft nproc 1024
* hard nproc 1024
* soft core 0
* hard core 0
这些设置将对所有用户生效。如果只想对特定用户生效,可以将 * 替换为用户名。
通过合理使用 ulimit,可以有效提升系统的安全性和稳定性。