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

xen*_*ide 209 shell security login

从技术上讲,除非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
Run Code Online (Sandbox Code Playgroud)

Mar*_*try 239

/sbin/nologin设置为外壳,如果用在外壳注销用户,他们会得到一个礼貌的消息,说“此帐户目前无法使用。” 可以使用文件更改此消息/etc/nologin.txt

/bin/false只是一个立即退出的二进制文件,当它被调用时返回false,所以当有falseshell的人登录时,他们会在false退出时立即注销。将 shell 设置为/bin/true与不允许某人登录具有相同的效果,但false可能用作约定,true因为它更能传达人们没有 shell 的概念。

查看nologin的手册页,它说它是在 4.4 BSD(1990 年代初期)中创建的,因此它在false创建很久之后才出现。false作为 shell的使用可能只是从 UNIX 早期延续下来的约定。

nologin是更用户友好的选项,向尝试登录的用户提供可自定义的消息,因此理论上您会想要使用它;但两者nologinfalse会不具有壳,不能够通过ssh在别人相同的最终结果。

  • `/usr/sbin/nologin` 适用于基于 Debian 的发行版。 (18认同)
  • 至少 BSD 实现还将登录尝试记录到 syslog,如 https://opensource.apple.com/source/system_cmds/system_cmds-735/nologin.tproj/nologin.c 所示,而 /bin/false 不会记录任何内容 (5认同)
  • Ubuntu 中不提供“/etc/nologin.txt”自定义消息功能。 (4认同)

Mik*_*kel 32

某些 FTP 服务器仅在您拥有有效的 shell 时才允许您进行 FTP 访问。 /sbin/nologin被视为有效的外壳,而/bin/false不是。

(我认为“有效”是指退出状态为0,但/etc/shells也有可能进入,这可能取决于系统、FTP软件和您的配置。)

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

pen*_*359 16

/bin/false是一个系统命令,在您需要将命令传递给程序时使用,该程序应该只执行错误退出。它是 的伴侣/bin/true。这两个都是非常古老的标准 POSIX 实用程序,根据定义都不会产生任何输出。true 有时用于应该无限循环的 shell 脚本,例如:

while true; do
    ...
    # Waste time
    if [ $wasted_time -gt 100000 ]; then
        exit 0
    fi
    ...
done
Run Code Online (Sandbox Code Playgroud)

/usr/sbin/nologin专门设计用于替换外壳并产生抱怨您无法登录的输出。在它存在之前,它很常见/bin/false用于虚拟用户,但可能会令人困惑,因为用户不知道他们为什么被踢。

  • 值得注意的是 `/bin/true` 和 `/bin/false` 并不总是你会在 shell 脚本中得到的。在`zsh` 中`true` 和`false` 是内置的,其中`bash` 使用`/bin/*` 版本 (4认同)

Gil*_*il' 5

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

就可用性而言,nologin如果是在说英语的真人帐户上使用的话会更好。从安全角度来看,没有什么区别。

  • 似乎“false”更适合没有真实用户的系统帐户,而“nologin”则适用于禁用帐户。 (4认同)