限制普通用户创建长期后台进程需组合策略:限制nproc阻断守护流程,chmod限制setsid权限,SSH与shell会话超时控制生命周期,并通过auditd监控nohup调用及非终端关联进程。

限制普通用户创建长期运行的后台进程,核心是切断其脱离终端控制的能力,同时配合资源约束和会话隔离机制。单纯禁止 & 或 nohup 并不现实(用户可绕过),真正有效的做法是组合策略:限制进程数、禁用关键守护手段、控制会话生命周期。
限制用户最大进程数(nproc)
这是最直接有效的第一道防线。普通用户若无法创建足够子进程,就难以完成守护进程的标准流程(fork → setsid → fork → exit)。
- 编辑 /etc/security/limits.conf,添加:
username soft nproc 32username hard nproc 64- 或对所有用户统一限制:
* soft nproc 50和* hard nproc 100 - 生效需用户重新登录;可用
ulimit -u验证当前值
禁用或限制 setsid 和 nohup 的使用
setsid 是脱离终端会话的关键工具,nohup 是绕过 SIGHUP 的常用方式。虽不能完全删除(系统依赖),但可通过权限与审计控制:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 检查
/usr/bin/setsid权限:默认为-r-xr-xr-x,若环境允许,可改为仅 root 可执行:sudo chmod 750 /usr/bin/setsid - nohup 通常不可禁用(shell 内置行为),但可配合
auditd记录调用:-w /usr/bin/nohup -p x -k nohup_usage - 在 shell 配置(如
/etc/skel/.bashrc)中设别名警告:alias nohup='echo "Warning: nohup usage logged"; command nohup'
限制会话持续时间与自动登出
长期后台进程往往依赖持久 SSH 或终端会话。缩短会话存活时间能自然中断其生命周期:
- SSH 服务端配置 /etc/ssh/sshd_config:
-
ClientAliveInterval 300(每 5 分钟发心跳) -
ClientAliveCountMax 2(2 次无响应即断开) - Shell 级自动登出:
export TMOUT=900(15 分钟无操作退出),写入/etc/profile.d/timeout.sh - systemd 用户会话限制(适用于 modern distro):
sudo systemctl set-property user@<uid>.service TasksMax=128</uid>
监控与阻断异常后台行为
防御需结合检测。普通用户若频繁启动长时间运行的进程,应触发告警或自动干预:
- 用
ps -u username -o pid,etimes,comm --sort=-etimes | head -n 10查看运行时间最长的进程 - 配合 cron 定期扫描:
pgrep -u username -t ?(查非终端关联进程) - 发现可疑进程(如父 PID 为 1 且无 systemd unit)可 kill 并记录:
sudo pkill -u username -P 1 - 启用
pam_faildelay或 SELinux 策略限制非标准 daemon 启动路径

















