首页/系统/Linux 运维命令速查/服务账号与 nologin shell

服务账号与 nologin shell

系统/服务账号不给人登录:shell 设 /sbin/nologin(或 /usr/sbin/nologin),配合锁定密码;检查与创建一条龙。

Linux 运维命令速查系统更新于 2026-10-13

nologin 是什么

服务账号只用于跑进程,不应允许交互登录。做法是把登录 shell 设为 /sbin/nologin(RHEL 系)或 /usr/sbin/nologin(Debian 系),该 shell 被调用时直接打印提示并退出。它与锁定口令是两件互补的事,通常一起使用。

基本信息

适用平台Linux(nologin 路径随发行版不同)
相关文件/etc/passwd 第 7 列(登录 shell)、/etc/shells
创建方式useradd -r -s /usr/sbin/nologin -M 账号
检查方式awk 过滤 /etc/passwd 第 7 列,列出仍可登录的账号

典型使用场景

  • 新建服务账号:useradd 时直接指定 nologin,避免先建成普通账号再改
  • 收敛存量账号:把历史遗留的可登录服务账号改为 nologin,缩小攻击面
  • 审计可登录账号:定期导出第 7 列非 nologin、非 false 的账号清单核对
  • 防止误用:临时想借服务账号登录时会立刻被拒,异常行为更容易被发现
  • 配合口令锁定:passwd -l 锁定口令,nologin 阻断 shell,两道措施一起做

创建与限制

创建与限制
sudo useradd -r -s /usr/sbin/nologin -M svc-app   # 系统账号 + nologin + 不建家目录
sudo usermod -s /usr/sbin/nologin olduser         # 存量账号改为 nologin
sudo passwd -l olduser                            # 同时锁定口令

# 列出所有仍可交互登录的账号
awk -F: '$7 !~ /(nologin|false|sync|shutdown|halt)$/ {print $1, $7}' /etc/passwd

验证效果

验证效果
su - svc-app -c whoami      # 预期报 This account is currently not available
sudo -u svc-app id           # sudo 切换不受 nologin 限制,任务仍可执行
grep '^svc-app' /etc/passwd  # 确认第 7 列已是 nologin 路径

要点对照

项目说明注意
nologin 路径RHEL 系 /sbin/nologin,Debian 系 /usr/sbin/nologin写错路径等于没设,按发行版确认
/etc/shells部分服务据此判断可用的 shellnologin 通常不在列表内
cron 与 systemd不经过登录 shell服务与定时任务不受影响
口令锁定passwd -l与 nologin 互补,不能互相替代
检查清单awk 过滤第 7 列定期核对可登录账号清单
cron 与 systemd 服务不经过登录 shell,账号设为 nologin 后这些任务照常运行。
sudo -u 切换用户同样不受 nologin 限制,因此 nologin 只挡交互式登录,不是权限隔离手段。
批量收敛账号时先用 awk 导出候选清单并人工确认,再逐个修改,避免误改运维账号导致无人可登录。
确认影响面:检查该账号是否被计划任务或服务单元引用,这些场景不受 nologin 影响,改动不会中断任务。
只锁口令不设 nologin 时,部分配置下 SSH 公钥仍可登录,两道措施应一起做。

易错点

  • 只锁口令不设 nologin 时公钥登录可能仍然可行,两个动作都要做
  • usermod -s 不影响已登录的会话,改完应让用户重新登录或主动断开其会话
  • nologin 路径随发行版不同,RHEL 系与 Debian 系写反会变成报 shell 不存在而不是被拒绝
  • 改前先确认账号被哪些地方使用(cron、systemd 单元、sudoers),误判影响面会让任务异常

数据来源与参考

  • man 8 nologin
  • RHEL 文档:服务账号管理
  • CIS Benchmark:仅允许必要账号登录

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌