将新业务账号默认Shell设为/sbin/nologin是最简可靠的登录级隔离方式,构成基础运行沙箱;需同步配置HOME、CREATE_MAIL_SPOOL等参数强化防护,并通过sudo白名单或容器化实现功能与安全的平衡。

直接将新业务账号的默认 Shell 设为 /sbin/nologin 或 /usr/sbin/nologin,是最简、最可靠的方式实现登录级隔离,构成基础运行沙箱。
明确 Shell 类型与安全边界的关系
Shell 不只是命令解释器,更是用户会话的入口控制点:
- /bin/bash:提供完整交互环境,具备文件遍历、进程启动、网络连接等能力,不适合业务账号
-
/sbin/nologin(或
/usr/sbin/nologin):执行时立即退出并返回错误码,系统拒绝任何交互式登录,但允许被sudo、su -s或服务进程以非登录方式调用 -
/bin/false:功能类似,但部分旧系统兼容性略差;推荐优先用
nologin - 自定义受限 Shell(如
rssh、scponly)需额外安装和配置,不适用于“默认新开账号”场景
修改 /etc/default/useradd 中的 SHELL 配置
编辑配置文件,使所有后续 useradd 创建的用户自动继承受限 Shell:
sudo sed -i 's|^SHELL=.*|SHELL=/sbin/nologin|' /etc/default/useradd
验证是否生效:
useradd -D | grep SHELL
输出应为:SHELL=/sbin/nologin
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
注意:该设置仅影响未显式指定 -s 参数的新用户。已有用户不受影响,也不改变其当前 Shell。
配合其他默认项强化沙箱效果
单一 Shell 限制是起点,建议同步调整以下参数,构建更完整的默认防护基线:
- HOME=/var/empty:避免家目录成为可写落脚点;若必须有家目录,设为只读挂载或绑定到空目录
- CREATE_MAIL_SPOOL=no:禁用邮件队列,减少攻击面和磁盘残留
-
SKEL=/etc/skel-restricted:自定义骨架目录,仅保留必要最小文件(如空
.profile),移除所有可执行模板 - INACTIVE=0:密码过期后立即锁定账户(需配合定期密码策略)
业务账号仍需执行命令?用 sudo 白名单替代登录
受限 Shell 并不等于“无法工作”。典型做法是:
- 为业务账号分配最小权限的
sudo规则,例如仅允许运行指定脚本或二进制文件 - 使用
sudo -u appuser -- /path/to/app启动服务,绕过登录环节 - 容器化部署中,直接以该用户 UID 运行进程,无需 Shell 登录上下文
这样既满足功能需求,又保持账户无交互入口,真正达成运行沙箱目标。

















