Linux学习之---用户登录


在用户登录系统时侯,用到最主要的文档就是/etc/passwd、/etc/shadow 两个文档。
介绍之前,我们可以查看这两个文档的基本情况:

1. [huang@myhost/etc]$ ls -ld ./passwd
2. -rw-r--r-- 1 root root 509 Sep 8 23:14 ./passwd
3. 
4. [huang@myhost/etc]$ ls -ld ./shadow
5. -rw------- 1 root root 287 Sep 8 23:56 ./shadow


用户登录简单流程:

用户在login中输入用户名和密码,系统首先会在/etc/passwd文件中查找用户名,如果文件里没有该用户名,则返回未登录状态;如果有该用户,从文件中读取用户UID、GID、用户家目录和shell。然后到/etc/shadow文件中核对该账户的密码是否与该文件中记录相匹配,匹配登录成功,用户转到shell输入下;否则转到未登录状态。从上面可以看到/etc/shadow文件普通用户是不可读的,只有root有读写权限,并且文件拥有者为root,文件所属用户组为root,这种权限设置主要就是为了保障记录有账号信息的文件安全,不能轻易被人看到。


下面来仔细看一下这两个文件内容(部分内容省略):

1. [huang@myhost/etc]$ vim ./passwd
2. ......
3. root:x:0:0:root:/root:/bin/bash
4. huang:x:1000:1000::/home/huang:/bin/bash
5. ......


可以清晰的看到,每一段对应着一个用户,而每个用户对应着7个字段,下面分别介绍每个字段的具体含义:

第一字段: 

huang           用户名

第二字段: 

x               表示用户密码存放在文件/etc/shadow里

第三字段: 

1000            用户huang的UID

第四字段: 

1000            表示用户huang所属的用户组ID为1000

第五字段: 

空              这个字段为用户信息说明栏,并没有很重要的用途

第六字段: 

/home/huang     用户huang的家目录,用户存放的文件和软件的配置的地方

第七字段: 

/bin/bash       表示用户huang使用的shell为bash,在/bin目录下

从上面7个字段的内容来分析一下root这一行:

用户名为:root,密码存放在/etc/shadow文件里面,用户UID和组GID都为0,用户说明信息栏为root,家目录为/root,使用的shell为/bin/bash。


下面我们再来看另外一个很重要的文件:/etc/shadow。为了保障系统的安全,这个文件默认权限:root读写,其他用户不可读。因此要查看该文件,必须得把权限提升到root级别.

1. [huang@myhost/etc]$ sudo vim ./shadow
2. root::15097::::::
3. bin:x:14871::::::
4. dbus:!:15097:0:99999:7:::
5. huang::15225:0:99999:7:::
6. avahi:!:15106::::::
7. hal:!:15106:0:99999:7:::
8. test:!:15225:0:99999:7:::


从上面看到,每一行都有9个字段,跟解释/etc/passwd文件一样,来解释这个文件每个字段的具体含义:

第一字段: 

huang   用户名

第二字段: 

空      密码字段,由于这台电脑为我个人电脑,我天生就是个懒人,所以我把密码给

                 删掉了,每次输入用户名再加ENTER键就OK了,纯粹图简单而已.但是如果是

                 服务器或者多人使用的电脑就不能这样搞了,切记! 

第三字段: 

15225   记录的是最近修改密码的时间。呃? 是真是假阿? 咋看上去这明明是数字,

                 怎么会是时间呢?解释一下,这是已经规定了的,这个数字代表的是从1970

                 年1月1日(作为1)算起到我最近修改密码的天数,如果大家有闲情可以算。

第四字段: 

0       表示在多少天后才能修改密码,意思就是说,在这个期限内,用户是不能自

                 己修改密码地。主要是给那些吃饱没处发泄的那些儿郎,闲的闷骚,没事把

                 密码反复的改过来改过去,改过来改过去。

第五字段: 

99999   表示账号过期的时间,99999表示该账号在我有生有之年有是有不会过期

                 的,你懂的!

第六字段: 

7       表示账号在过期7天之前就会给出通知

第七字段: 

空      表示账号失效宽限时间,意思就是说,用户在账号密码过期之后,在该字段

                 的天数之内还能暂时的等录,如果超过了这个天数,还没有修改密码,以后

                 就别等了!

第八字段: 

空      账号的失效日期,这个字段在有些收费服务中使用,像什么临时账号啊。格

                 式跟第三个字段一样,都是从1970年1月1日(为第1天)算起到终止的时间总

                 共的天数。

第九字段: 

空      该字段为保留字段,可能在某年某月某日新定义了某个新用途,俺现在就不

                 得而知了。


补充:

在正常情况下第二个字段是非空的,而是一串看起来是毫无规律的字服串,一般情况下是将用户密码经MD5处理后的摘要值,这个比直接存储用户密码要俺全一些,但是这也不是绝对的安全,而且并不是所有的都是经果MD5处理的,有些是用其他加密算法,其安全性本质上没有多少提高.当然,系统是允许用户自己更改算法的.