2011-06-16 66 views

回答

1

您可能需要了解有关Linux密码存储格式的一些背景信息 - 特别是在您实际实现自己的密码配置之前,尤其需要配置阴影密码。

在使用glibc2的Linux发行版上,散列函数有一个'魔术位',并以salt为前缀。

魔术位以 '$ X $' 开始关闭,并用于确定已使用的散列函数:

  • $ 1 $为MD5
  • $为河豚
  • $ 2,
  • $ 5 $对于SHA-256和
  • $ $ 6 SHA-512

(如NetBSD的其他UNIX系统可能有这种不同的值)。

魔术比特然后跟随8比特构成盐,并可选地由另一个“$”终止。在这个和下一个“$”之间,你会发现实际的密码散列。

现在几乎所有的现代Linux系统都不会将密码存储在世界可读的/etc/passwd中。相反,密码在/etc/shadow中被映射,其中只有root允许读取权限。如果使用的是密码密码方案,/etc/passwd文件将显示一个字符,如'*'或'x'而不是密码。

一个典型的密码在/etc/shadow的格式将是这样的:

$a:$b:$c:$e:$f:$g:$h:$i 

其中:

$一个:用户名

$ B:盐和散列密码(如上所述)。如果这是“NP”或“!”或null,那么这意味着该帐户没有密码。 “LK”或“*”表示账户被锁定,用户将无法登录。 “!!“表示口令已过期

$ C:自从上次密码更改的划时代

$ d天:天,直到发生变化,允许

:变更前的天数需要

$ f:过期天数警告

$ G:帐户之前天没有活性

$ H:天纪元以来,当帐户到期

$ I:留作将来使用。 http://configuration.logfish.net/index.php/etc/shadow

参考文献::

一个阴影密码文件的例子可以在以下网址找到

crypt(3) - Linux man page

Why shadow your passwd file?

Understanding Linux Password Hashes

Shadow password on wikipedia

1

尝试使用PHP crypt function

+0

'crypt()'函数是否总是使用与OS使用的盐相同的salt? – powerboy 2011-06-16 05:08:22

+0

@powerboy:不;你必须自己提供盐。 – icktoofay 2011-06-17 02:49:12