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

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

我经常听到有人建议将用户帐户的 shell 设置为 来禁用它/bin/false。但是,在我现有的 Linux 系统上,我发现很多现有帐户(它们都是服务帐户)的 shell/sbin/nologin都是 。

我从手册页中看到,它/sbin/nologin会向用户打印一条消息,说明该帐户已被禁用,然后退出。大概/bin/false不会打印任何内容。

我还看到/sbin/nologin在中列出了/etc/shells,但/bin/false没有列出。

手册页说 FTP 将禁用具有 shell 的用户的访问不是列出/etc/shells并暗示其他程序也可以这样做。这是否意味着有人可以使用具有作为其 shell 的帐户通过 FTP 进入/sbin/nologin

这里有什么区别?我应该使用其中哪一个来禁用用户帐户,以及在什么情况下?列表还有哪些其他效果/etc/shells

答案1

/bin/false是一个实用程序,与 配套/bin/true,在某种抽象意义上,它有助于确保 unix 功能齐全。然而,这些程序的新兴用途已经发现;考虑 BASH 语句,无论 的返回结果如何/some/program || /bin/true,它始终会布尔评估为 true ( ) 。$? = 0/some/program

正如您指出的,的一个紧急用途/bin/false是作为不允许登录的用户的空 shell。在这种情况下,系统的行为将与 shell 运行失败完全一样。

POSIX(尽管我可能错了并且可能是 SUS)限制这两个命令除了返回适当的布尔值之外不执行任何操作。

/sbin/nologin是一个 BSD 实用程序,其行为与/bin/false(返回布尔值 false) 类似,但也会打印输出,这/bin/false是被禁止的。这是为了帮助用户了解发生了什么,但实际上,许多终端仿真器会在 shell 终止时关闭,在某些情况下导致消息几乎无法读取。

/sbin/nologin在 中列出没有什么用处/etc/shells。 的标准效果/etc/shells是列出chsh当用户更改自己的 shell 时允许使用的程序(并且没有可信的理由将您自己的 shell 更改为/sbin/nologin)。超级用户可以将任何人的 shell 更改为任何内容。但是,您可能希望在 中列出/sbin/nologin和,这将禁止使用这些 shell 的用户在他们不幸获得 shell 时使用 更改他们的 shell 。/bin/false/etc/rshchsh

FTP 守护进程可能会禁止使用 /etc/shells 中没有的 shell 的用户进行访问,或者它们可能会使用它们希望的任何其他逻辑。无论如何都应避免运行 FTP,因为sftp(提供类似功能)类似但安全。一些站点使用/sbin/nologin来禁用 shell 访问,同时允许 sftp 访问,方法是将其放入 中/etc/shells。如​​果允许用户创建 cronjobs,这可能会打开后门。

在任何一种情况下,scp都不会使用无效的 shell 进行操作。 scponly在这种情况下可以用作 shell。

su -此外,shell 的选择会影响(又称)的操作su -l。具体来说,如果是 shell, 的输出/sbin/nologin将打印到 stdout; 则不会出现这种情况/bin/false。无论哪种情况,使用 运行的命令su -cl都将失败。

最后,答案是:

要禁用帐户,您应该做三件事。

  1. 将 shell 设置为/sbin/nologin
  2. 将 中的密码字段设置/etc/passwd为适合您的 UNIX 的锁定值(!在 Linux 上为,但*LOCKED*在 FreeBSD 上为)。除非UsePAM yes在 中设置了 ,否则这将阻止使用密钥进行 SSH 登录sshd_config
  3. 将帐户到期日期设置为遥远的过去日期(例如usermod --expiredate 1)。如果使用 PAM 处理登录,此步骤将阻止使用任何方法进行 SSH 登录。

如果是服务帐户,只需确保其主目录中没有 SSH 授权密钥,并执行上述前两个步骤即可。如果您担心有人可能会为其获取 SSH 证书或其他东西,您可以随时在 和 中列出您的服务帐户DenyUsersDenyGroupssshd_config

答案2

在对此进行一些研究之后,您使用的方法取决于您要锁定的内容。 如果用户使用此项设置登录到 shell,则他们将收到一条消息,显示以下内容:请注意,您至少 This account is currently unavailable.可以在 RHEL 衍生产品上通过创建文件来更改此设置。/etc/nologin.txt

如您所知,/bin/false这不是 shell。它的工作方式是返回 false,即在二进制文件退出后立即注销。请注意,这/bin/true将达到相同的效果。

关于您的 FTP 问题:是的,您说得对,将 shell 设置为/sbin/nologin将允许用户登录 FTP,而/bin/false/bin/true完全阻止用户登录任何服务。

因此,/bin/false/bin/true最好阻止用户登录任何服务,同时/sbin/nologin仍允许用户登录 SSH 或本地控制台以外的服务,同时向用户提供帐户处于非活动状态的反馈,并且最好在只需要锁定 SSH/本地控制台时使用。

答案3

嗯,有人尝试证明 /bin/false 不允许 FTP 访问?

我刚刚将我的用户的 shell 更改为 /bin/false,并且能够正常进行 FTP 操作。

我使用 /dev/null 来完全地锁定用户(嗯,除了电子邮件,他们仍然可以使用 POP3)。

相关内容