我经常听到它建议通过将用户帐户的外壳设置为/bin/false
. 但是,在我现有的 Linux 系统上,我看到大量现有帐户(所有这些帐户都是服务帐户)都有一个外壳/sbin/nologin
。
我从手册页中看到/sbin/nologin
向用户打印一条消息,说明该帐户已被禁用,然后退出。大概/bin/false
不会打印任何东西。
我还看到它/sbin/nologin
列在 中/etc/shells
,而/bin/false
没有。
手册页说 FTP 将禁用具有未列出的 shell 的用户的访问权限,/etc/shells
并暗示其他程序可能会这样做。这是否意味着有人可以使用具有/sbin/nologin
外壳的帐户进行 FTP 访问?
这里有什么区别?我应该使用其中哪一个来禁用用户帐户,以及在什么情况下?上市还有哪些其他影响/etc/shells
?
/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/false
in/etc/rsh
,这将禁止使用这些 shell 的用户chsh
在他们获得 shell 的不幸事件中使用更改他们的 shell。FTP 守护进程可能不允许使用不在 /etc/shells 中的 shell 访问用户,或者他们可能会使用他们希望的任何其他逻辑。在任何情况下都应避免运行 FTP,因为
sftp
(提供类似的功能)类似但安全。一些站点用于/sbin/nologin
禁用 shell 访问,同时通过将其放入/etc/shells
. 如果允许用户创建 cronjobs,这可能会打开一个后门。在任何一种情况下,
scp
都不会使用无效的 shell。scponly
在这种情况下可以用作外壳。此外,shell 的选择会影响
su -
(AKAsu -l
) 的操作。特别是,/sbin/nologin
如果是shell,输出将打印到stdout;情况并非如此/bin/false
。在任何一种情况下,运行命令su -cl
都会失败。最后,答案:
要禁用帐户,您应该做三件事。
/sbin/nologin
/etc/passwd
适合您的 UNIX 的锁定值(!
在 Linux 上,但*LOCKED*
在 FreeBSD 上)。这可以防止使用密钥进行 SSH 登录,除非UsePAM yes
在sshd_config
.usermod --expiredate 1
)。如果使用 PAM 处理登录,此步骤将阻止使用任何方法进行 SSH 登录。如果它是服务帐户,则足以确保其主目录中没有 SSH 授权密钥以及上面的前两个步骤。
DenyUsers
如果您担心有人可能会为此获得 SSH 证书或其他什么,您总是可以DenyGroups
在sshd_config
.在对此进行了一些研究之后,您使用的方法取决于您必须锁定的内容。如果用户使用此设置登录到 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
or/bin/true
最好阻止用户登录任何服务,同时/sbin/nologin
仍允许用户登录 SSH 或本地控制台以外的服务,同时向用户提供帐户处于非活动状态的反馈,最好在仅 SSH/本地时使用控制台需要被锁定。嗯,有没有人试图证明 /bin/false 会禁止 FTP 访问?
我刚刚将用户的 shell 更改为 /bin/false,并且能够正常 FTP。
我使用 /dev/null完全锁定用户(嗯,除了电子邮件,他们仍然可以 POP3)。