/bin/false是一个实用程序,是的附属程序,/bin/true从某种抽象意义上讲,它可以确保unix功能完整。但是,已经发现这些程序的紧急用途。考虑一下BASH语句/some/program || /bin/true,$? = 0无论返回,它始终将布尔值评估为true()/some/program。
/bin/false如所确定的,紧急使用用作不允许登录的用户的空外壳。在这种情况下,系统的行为将与外壳无法运行一样。
POSIX(尽管我可能是错的,而且可能是SUS)限制了这两个命令除了返回适当的布尔值外什么也不做。
/sbin/nologin是一个BSD实用程序,其行为类似于/bin/false(返回boolean false),但也打印输出,这/bin/false是禁止的。尽管实际上在外壳终止时,许多终端仿真器将简单地关闭,这在某些情况下使消息几乎始终无法读取,但这可以帮助用户理解发生了什么。
很少有目的上市/sbin/nologin在/etc/shells。的标准作用/etc/shells是列出chsh用户更改自己的shell时允许使用的程序(并且没有可信的理由将自己的shell更改为/sbin/nologin)。超级用户可以将任何人的外壳更改为任何东西。但是,您可能要在/sbin/nologin和/bin/false中都列出/etc/rsh,这将禁止具有这些shell的用户chsh在不幸的情况下使用它们来更改shell。
FTP守护程序可能不允许使用不在/ etc / shells中的shell的用户访问,或者它们可以使用他们希望的任何其他逻辑。在任何情况下都应避免运行FTP,因为sftp(提供相似的功能)相似但安全。某些站点用于/sbin/nologin禁用外壳程序访问,同时通过将sftp允许访问来禁用它/etc/shells。如果允许用户创建cronjob,则可能会打开后门。
无论哪种情况,scp都不会在无效的shell中运行。 scponly在这种情况下可以用作外壳。
另外,外壳的选择会影响su -(AKA su -l)的操作。特别是,/sbin/nologin如果是外壳,则将输出输出到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帐户进行身份验证并且所使用的服务不需要外壳程序,这将防止登录。