现代 Unix/Linux 系统上的密码是不是仍限制为 8 个字符?

Posted

技术标签:

【中文标题】现代 Unix/Linux 系统上的密码是不是仍限制为 8 个字符?【英文标题】:Are passwords on modern Unix/Linux systems still limited to 8 characters?现代 Unix/Linux 系统上的密码是否仍限制为 8 个字符? 【发布时间】:2011-01-11 21:16:58 【问题描述】:

多年前,Unix 密码被限制为 8 个字符,或者如果您将密码设置为超过 8 个字符,那么额外的密码不会有任何影响。

在大多数现代 Unix/Linux 系统上仍然如此吗?

如果是这样,大多数系统何时可以使用更长的密码?

是否有一种简单的方法可以判断给定系统是否支持更长的密码,如果支持,有效最大值(如果有)是多少?

我已经对此主题进行了一些网络搜索,但实际上找不到任何确定的内容;出现的大部分内容来自 2000 年代初期,当时我认为 8 个字符的限制仍然很普遍(或者普遍到足以保证遵守该限制)。

【问题讨论】:

【参考方案1】:

虽然original DES-based algorithm 仅使用密码的前 8 个字符,但 Linux、Solaris 和其他较新的系统现在还支持其他密码哈希算法,例如没有此限制的 MD5。如果您的网络包含旧系统并且使用 NIS,则有时需要继续使用旧算法。如果您只输入 >8 个字符的密码的前 8 个字符,系统就会登录,则表明您仍在使用旧的基于 DES 的算法。

由于是哈希算法,MD5没有内在限制。不过各种接口一般都会强加some limit of at least 72 characters。

虽然最初加密的密码存储在一个全球可读的文件 (/etc/passwd) 中,但现在它通常存储在一个单独的影子数据库中 (例如 /etc/shadow),只有 root 才能读取。因此,算法的强度不再像以前那样重要。但是,如果 MD5 不足,可以在某些系统上使用 Blowfish 或 SHA。并且 Solaris 支持可插拔密码加密模块,允许您使用any crazy scheme。当然,如果您使用的是 LDAP 或其他一些共享用户数据库,那么您需要选择一个所有系统都支持的算法。

【讨论】:

很棒的信息和链接 - 感谢您的回答!有很多好的答案,所以我最终“接受”了那个给我代码来确定使用 > 8 的密码是否安全的答案,但我对所有好的答案都进行了评价,包括你的。谢谢! 没问题。顺便说一句,使用超过 8 个字符的密码总是安全,只是如果你的密码是 ***,它也可以接受 stackoverload。添加额外的字符可能更容易记住并且不会降低安全性。另请记住,所有算法都可能存在哈希冲突,并且会接受多个密码,尤其是当密码很长时。【参考方案2】:

glibc2(任何现代 Linux 发行版)中,密码加密功能可以使用 MD5/SHA-xxx(由魔法盐前缀引发),然后将其视为重要的 all输入字符(参见man 3 crypt)。对于您的系统的简单测试,您可以尝试以下操作:

#!/bin/perl -w
my $oldsalt = '@@';
my $md5salt = '$1$@@$';
print crypt("12345678",  $oldsalt) . "\n";
print crypt("123456789", $oldsalt) . "\n";
print crypt("12345678",  $md5salt) . "\n";
print crypt("12345678extend-this-as-long-as-you-like-0", $md5salt) . "\n";
print crypt("12345678extend-this-as-long-as-you-like-1", $md5salt) . "\n";

(在我的系统上给出)

@@nDzfhV1wWVg
@@nDzfhV1wWVg
$1$@@$PrkF53HP.ZP4NXNyBr/kF.
$1$@@$4fnlt5pOxTblqQm3M1HK10
$1$@@$D3J3hluAY8pf2.AssyXzn0

其他 *ix 变体支持类似的 - 例如crypt(3) since at least Solaris 10。 但是,它是一个非标准扩展 - POSIX does not define it。

【讨论】:

使用 $1$ 的 md5 哈希是 22 年的。在相当长的一段时间内,它曾经默认用于散列 shadow,但现在不安全。 2010 年没有人认真使用它。旧地穴使用 des,并非所有字符都很重要。 1995 年左右并没有那么糟糕,密码很好。 @AnttiHaapala 当然是!这只是最简单的示例 - crypt 的(链接的)联机帮助页为算法提供了其他值,例如 SHA-256 的 $5$ 和 SHA-512 的 $6$。【参考方案3】:

不适用于 Linux。如果禁用 MD5 哈希,则只有 8 个。

http://www.redhat.com/docs/manuals/linux/RHL-8.0-Manual/security-guide/s1-wstation-pass.html

您还可以管理执行更长和更复杂密码的策略。

这里讨论了完整的长度:

http://www.ratliff.net/blog/2007/09/20/password-length/

【讨论】:

现在 Linux 还使用 MD5 吗?我问是因为它被认为是坏了。 @Steven:IIRC,是的,它仍然默认使用 MD5。然而,它使用了相当好的盐,所以它对彩虹表攻击有点安全,但没有它应该的那么安全。 有趣。我依稀记得有些 Unix 变体支持不止一种哈希算法。 MD5 并未因使用散列密码而“损坏”;仍然没有比蛮力更好的方法来反转短输入的 MD5 哈希;较大文件的 MD5 哈希冲突可以构造成可行的,但这并不意味着它对任何应用程序都是不安全的。 部分系统现在也支持 Blowfish 和基于 SHA 的哈希。【参考方案4】:

你问的是crypt算法吗?

http://linux.die.net/man/3/crypt

“通过获取密钥前八个字符中每个字符的最低 7 位...”

“这个函数的 glibc2 版本有以下附加特性。......这里的整个密钥都很重要(而不是只有前 8 个字节)。”

这里提示了这种变化发生在多长时间之前。

Glibc 2 HOWTO
  Eric Green, ejg3@cornell.edu
  v1.6, 22 June 1998

【讨论】:

【参考方案5】:

您会发现这个article 很有趣。有一种叫做 PAM(Password Authentication Module)的东西,它通过一系列模块(在/etc/pam.d/passwd/etc/pam.conf 中配置)运行您的密码,以确定密码是否有效。

【讨论】:

【参考方案6】:

我认为大约是在 Linux 上实际密码从 /etc/passwd 移动到 shadow 的时候。我猜在 2000 年左右,Red Hat 6.x 的密码很长 IIRC。 2000 年左右还有很多旧的 SUN,它们有密码和用户名限制。

【讨论】:

以上是关于现代 Unix/Linux 系统上的密码是不是仍限制为 8 个字符?的主要内容,如果未能解决你的问题,请参考以下文章

Unix/Linux系统时间函数API

软件开发知识体系

John the Ripper (“JtR”)密码破解工具

Unix, Linux 和MacOS

Unix/Linux 符号链接是不是支持回退?

CTF_Misc题目分析2_linux系统密码