9.9.2 加密的口令
把加密口令放在这里讲解似乎显得有点不合时宜。正如读者所看到的,在passwd的口令字段中,只有一个x摆放在那里。难道用户的口令就是x吗?这显然不可能,由于passwd文件需要对所有用户可读,因此另找一个地方存放口令显得很有必要。如今绝大多数系统都将用户口令经过加密后存放在/etc/shadow文件中(这个文件只对root可读),然后在passwd文件的口令字段放入一个x作为占位符。
无论加密口令被存放在哪,其原理总是相同的。大部分Linux发行版可以识别多种不同的加密算法。通过分析加密后的数据,系统可以知道使用的是哪一种算法。因此,可以在一套系统上使用多种不同的加密方式。
目前在Linux上使用最广泛的加密算法是MD5。MD5可以对任意长度的口令进行加密,并且不会产生损失,所以一般来说,口令越长越安全。无论加密前的口令多长,经过MD5加密之后的长度是一个固定值(34个字符)——数学总是能让人惊叹。在加密过程中,MD5算法会随机加入一些被称作“盐(salt)”的数据,从而使一个口令可以对应多个不同的加密后的形式。因此,检查加密后的口令并不会发现两个用户使用相同口令这样的情况。
常用的加密算法总能够通过前缀来识别。MD5算法总是以“$1$”开头,另一种常用的加密算法Blowfish以“$2a$”开头。不管使用哪一种算法,都应该使用passwd工具设置相应字段——没有人会选择纸和笔来完成这项工作。