禁用交互式访问需将系统服务账号shell设为/sbin/nologin,而非停服务;uid 1–999且名称含sync/daemon/mail等特征的账号需重点处理,可用awk命令识别。
服务管理中禁用交互式访问,核心是切断账号的登录能力,而不是停服务本身。系统服务账号(如 sync、daemon、mail)本就不该用来登录,但默认 shell 可能仍是 /bin/bash 或 /bin/sh,留下潜在入口。
确认哪些账号需要处理
系统服务账号通常 UID 在 1–999 范围(RHEL/CentOS 默认),且名称有明显特征。运行以下命令快速识别:
awk -F':' '$3 >= 1 && $3- 重点关注输出中的
sync、shutdown、halt、adm、lp、mail等高风险账号 - 跳过
root(UID=0)、systemd-network、sshd等现代服务账号——它们 Shell 已设为/usr/sbin/nologin或由 systemd 管理,强行修改可能中断网络或 SSH
统一设置为 /sbin/nologin
这是最稳妥的做法:账号仍存在、服务照常运行,但任何交互式登录(SSH、su -、login)都会被系统拒绝。
- 单个修改:
sudo usermod -s /sbin/nologin sync - 批量处理(建议先加
-p预览):awk -F':' '$3>=1 && $3 - 创建新系统账号时直接指定:
sudo useradd -r -s /sbin/nologin -M myapp(-r表示系统用户,-M不建家目录)
确保 /sbin/nologin 合法可用
如果 /sbin/nologin 不在 /etc/shells 中,su - username 会报错 Cannot execute /sbin/nologin。
- 检查是否存在:
grep nologin /etc/shells - 若缺失,追加进去:
echo "/sbin/nologin" | sudo tee -a /etc/shells - RHEL 7 需手动添加;RHEL 8+ 一般已内置
验证是否真正生效
改完不能只看 /etc/passwd,必须实测三件事:
-
查字段:运行
grep ^sync: /etc/passwd,第七列应为/sbin/nologin -
测登录:执行
su - sync或ssh sync@localhost,应立即退出并显示This account is currently not available. -
验服务:重启
crond、rsyslog等依赖这些账号的服务,确认日志照写、定时任务照跑——服务靠的是 exec 指定二进制,跟交互 Shell 无关











