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

我经常听说它build议通过将其shell设置为/bin/false来禁用用户帐户。 但是,在我现有的Linux系统上,我发现大量现有帐户(所有服务帐户)都有一个/sbin/nologin的shell。

我从man页面看到, /sbin/nologin向用户打印一条消息,说明帐户已禁用,然后退出。 推测/bin/false将不会打印任何东西。

我也看到/sbin/nologin列在/etc/shells ,而/bin/false不是。

该手册页说,FTP将禁止/etc/shells列出的shell的用户访问,并暗示其他程序可能会执行相同的操作。 这是否意味着有人可以使用以/sbin/nologin作为shell的帐户进行FTP?

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

/bin/false是一个实用程序,与/bin/true ,这在某种抽象意义上是有用的,以确保unix是function完整的。 然而,这些scheme的紧急目的已经find; 考虑一下BASH语句/some/program || /bin/true /some/program || /bin/true ,无论返回/some/program ,它总是将布尔值评估为true( $? = 0 )。

正如您所识别的,紧急使用/bin/false对于不允许login的用户来说是一个空shell。在这种情况下,系统的行为与shell运行失败一样。

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

/sbin/nologin是一个BSD实用程序,其行为与/bin/false (返回boolean false)类似,但是也打印输出,因为禁止/bin/false 。 这应该可以帮助用户了解发生了什么事情,尽pipe在实践中许多terminal仿真器在shell终止时会简单地closures,在某些情况下无论如何渲染消息都是不可读的。

/etc/shells列出/sbin/nologin目的很less。 /etc/shells的标准作用是列出当用户改变他们自己的shell(并且没有可信的理由将自己的shell改为/sbin/nologin )时允许使用的程序。 超级用户可以将任何人的shell改成任何东西。 但是,您可能希望在/etc/rsh列出/sbin/nologin/bin/false ,这将禁止具有这些shell的用户在使用chsh的不幸事件中更改其shell。

FTP守护进程可能会禁止访问不在/ etc / shells中的shell的用户,也可能使用他们希望的任何其他逻辑。 在任何情况下都要避免运行FTP,因为sftp (它提供了类似的function)是相似但是安全的。 有些站点使用/sbin/nologin来禁用shell访问,同时允许sftp访问通过放在/etc/shells 。 这可能会打开后门,如果允许用户创buildcronjobs。

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

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

最后,答案是:

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

禁用帐户的第三种方法是将帐户到期date字段设置为古代date(例如usermod --expiredate 1 )。 这将防止login,以防您的设置允许用户在没有密码的情况下针对他们的unix账户进行身份validation,并且他们使用的服务不需要shell。

在对此进行一些研究之后,您使用的方法取决于您必须locking的内容。 如果用户使用此设置login到shell,则会显示一条消息,显示This account is currently unavailable. 请注意,您可以通过至less在RHEL衍生产品上创build文件/etc/nologin.txt来更改此文件。

如你所知, /bin/false不是一个shell。 它们工作的方式是返回false,在二进制退出后立即退出。 请注意, /bin/true会达到相同的效果。

关于你的FTP问题:是的,你是正确的,因为设置为/sbin/nologin的shell将允许用户login到FTP,而/bin/false/bin/true将完全阻止用户login到任何服务。

因此, /bin/false/bin/true最好防止用户login到任何服务,而/sbin/nologin仍然允许用户loginSSH或本地控制台以外的服务,同时向用户提供反馈帐户处于非活动状态,最好只在需要lockingSSH /本地控制台时使用。

呃,有没有人试图certificate/ bin / false会禁止FTP访问?

我只是将我的用户的shell更改为/ bin / false,并且能够很好地使用FTP。

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