在 Linux shell 中,/bin/false 和 /usr/sbin/nologin 都是常见的非交互式 Shell,主要用于禁止用户登录系统,但它们在行为和适用场景上有明显区别:

/bin/false

行为:直接返回非零退出状态(exit 1),无任何输出,静默拒绝登录。

适用场景:需要完全禁止登录且无需提示的账户(如系统服务账户)。

示例:

# /etc/passwd 配置示例
mysql:x:1001:1001::/home/mysql:/bin/false  # MySQL 服务账户

 

/usr/sbin/nologin

某些系统路径可能是 /sbin/nologin

行为:返回非零退出状态(exit 1),但会输出提示信息(默认:This account is currently not available.)。支持自定义提示:在 /etc/nologin.txt 写入内容,登录时显示该消息。

适用场景:需要明确告知用户禁止登录的账户(如 FTP/SFTP 专属账户)。

示例:

# /etc/passwd 配置示例
backup:x:1002:1002::/backup:/usr/sbin/nologin  # 备份专用账户

# 自定义提示(可选)
echo "仅限 SFTP 访问,禁止 Shell 登录!" > /etc/nologin.txt

 

核心区别总结

特性 /bin/false /usr/sbin/nologin
退出状态 非零(exit 1 非零(exit 1
输出提示 有(默认或自定义消息)
自定义提示 不支持 通过 /etc/nologin.txt 支持
适用场景 静默拒绝登录的服务账户 需友好提示的受限账户

典型使用场景

服务账户(推荐 /bin/false

  • 场景:MySQL、Nginx 等后台服务账户,无需交互且禁止登录。
  • 原因:静默拒绝更安全,避免暴露系统信息。

受限功能账户(推荐 /usr/sbin/nologin

  • 场景:FTP/SFTP 账户(允许文件传输,但禁止 Shell);备份账户(仅允许通过 rsync/scp 访问)。
  • 原因:提示消息可明确告知用户限制原因,提升友好性。

临时禁用账户

  • 场景:临时禁用某用户登录(如 usermod -s /usr/sbin/nologin username)。
  • 原因:自定义提示(如 /etc/nologin.txt)可说明禁用原因或提供联系方式。
Linux 非交互式 Shell 区别
https://ailitonia.com/archives/linux-%e9%9d%9e%e4%ba%a4%e4%ba%92%e5%bc%8f-shell-%e5%8c%ba%e5%88%ab/
本文被阅读了:1,587次
作者
Ailitonia
发布于
2025年6月2日
许可协议
版权声明

作者头像
关于 @Ailitonia
正因站在了巨人的肩膀上,才越发觉得自己渺小。不求成为巨人,但求与其同行。 把自己所见所闻,记录下来。
→查看所有由Ailitonia发布的文章