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

Mic*_*ton 71 security linux login

我经常听到有人建议将用户帐户设置为/bin/false. 但是,在我现有的 Linux 系统上,我看到大量现有帐户(所有这些帐户都是服务帐户)都有一个 shell /sbin/nologin

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

我还看到 中/sbin/nologin列出了/etc/shells,而未列出/bin/false

手册页说 FTP 将禁止使用列出的 shell 的用户访问,/etc/shells并暗示其他程序可能会这样做。这是否意味着有人可以使用具有/sbin/nologin外壳的帐户进行 FTP登录?

这里有什么区别?我应该使用其中的哪一个来禁用用户帐户,在什么情况下?上市/etc/shells还有什么其他影响?

Fal*_*mot 74

/bin/false是一个实用程序,是 的配套程序,/bin/true它在某种抽象意义上很有用,可确保 unix 是功能完备的。然而,已经发现了这些程序的紧急用途;考虑 BASH 语句/some/program || /bin/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)。超级用户可以将任何人的外壳更改为任何内容。但是,您可能希望同时列出/sbin/nologin/bin/falsein /etc/rsh,这将禁止拥有这些 shell 的用户chsh在他们获得 shell 的不幸事件中使用更改其shell。

FTP 守护程序可能会禁止使用不在 /etc/shells 中的 shell 的用户访问,或者他们可能会使用他们希望的任何其他逻辑。在任何情况下都应避免运行 FTP,因为sftp(提供类似功能)类似但安全。一些站点用于/sbin/nologin禁用 shell 访问,同时通过将其放入/etc/shells. 如果允许用户创建 cronjobs,这可能会打开一个后门。

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

此外,外壳的选择会影响su -(AKA su -l)的操作。特别是,/sbin/nologin如果是shell ,输出将打印到stdout;这不可能是/bin/false. 在任何一种情况下,运行的命令su -cl都会失败。

最后,答案:

要禁用帐户,请不要依赖这两个选项,而是将 shell 设置为/sbin/nologin用于提供信息(除非/sbin/nologin/etc/shells中,此时您应该使用/bin/false,而不应使用 )。相反,将密码字段设置/etc/passwd!,这保证crypt在没有密码时有效。考虑/etc/shadow以相同的方式设置哈希以避免错误。 passwd -l会为你做这件事。

禁用帐户的第三种方法是将帐户到期日期字段设置为一个古老的日期(例如usermod --expiredate 1)。这将阻止登录,以防您的设置允许用户在没有密码的情况下对其 unix 帐户进行身份验证,并且他们使用的服务不需要 shell。

  • 虽然这个答案完美地总结了不同的选项(并回答了问题),但我觉得有必要为这个用例指出一个有用的资源,它至少在库存 Debian 存储库中可用,在`titantools` 包中:`noshell `. 这个伪 shell 提供了审计功能,记录到 syslog 尝试使用带有 `noshell` 作为它的 shell 的帐户,同时仍然不允许访问。 (9认同)
  • sshd 被记录为检查以特定方式锁定的帐户(特别提到以 ! 开头的密码哈希),即使使用公钥身份验证也是如此。 (3认同)
  • 从某种意义上说,它不是最初的预期用途。我没有说不合时宜;我每天都看到它:) (2认同)

Jac*_*cob 13

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

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

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

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