AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 519215
Accepted
Michael Hampton
Michael Hampton
Asked: 2013-06-28 20:58:22 +0800 CST2013-06-28 20:58:22 +0800 CST 2013-06-28 20:58:22 +0800 CST

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

  • 772

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

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

我还看到它/sbin/nologin列在 中/etc/shells,而/bin/false没有。

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

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

linux
  • 3 3 个回答
  • 46858 Views

3 个回答

  • Voted
  1. Best Answer
    Falcon Momot
    2013-06-28T21:34:14+08:002013-06-28T21:34:14+08:00

    /bin/false是一个实用程序,/bin/true它是 的伴侣,在某种抽象意义上有助于确保 unix 功能完整。然而,这些程序的紧急目的已经被发现;考虑 BASH 语句/some/program || /bin/true,$? = 0无论/some/program.

    正如您所指出的,紧急使用/bin/false是作为不允许登录的用户的空 shell。在这种情况下,系统的行为就像 shell 无法运行一样。

    POSIX(虽然我可能错了,它可能是 SUS)限制这两个命令除了返回适当的布尔值之外什么都不做。

    /sbin/nologin是一个 BSD 实用程序,具有与 (返回布尔值 false) 类似的行为/bin/false,但也打印输出,这/bin/false是禁止的。这应该有助于用户理解发生了什么,尽管实际上许多终端仿真器会在 shell 终止时简单地关闭,在某些情况下呈现消息几乎不可读。

    上市没有什么/sbin/nologin意义/etc/shells。的标准效果/etc/shells是列出当用户更改自己的 shell 时允许使用的程序chsh(并且没有可靠的理由将自己的 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都不会使用无效的 shell。 scponly在这种情况下可以用作外壳。

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

    最后,答案:

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

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

    如果它是服务帐户,则足以确保其主目录中没有 SSH 授权密钥以及上面的前两个步骤。DenyUsers如果您担心有人可能会为此获得 SSH 证书或其他什么,您总是可以DenyGroups在sshd_config.

    • 75
  2. Jacob
    2013-06-28T21:30:25+08:002013-06-28T21:30:25+08:00

    在对此进行了一些研究之后,您使用的方法取决于您必须锁定的内容。如果用户使用此设置登录到 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/falseor/bin/true最好阻止用户登录任何服务,同时/sbin/nologin仍允许用户登录 SSH 或本地控制台以外的服务,同时向用户提供帐户处于非活动状态的反馈,最好在仅 SSH/本地时使用控制台需要被锁定。

    • 13
  3. Jim Dunn
    2013-09-01T18:24:52+08:002013-09-01T18:24:52+08:00

    嗯,有没有人试图证明 /bin/false 会禁止 FTP 访问?

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

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

    • 3

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve