在几乎所有的 Linux 发行版(以及商业 *nix 系统)中,用户信息都存储在/etc/passwd,这是一个文本文件,包含用户的登录名、加密后的密码、唯一的数字用户 ID(称为 uid)、数字组 ID(称为 gid)、一个可选的注释字段(通常包含诸如真实姓名、电话号码等信息)、他们的主目录以及他们首选的 shell。 一个典型的条目在/etc/passwd看起来像这样
pete:K3xcO1Qnx8LFN:1000:1000:Peter Hernberg,,,1-800-FOOBAR:/home/pete:/bin/bash |
如你所见,它非常简单直接。每个条目都包含我上面描述的六个字段,每个字段用冒号分隔。 如果用户认证仅仅如此复杂,就没有必要编写这篇 HOWTO 了。
查看你的/etc/passwd,很可能你实际上看到的是这样的内容
pete:x:1000:1000:Peter Hernberg,,,1-800-FOOBAR:/home/pete:/bin/bash |
加密后的密码去哪里了? 在我告诉你它去哪里之前,需要做一些解释。
这个/etc/passwd文件,其中包含所有用户的信息,包括他们的加密密码,对所有用户都是可读的,这使得任何用户都可以获取系统上所有人的加密密码。 尽管密码是加密的,但密码破解程序却广泛可用。 为了对抗这种日益增长的安全威胁,影子密码被开发出来。
当系统启用影子密码后,/etc/passwd中的密码字段会被替换为“x”,而用户真正的加密密码则存储在/etc/shadow。 因为/etc/shadow仅对 root 用户可读,恶意用户无法破解其他用户的密码。 中的每个条目/etc/shadow包含用户的登录名、他们的加密密码以及一些与密码过期相关的字段。 一个典型的条目看起来像这样
pete:/3GJllg1o4152:11009:0:99999:7::: |
组信息存储在/etc/group。 其格式类似于/etc/passwd,条目包含组名、密码、数字 ID (gid) 以及逗号分隔的组成员列表等字段。 在/etc/group中的一个条目看起来像这样
pasta:x:103:spagetti,fettucini,linguine,vermicelli |
正如你从密码字段中的“x”看到的那样,组密码也可以被影子化。 尽管组几乎从不设置自己的密码,但值得注意的是,影子化的组密码信息存储在/etc/gshadow.