用户配置文件 /etc/passwd 和密码配置文件 /etc/shadow 详解

用户配置文件 /etc/passwd 和密码配置文件 /etc/shadow 详解

一, 用户配置文件和密码配置文件

  • 认识 /etc/passwd 和 /etc/shadow
    这两个文件可以说是 Linux 系统中最重要的文件之一。如果没有这两个文件或者这两个文件出了问题,则无法正常登录系统。

二, 解说用户配置文件 /etc/passwd

注: 每创建一个用户都会在这个文件里面增加一行记录。

[root@localhost ~]# cat /etc/passwd
root❌0:0:root:/root:/bin/bash
....... //上面代码是前一行,下面代码是最后两行(我自己创建的用户),中间这省略的部分是当我们安装完系统之后自动存在的用户。
user1❌1000:1000::/home/user1:/bin/bash
user2❌1001:1002::/home/user2:/bin/bash

代码说明: 每行记录代表一个用户。每个用户分为 7 个字段 (用: 分割为 7 段)。

  • 第一段为用户名 (如第一行中的 root 就是用户名), 它代表用户账号的字符串。用户名中的字符可以是大小写字母,数字,减号 (不能出现在首位), 点或下划线,其他字符不合法。虽然用户名中可以出现点,但不建议使用,尤其是首位。另外,减号不建议使用,容易混淆。

  • 第二段存放的是该账号的口令。这里为什么是 x 呢? 早期的 Unix 系统口令确实存放在这里,但基于安全因素,后来存放在 /etc/shadow 中 (下面会详细介绍 /etc/shadow 文件),这里用 x 代替。

  • 第三段为一个数字,这个数字代表用户标识列,也称为 uid(它属于一个组,组 id 是第四段)。系统就是通过这个数字识别用户身份的。这里的 0 就是 root, 也就是说我们可以修改 user1 用户的 uid 为 0,那么系统会认为 root 和 test 为同一个账户。uid 的取值范围是 0-65535(但实际上已经可以支持到 4294967294),0 代表超级用户 (root) 的标识列,Centos7 的普通用户标识号从 1000 开始。

  • 第四段也是数字,表示组标识号,也称为 gid。这个字段对应着 /etc/group 中的一条记录,其实 /etc/group 和 /etc/passwd 基本类似。

  • 第五段为注释说明没有实际的意义。通常记录该用户的一些属性,例如姓名,电话,地址等。我们可以使用 chfn 命令来更改这些信息。

  • 第六段是用户的家目录,当用户登陆时,就处在这个目录下。root 的家目录是 /root,普通用户的家目录是 /home/username。用户家目录是可以自定义的。比如, 建议一个普通用户 test1,要想让 test1 的家目录在 /data 目录下,只要将 /etc/passwd 文件中对应该用户那行中的本字段修改为 /data 即可。

  • 第七段为用户的 shell。用登录后,要启动一个进程,用来将用户下达的指令传给内核,这就是 shell。Linux 的 shell 有 sh,sch,ksh,tcsh,bash 等多种,而 RedHat/CentOS 的 shell 就是 bash。查看 /etc/passwd 文件,该字段中除了 /bin/bash,还有很多 /sbin/nologin,默认是 /bin/bash。

三, 解说密码配置文件 /etc/shadow

注: 这个文件是专门用来控制用户的密码的。

[root@localhost ~]# cat /etc/shadow |head -n 3  //head -n3 表示前3行数据,|表示管道符,它的作用是把前面的命令的输出在输入给后面的命令。    
root:o5XXMECZgVxLG.lh$fQueq1w3ZSgWXQU0kDpjcHYNz6kNOc9ZgZAc3lyouDA1wUM32q9OGkgktV.GmHqQZwxqC27Radb6Ab042In2k.::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::

代码说明:每行记录代表一个用户。每个用户分为 9 个字段 (用: 分割为 9 段)。

  • 第一段为用户名, 与 /etc/passwd 对应。
  • 第二段为用户密码,是该账号的真正密码。 !! 代表这个用户没有密码,没有密码说明这个用户不能登录。***** 代表这个密码是被锁定的不能用的,也是不能够登录的。这里的密码已经加密,为了防止黑客解密。所以,将该文件属性设置为 000,但 root 账户是可以访问或更改的。使用命令 ls
    -l 查看该文件的权限,示例命令如下: [root@localhost ~]# ls -l /etc/shadow
    ———-. 1 root root 693 10 月 25 23:23 /etc/shadow
  • 第三段为上次更改密码的日期,这个数字以 1970 年 1 月 1 日和上次更改密码的日期为基准计算而来的。例如, 上次更改密码的日期为 2012 年 1 月 1 日,则这个值就是
    365*(2012-1970)+(2012-1970)/4+1=15341。如果是闰年,则有 366 天。

  • 第四段为要过多少天才可以更改密码,默认是 0,即不受限制。

  • 第五段为密码多少天后到期,即在多少天内必须更改密码,例如,这里设置为 30,则 30 天内必须更改一次密码;否则,将不能登录系统。默认是 99999,可以理解为永久不更改密码。

  • 第六段为密码到期前的警告期限。若这个值设置成 7,则表示当 7 天后密码过期时,系统就发出警告,提醒用户他的密码将在 7 天后到期。

  • 第七段为账号失效期限。如果这个值设置成 3, 则表示密码以及过期,然而用户并没有在到期前修改密码,那么再过 3 天,这个账号便失效,即锁。

  • 第八段为账号的生命周期,跟第三段一样,这个周期是按距离 1970 年 1 月 1 日算起。它表示,账号在这个日期前可以使用,到期后账号将作废。

  • 第九段作为保留用的,没有什么意义。