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

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

我们大学实验室的电脑上装有 Ubuntu 14.04.3 LTS。今天我发现了一个严重的错误。

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

请注意,密码无法完全绕过 - 我最多可以跳过 7 个字符。如果我尝试跳过更多字符,则会显示消息“密码无效,请重试”出现。另请注意,密码子字符串的任何随机排列均不起作用。

如果我手动锁定屏幕并再次输入密码,也会发生这种情况。使用时ssh也存在同样的错误,谷歌搜索和搜索 Stack Overflow 也没有帮助。

我的问题是 - 如果可以修复,我该如何修复这个错误?我们的系统管理员在周一之前无法使用,这确实让我很困扰。

重要提示:请注意,所有学生的帐户都不在 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.

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

答案1

如果您没有管理员权限,您能做的事情就不多。

话虽如此,这似乎是由于管理员无能造成的。这听起来与使用经典crypt(3)函数的密码加密非常相似。来自man 3 crypt

crypt() 是密码加密函数。它基于数据
加密标准算法及其变体(其中包括
事物)来阻止使用密钥搜索的硬件实现。

key 是用户输入的密码。

salt 是从 [a-zA-Z0-9./] 集合中选择的两个字符串。这
字符串用于以 4096 种不同方式之一扰乱算法。

通过取前八个字符的最低 7 位
密钥,得到一个56位的密钥。  此 56 位密钥用于加密
重复一个常量字符串(通常是一个由所有
零)。返回值指向加密的密码,一系列
13 个可打印 ASCII 字符(前两个字符代表
salt 本身)。返回值指向静态数据,其内容
每次调用都会被覆盖。

这听起来熟悉吗?

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

也可以看看:现代 Unix/Linux 系统上的密码是否仍然限制为 8 个字符?

答案2

上个世纪,所有 Unixen 都曾以这种方式加密密码。丢弃第八个字符以外的所有内容,添加盐,通过哈希函数处理,就大功告成了。

这里最大的问题是加密密码是否会被潜在黑客获取。如果可以,那么问题就大了。如果不能,那也没什么大不了的。八个字符的密码有很多可能性。如果您必须进行实际登录尝试才能检查潜在密码,那么入侵将需要很长时间。此外,这些尝试会触发警报。

因此,这里最大的胜利是影子密码。然而,人们开始认为这还不够好,每个 Unix 变体都实现了自己的延长最大密码长度的方法。这些方法不再兼容。

有一段时间,如果您希望多台安装不同 Unix 版本的机器使用相同的密码,则必须使用旧类型的加密。

很可能这些计算机实验室最初建立时仍是如此。这种设置具有惯性。新客户端的设置是为了与服务器相匹配。新服务器的设置是为了与客户端相匹配。

如今,情况好多了。使用的 Unix 变体越来越少,而且它们之间的协作也越来越好。

我没有足够的能力告诉你如何解决这个问题,但它这是管理员的任务,不是你的任务。

相关内容