/sbin/nologin 和 /bin/false 之间有什么区别

/sbin/nologin 和 /bin/false 之间有什么区别

从技术上讲,除非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,因此当具有falseshell 的人登录时,他们在false退出时会立即注销。将 shell 设置为 与/bin/true不允许某人登录具有相同的效果,但false可能会用作约定,true因为它可以更好地传达用户没有 shell 的概念。

查看 的nologin手册页,它说它是在 4.4 BSD(1990 年代初)中创建的,所以它是在false创建之后很长时间才出现的。使用falseshell 可能只是 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/falseGNU Coreutils。它们扮演不同的角色,并且 nologin 可以选择为使用它作为 shell 登录的用户打印一条消息。linux 命令来自 BSD,在 BSD 中它们似乎有很长的不同历史。 FreeBSDfalse只是返回 1,同时nologin检查以确保它是在 TTY 上运行,并在登录尝试期间向系统日志发送消息。 Linux 版本有点复杂(false我认为,通过国际化为 --help 的输出做各种有趣的事情),但本质上执行相同的方式。

相关内容