如何检查密码是否为空?

如何检查密码是否为空?

看看 script-kiddies 的所有 ssh 登录尝试,我假设有一些连接到互联网的混乱系统设置了无密码帐户。

但是如何检查 Linux/Unix 系统中是否有此类帐户(可能是由损坏的安装程序脚本、混乱的管理员或类似的东西创建的)?

作为第一个近似,我可以想到类似的东西:

$ grep '^[^:]\+::' /etc/passwd /etc/shadow

使用空密码打印所有帐户 - 但也许在具体系统上,此类帐户甚至不是问题,因为没有程序接受空条目 - cf 密码(5):

但是,如果密码字段为空,某些读取 /etc/passwd 文件的应用程序可能会决定根本不允许任何访问。

但是散列呢空的字符串作为密码(例如crypt(""))?

如何检查它们?

当使用更复杂的帐户数据库(NIS、LDAP,...)时如何检查帐户?

答案1

查找加密的空密码或弱密码的一种简单方法是使用密码破解程序,例如 开膛手约翰

如果您使用 NIS 或 LDAP,您首先需要从数据库中提取密码散列 - 一种方法是通过getent,请参阅来自 maxschlepzig 的回答

答案2

解决问题的最后一部分:

getent抽象出数据库细节,例如您可以使用

$ getent passwd
$ getent shadow

独立于配置的机制(文件、LDAP、NIS ...)来访问这些数据库。

相关内容