多年前以前,Unix密码限制为8个字符,或者如果密码长度超过8个字符,额外的密码不会有任何区别。
大多数现代Unix / Linux系统仍然如此吗?
如果是这样,在大多数系统上何时可以使用更长的密码?
是否有一种简单的方法可以判断给定系统是否支持更长的密码,如果是,那么有效最大值(如果有的话)是什么?
我已经对这个主题进行了一些网络搜索,并且找不到任何确定的内容;所提出的大部分内容来自于21世纪初,当时我认为8字符限制仍然很常见(或者通常足以保证坚持这个限制)。
答案 0 :(得分:14)
虽然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或其他共享用户数据库,则需要选择所有系统都支持的算法。
答案 1 :(得分:14)
在 glibc2 (任何现代Linux发行版)中,密码加密功能可以使用MD5 / SHA-xxx(由魔术盐前缀激发),然后将其视为重要所有输入字符(参见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。
答案 2 :(得分:5)
不适用于Linux。如果你禁用MD5 Hashing,它只有8。
http://www.redhat.com/docs/manuals/linux/RHL-8.0-Manual/security-guide/s1-wstation-pass.html
您还可以管理强制执行更长和更复杂密码的策略。
这里讨论全长:
答案 3 :(得分:5)
您是否在询问crypt
算法?
http://linux.die.net/man/3/crypt
“通过获取密钥的前八个字符中每个字符的最低7位...”
“此函数的glibc2版本具有以下附加功能....这里的整个键很重要(而不是前8个字节)。”
这是一个关于多久以前这种变化发生的提示。
Glibc 2 HOWTO
Eric Green, ejg3@cornell.edu
v1.6, 22 June 1998
答案 4 :(得分:1)
您会发现这个感兴趣的article。有一种称为PAM(密码验证模块)的东西,它通过一系列模块(在/etc/pam.d/passwd
或/etc/pam.conf
中配置)运行您的密码,以确定密码是否有效。
答案 5 :(得分:0)
我认为在Linux上将实际密码从/ etc / passwd移动到shadow时。我估计2000年左右,Red Hat 6.x有长密码IIRC。大约2000年,仍然有很多旧的SUN,他们有密码和用户名限制。