it-swarm.cn

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

从技术上讲,除非设置pam来使用pam_shells如果您不在命令行管理程序中,则上述两种方法均无法阻止您的登录。在我的系统上,它们的大小甚至不同,因此我怀疑它们实际上在做什么。那有什么区别呢?他们为什么都存在?我为什么要一个使用另一个?

-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
185
xenoterracide

/sbin/nologin设置为命令行管理程序时,如果具有该命令行管理程序的用户登录,他们将收到礼貌的消息,提示“此帐户当前不可用”。可以使用文件/etc/nologin.txt更改此消息。

/bin/false只是立即退出的二进制文件,在调用时返回false,因此,当具有false作为Shell的用户登录时,他们会在false退出时立即注销。将Shell设置为/bin/true具有不允许某人登录的相同效果,但是false可能是true的惯例,因为它在传达人不同意这一概念方面要好得多。没有壳。

查看nologin的手册页时,它说它是在4.4 BSD(1990年代初)中创建的,因此它在创建false之后很久了。 false作为Shell的使用可能只是UNIX早期的一种惯例。

nologin是更用户友好的选项,为尝试登录的用户提供了可自定义的消息,因此从理论上讲,您将希望使用它;但是nologinfalse的最终结果相同,即没有Shell且无法ssh的人。

212
Mark McKinstry

某些FTP服务器仅在具有有效命令行管理程序的情况下才允许您进行FTP访问。 /sbin/nologin被视为有效的Shell,而/bin/false 不是。

(我认为“有效”表示其退出状态为0,但/etc/shells也可能会加入其中,它可能取决于系统,FTP软件和您的配置。)

29
Mikel

/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,但由于用户不知道为什么要启动虚拟用户,这可能会造成混淆。

14
penguin359

在我的机器上,nologin始终以英文显示相同的消息,忽略参数。 /bin/false--version指示的语言响应--help$LC_CTYPE。除了这些外观上的差异外,它们具有相同的效果。

在可用性方面,如果nologin用于说英语的真实人的帐户,则更好。在安全方面,没有区别。

/ bin/false唯一的工作是使用非零退出代码退出。

在命令行中尝试:

$:> /bin/false
$:> echo $?
1
$:>

一些机构在密码文件的Shell字段中使用/ bin/false。如果用户尝试登录,则命令行管理程序为/ bin/false,因此会立即退出

3
shellter

在Linux上,/sbin/nologin来自 til-linux 项目,而/bin/falseGNU Coreutils 的一部分。它们扮演着不同的角色,并且nologin可以选择为正在登录的拥有Shell身份的人打印一条消息。linux命令来自BSD,他们似乎有很长的历史。 FreeBSD false仅返回1 ,而nologin检查以确保它是 在TTY上运行,并在登录尝试期间向syslog发送消息。 linux的版本要复杂一些(我想想false会对--help的输出进行国际化的各种有趣的事情),但实际上执行的方式是相同的。

3
jsbillings

它们可能是同一程序,但是它们具有不同的含义。程序名称说明了一切。

  • / bin/false用于返回假值。它作为程序运行。
  • / bin/nologin旨在向用户指示不允许帐户登录。 (它用于登录Shell。)
1
BillThor