2.1.2 etcpasswd和etcshadow

前面已经说明,在登录Linux时必须要输入用户名和密码。而系统用来记录用户名、密码最重要的两个文件就是etcpasswd和etcshadow。以下是etcpasswd中的几行内容:


  1. [root@localhost ~]# cat etcpasswd
  2. root:x:0:0:root:/root:/bin/bash
  3. bin:x:1:1:bin:/bin:/sbin/nologin
  4. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  5. adm:x:3:4:adm:/var/adm:/sbin/nologin
  6. lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  7. ......
  8. (略去内容)......

可以看到,虽然每行的内容不一样,但格式却是一致的,即每行都是使用6个分隔号“:”隔开的7列字符串。每一列所代表的含义如表2-1所示。

表2-1 etc/passwd内容格式说明

2.1.2 etcpasswd和etcshadow - 图1

从表2-1中可以了解到,etcpasswd的第二列最早是在UNIX系统中用于记录密码的,但是这其中存在一个问题:由于每个用户都需要有读取这个文件的权限,而随着现代密码破解技术的发展,即便是加密的密码,也有被破解的可能,所以将密码从这个文件中剥离出去是非常必要的。

目前Linux的做法是,将密码相关的信息保存到etcshadow中,而且默认只有root用户才有读的权限,其他人完全没有读取这个文件的可能。这种密码保存方式被称为“影子密码”。看一下etcshadow中的第一行内容:


  1. [root@localhost ~]# cat etcshadow
  2. root:$1$JjIvgikC$YjiVyo3wVahvrwr0IETTV/:15620:0:99999:7:::
  3. ......
  4. (略去内容)......

etcpasswd类似,etcshadow也是由冒号“:”隔开的,不同的是这里是8个冒号隔开的9列。每一列代表的含义如表2-2所示。

表2-2 etcshadow内容格式说明

2.1.2 etcpasswd和etcshadow - 图2