在 Linux shell 中,/bin/false 和 /usr/sbin/nologin 都是常见的非交互式 Shell,主要用于禁止用户登录系统,但它们在行为和适用场景上有明显区别:
/bin/false
/bin/false行为:直接返回非零退出状态(exit 1),无任何输出,静默拒绝登录。
适用场景:需要完全禁止登录且无需提示的账户(如系统服务账户)。
示例:
# /etc/passwd 配置示例
mysql:x:1001:1001::/home/mysql:/bin/false # MySQL 服务账户
/usr/sbin/nologin
/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,588次