2.1.2 etcpasswd和etcshadow
前面已经说明,在登录Linux时必须要输入用户名和密码。而系统用来记录用户名、密码最重要的两个文件就是etcpasswd和etcshadow。以下是etcpasswd中的几行内容:
- [root@localhost ~]# cat etcpasswd
- root:x:0:0:root:/root:/bin/bash
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- adm:x:3:4:adm:/var/adm:/sbin/nologin
- lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
- ......
- (略去内容)......
可以看到,虽然每行的内容不一样,但格式却是一致的,即每行都是使用6个分隔号“:”隔开的7列字符串。每一列所代表的含义如表2-1所示。
表2-1 etc/passwd内容格式说明
从表2-1中可以了解到,etcpasswd的第二列最早是在UNIX系统中用于记录密码的,但是这其中存在一个问题:由于每个用户都需要有读取这个文件的权限,而随着现代密码破解技术的发展,即便是加密的密码,也有被破解的可能,所以将密码从这个文件中剥离出去是非常必要的。
目前Linux的做法是,将密码相关的信息保存到etcshadow中,而且默认只有root用户才有读的权限,其他人完全没有读取这个文件的可能。这种密码保存方式被称为“影子密码”。看一下etcshadow中的第一行内容:
- [root@localhost ~]# cat etcshadow
- root:$1$JjIvgikC$YjiVyo3wVahvrwr0IETTV/:15620:0:99999:7:::
- ......
- (略去内容)......
与etcpasswd类似,etcshadow也是由冒号“:”隔开的,不同的是这里是8个冒号隔开的9列。每一列代表的含义如表2-2所示。
表2-2 etcshadow内容格式说明