我经常听说它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)。