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
#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
是更用户友好的选项,它为尝试登录的用户提供了可自定义的消息。 ,因此从理论上讲您会希望使用它;但是nologin
和false
的最终结果是没有外壳且无法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
评论
另请参见/ 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中的任何值终止该程序! />