从技术上讲,除非pam
设置为检查您的 shell,否则pam_shells
如果您不在 shell 上,那么这两种方法实际上都不能阻止您的登录。在我的系统上,它们的大小甚至不同,所以我怀疑它们实际上做了一些事情。那么有什么区别呢?为什么它们都存在?我为什么要使用其中一种而不是另一种?
-rwxr-xr-x 1 root root 21K Feb 4 17:01 /bin/false
-rwxr-xr-x 1 root root 4.7K Mar 2 14:59 /sbin/nologin
答案1
当/sbin/nologin
设置为 shell 时,如果使用该 shell 的用户登录,他们将收到一条礼貌的消息,提示“此帐户当前不可用”。该消息可以随文件更改/etc/nologin.txt
。
/bin/false
只是一个立即退出的二进制文件,在调用时返回 false,因此当具有false
shell 的人登录时,他们在false
退出时会立即注销。将 shell 设置为 与/bin/true
不允许某人登录具有相同的效果,但false
可能会用作约定,true
因为它可以更好地传达用户没有 shell 的概念。
查看 的nologin
手册页,它说它是在 4.4 BSD(1990 年代初)中创建的,所以它是在false
创建之后很长时间才出现的。使用false
shell 可能只是 UNIX 早期遗留下来的约定。
nologin
是更用户友好的选项,向尝试登录的用户提供可自定义的消息,因此理论上您会想要使用它;但两者nologin
都会false
有相同的最终结果,即某人没有 shell 并且无法 ssh 登录。
答案2
仅当您拥有有效的 shell 时,某些 FTP 服务器才允许您进行 FTP 访问。 /sbin/nologin
被视为有效的 shell,反之则/bin/false
不然。
(我认为“有效”意味着它的退出状态为0,但/etc/shells
也可能进入它,这可能取决于系统、FTP软件和您的配置。)
答案3
/bin/false
是一个系统命令,在您需要将命令传递给程序时使用,该程序除了出错退出之外什么也不做。它是 的伴侣/bin/true
。这两个都是非常古老的标准 POSIX 实用程序,并且根据定义都不产生任何输出。 true 有时用于应该无限循环的 shell 脚本,例如:
while true; do
...
# Waste time
if [ $wasted_time -gt 100000 ]; then
exit 0
fi
...
done
/usr/sbin/nologin
专门设计用于替换 shell 并生成抱怨您无法登录的输出。在它存在之前,它通常用于/bin/false
虚拟用户,但可能会造成混乱,因为用户不知道为什么他们被踢掉。
答案4
在 Linux 上,/sbin/nologin
来自实用程序Linux项目,同时/bin/false
是GNU Coreutils。它们扮演不同的角色,并且 nologin 可以选择为使用它作为 shell 登录的用户打印一条消息。linux 命令来自 BSD,在 BSD 中它们似乎有很长的不同历史。 FreeBSDfalse
只是返回 1,同时nologin
检查以确保它是在 TTY 上运行,并在登录尝试期间向系统日志发送消息。 Linux 版本有点复杂(false
我认为,通过国际化为 --help 的输出做各种有趣的事情),但本质上执行相同的方式。