从技术上讲,除非将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


评论

另请参见/ usr / sbin / nologin作为登录shell是否出于安全目的?

我很好奇为什么/ bin / false需要21k的代码来返回“ 1”返回代码! (并且/ sbin / nologin仅需要4.7k)

有用的阅读。 / sbin / nologin和/ bin / false
有什么区别
@MarkStewart有点为时已晚,但是您可能需要阅读为什么真假这么大?和有关为Linux创建真正的ELF可执行文件的旋风教程。

@nxnev是的,没想到ELF的开销。在我以前的IBM时代,有一个程序IEFBR14是一条简单的操作码汇编指令:BR 14-分支到寄存器14,它将以返回码设置为寄存器14中的任何值终止该程序! />

#1 楼

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

/bin/false只是立即退出的二进制文件,在调用时返回false,因此当以false作为外壳程序的人登录时,他们将立即登录false退出时退出。将shell设置为/bin/true具有与不允许某人登录相同的效果,但是false可能是true的约定,因为它可以更好地传达人们没有shell的概念。 >查看nologin的手册页,它说它是在4.4 BSD(1990年代早期)中创建的,因此它在创建false之后很久了。使用false作为外壳程序可能只是UNIX早期的一种惯例。

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

评论


/ usr / sbin / nologin用于基于Debian的发行版。

– Diemo
17年12月31日下午5:51

至少BSD实现也将登录尝试记录为syslog,如opensource.apple.com/source/system_cmds/system_cmds-735/…所示,而/ bin / false则不会记录任何内容

– Sergiy Kolodyazhnyy
18/09/10在23:44

这是一个了不起的答案,这里提供了悠久的历史。马克,做得好!

–伊利亚·林恩(Elijah Lynn)
20年5月3日,0:09

/etc/nologin.txt自定义消息功能在Ubuntu中不可用。

– Paul
20年6月3日,12:52

#2 楼

某些FTP服务器仅在具有有效外壳程序的情况下才允许您进行FTP访问。 /sbin/nologin被认为是有效的shell,而/bin/false却不是。 FTP软件和您的配置。)

评论


是的,这可能是使用pam的ftp程序的一部分,并且使用了如您所说的pam_shells的pam,它检查/ etc / shells。只是个猜测...我可能是错的。

– xenoterracide
2011年4月7日在21:43

我刚刚检查了Ubuntu 8.04和14.04。 nologin命令以类似于false的状态1退出,并且/ etc / shells中不包含true,false或nologin。如果是这样,用户可以使用chsh选择这样的外壳并将自己锁定在自己的帐户之外。

–penguin359
15年7月21日在20:30

#3 楼

/bin/false是一个系统命令,在您需要将命令传递给程序时,只要有错误退出就可以使用该命令。它是/bin/true的伴侣。这两个都是非常古老的标准POSIX实用程序,根据定义都不会产生任何输出。 true有时用于应该无限期循环的shell脚本,例如:在。在存在之前,对于虚假用户通常使用/usr/sbin/nologin,但由于用户不知道为什么要启动虚拟用户,这可能会造成混淆。

评论


值得注意的是/ bin / true和/ bin / false并不总是在shell脚本中可以得到的。在zsh中,true和false是内置的,其中bash使用/ bin / *版本

– xenoterracide
2011年4月8日13:04

#4 楼

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

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

评论


对于没有真实用户的系统帐户,似乎更可能是false;对于已禁用的帐户,nologin似乎更是如此。

– xenoterracide
2011年4月7日在20:26

您的操作系统是什么? Centos nologin版本不带任何参数,但是可以从/etc/nologin.txt中读取消息。

–亚历山大·贡奇(Alexander Gonchiy)
17-10-20在7:04

#5 楼

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

#6 楼

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

在命令行上尝试它:

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


有些机构在密码文件的shell字段中使用/ bin / false。如果用户尝试登录,则外壳程序为/ bin / false,因此会立即退出

#7 楼

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


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


#8 楼

两者的功能大致相同,但是/bin/false对于非特权用户很有用。另一方面,/sbin/nologin适用于特权用户。

评论


哦,你是怎么得出这个结论的?

– fpmurphy
2015年12月27日,0:11

可能他已经研究过/ etc / passwd。我只是查看了刚安装的Debian Stretch的/ etc / passwd。在此框中,几乎所有系统帐户(用户ID <1000)都将/ usr / sbin / nologin作为外壳程序,但有一些例外。请注意,我不同意@pythondetective的回答。我只是在推测可能导致他得出这个结论的原因。不过,我的评论有点晚了。

– Biinarus
18/12/10在17:29

没有!默认的登录Shell与特权不同。

–MUY比利时
19年4月15日在10:11