我们在我大学的实验室 PC 上安装了 Ubuntu 14.04.3 LTS。我今天注意到一个严重的错误。
我可以跳过密码的最后几个字符,仍然可以顺利登录。例如,如果我的密码是a1b2c3d4e5f6g7h8
,我可以输入a1b2c3d4e
并仍然登录。许多其他人也注意到了这个错误。
请注意,密码不能完全绕过 - 我能够跳过的最大字符数是 7 个字符。如果我再尝试跳过,则会出现消息“密码无效,请重试”。另请注意,密码子字符串的任何随机排列都不起作用。
如果我手动锁定屏幕并再次输入密码,也会发生这种情况。使用时也存在同样的错误ssh
,谷歌搜索和搜索 Stack Overflow 没有帮助。
我的问题是 - 如果我能修复它,我该如何修复它?我们的 sysadm 在星期一之前将无法使用,这让我很困扰。
重要提示:请注意,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.
Run Code Online (Sandbox Code Playgroud)
更新:看起来重要的问题不是最后省略的字符数,而是可以使用密码的前八个或更多字符登录的事实。
mur*_*uru 28
如果您没有管理员访问权限,则无能为力。
也就是说,这似乎是因为管理员无能。这听起来与使用经典crypt(3)
函数的密码加密非常相似。来自man 3 crypt
:
crypt() 是密码加密函数。它基于数据 带有变体的加密标准算法(除其他外) 事情)以阻止使用关键搜索的硬件实现。 key 是用户键入的密码。 salt 是从 [a-zA-Z0-9./] 集合中选择的两个字符的字符串。这个 string 用于以 4096 种不同方式之一扰乱算法。 通过取前八个字符中每个字符的最低 7 位 密钥,得到一个56位的密钥。 这个 56 位密钥用于加密 重复一个常量字符串(通常是一个由所有字符串组成的字符串) 零)。返回值指向加密后的密码,一系列 13 个可打印的 ASCII 字符(前两个字符代表 盐本身)。返回值指向其内容的静态数据 被每次调用覆盖。
这听起来很熟悉吗?
没有最近的 Ubuntu 系统默认使用它。您的管理员必须手动配置密码设置才能使用它。或者,他们可能正在使用外部身份验证(LDAP 或类似的)并且没有或无法安全地进行配置。
另请参阅:现代 Unix/Linux 系统上的密码是否仍限制为 8 个字符?
在过去的一千年里,曾经有一段时间所有的 Unixen 都以这种方式加密他们的密码。丢弃超出第八个字符的所有内容,添加盐,通过哈希函数并完成。
这里的一个大问题是加密的密码是否可供潜在黑客使用。如果他们是,这是一个大问题。如果他们不是,那真的没什么大不了的。八个字符的密码有很多可能性。如果您必须进行实际登录尝试以检查潜在密码,那么闯入将需要很长时间。此外,这些尝试会触发警报。
因此,这里的最大胜利是影子密码。尽管如此,人们开始认为这还不够好,每个 Unix 变体都实现了自己的扩展密码最大长度的方式。这些不再兼容。
有一段时间,如果您希望具有不同 Unix 变体的多台机器使用相同的密码,则必须使用旧类型的加密。
很有可能,当这些计算机实验室刚成立时,情况仍然如此。这种类型的设置具有惯性。设置新客户端以匹配服务器。设置新服务器以匹配客户端。
今天,情况好多了。使用的 Unix 变体较少,它们之间的协作更好。
我没有足够的能力告诉你如何解决这个问题,但这是管理员的任务,而不是你。
归档时间: |
|
查看次数: |
2567 次 |
最近记录: |