问题描述
我们学院的实验室电脑上有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变种较少,而且它们的合作更好。
我没有足够的能力告诉你如何解决这个问题,但这对管理员来说是一项任务,不适合你。