当前位置: 首页>>技术问答>>正文


我可以在Ubuntu 14.04上省略密码的最后几个字符

, ,

问题描述

我们学院的实验室电脑上有Ubuntu 14.04.3 LTS。我今天注意到了一个严重的错误。

我可以跳过密码的最后几个字符,仍然可以顺利登录。例如,如果我的密码是a1b2c3d4e5f6g7h8,我可以键入a1b2c3d4e并仍然登录。许多其他人也注意到了这个错误。

请注意,密码不能完全绕过 – 我能够跳过的最大值是7个字符。如果我再尝试跳过,则会显示“密码无效,请再试一次”消息。另请注意,密码子字符串的任何随机排列都不起作用。

如果我手动锁定屏幕并再次输入密码,也会发生这种情况。使用ssh时出现相同的错误,谷歌搜索和搜索Stack Overflow也无济于事。

我的问题是 – 如果我可以修复它,我该如何修复这个bug?我们的系统管理系统将在周一之前无法使用,这真的让我感到不安。

重要提示:请注意,没有学生的帐户位于sudoers列表中,只有sysadm具有root访问权限。此外,当我将ssh写入我自己的帐户时,以下显示:

Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-65-generic i686)

* Documentation:  https://help.ubuntu.com/

543 packages can be updated.
350 updates are security updates.

New release '16.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

更新:看起来重要的问题不是最后省略的字符数,而是可以使用密码的前八个或更多字符登录。

最佳解决办法

如果您没有管理员权限,那么您无能为力。

也就是说,这似乎是因为管理员无能。这听起来与使用经典crypt(3)功能的密码加密非常类似。来自man 3 crypt

crypt()  is  the password encryption function.  It is based on the Data
Encryption Standard algorithm with  variations  intended  (among  other
things) to discourage use of hardware implementations of a key search.

key is a user's typed password.

salt is a two-character string chosen from the set [a-zA-Z0-9./].  This
string is used to perturb the algorithm in one of 4096 different ways.

By taking the lowest 7 bits of each of the first  eight  characters  of
the  key, a 56-bit key is obtained.  This 56-bit key is used to encrypt
repeatedly a constant  string  (usually  a  string  consisting  of  all
zeros).   The returned value points to the encrypted password, a series
of 13 printable ASCII characters (the first  two  characters  represent
the salt itself).  The return value points to static data whose content
is overwritten by each call.

这听起来很熟悉吗?

最近没有Ubuntu系统默认使用它。您的管理员必须手动配置密码设置才能使用此密码。或者,他们可能正在使用外部身份验证(LDAP或类似),并且没有或无法安全地配置它。

另请参见:Are passwords on modern Unix/Linux systems still limited to 8 characters?

次佳解决办法

曾经有一段时间,在上一个千年里,所有Unixen都以这种方式加密了他们的密码。丢弃第八个字符以外的所有内容,添加salt,删除哈希函数并完成。

这里的一个重要问题是,加密密码是否可供潜在黑客使用。如果是,这是一个大问题。如果他们不是,那真的不是什么大问题。八个字符密码有很多可能性。如果您必须进行实际的登录尝试以检查潜在的密码,那么闯入将花费很长时间。此外,尝试将触发警报。

所以,这里的最大胜利是影子密码。尽管如此,人们开始认为这还不够好,并且每个Unix变体都实现了自己扩展最大密码长度的方式。这些不再兼容。

有一段时间,如果您希望具有不同Unix变体的多台计算机使用相同的密码,则必须使用旧的加密类型。

当这些计算机实验室首次建立时,很可能仍然如此。而这种类型的设置具有惯性。设置新客户端以匹配服务器。设置新服务器以匹配客户端。

今天,事情变得更好。使用的Unix变种较少,而且它们的合作更好。

我没有足够的能力告诉你如何解决这个问题,但这对管理员来说是一项任务,不适合你。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7138.html,未经允许,请勿转载。