一、用户信息文件
用户信息文件的存放路径是 /etc/passwd
,用 vim 查看一下文件内容:
乍一看好像眼花缭乱的,没有头绪。不过没关系,我们可以利用帮助命令 man 5 passwd
来看一下 passwd 配置文件的作用。
主要就是看图中圈出来的那两行,它告诉我们,passwd 配置文件的每一行代表一个用户,而每个用户信息的格式如下:
account:password:UID:GID:GECOS:directory:shell
可以看到,每个用户信息有 7 个字段,字段之间用冒号隔开,下面分别解释一下这 7 个字段的含义:
-
第 1 字段:用户名称
-
第 2 字段:密码标志。密码标志位如果是 x,代表该用户有密码,密码文件存放在
/etc/shadow
中;如果密码标志位为空,系统会认为该用户没有密码,在登录的时候不用输入密码就可以登录,但是这种方式只能在本地登录,不能通过远程登录。 -
第 3 字段:用户 ID。ID 范围不同代表的用户类型不同:
-
- 0:超级用户
- 1-499:系统用户(伪用户)
- 500-65535:普通用户
伪用户是供系统启动一些命令或服务调用的,对于系统至关重要,这些用户千万不能删除!
系统其实是通过用户 ID 来识别不同的用户的。如果你想把一个普通用户变成超级用户,只需要把该用户的 ID 改成 0 就可以,这时系统会把所有 ID 相同的用户当成一个用户来看待。
-
第 4 字段:GID(用户初始组 ID)
-
每一个用户被创建的时候,系统都会创建一个和这个用户名相同的组,该用户默认属于这个组。用户的初始组可以更改,但是只能有一个;还有一个概念是「附加组」,是指用户可以加入多个其他的用户组,并拥有这些组的权限,用户的附加组可以有多个。
如果你想知道该用户的初始组 ID 到底对应着哪一个组,可以查看
/etc/group
文件。 -
第 5 字段:备注。
-
第 6 字段:用户的家目录。即用户的初始登录位置。普通用户的家目录是
/home/用户名/
,超级用户的家目录是/root/
。 -
第 7 字段:登录之后的 Shell。Shell 就是 Linux 的 命令解释器。如果想禁用某个用户,可以将该用户的命令解释器改成除
/bin/bash
以外的任何字符串,这样,用户就无法登录了。如果想解除禁用,把他的命令解释器再改成/bin/bash
就可以了。
二、影子文件
顾名思义,该文件是前面讲过的用户信息文件的影子文件,存放路径是 /etc/shadow
。
这个文件的权限是 000,但是 root 用户不受权限的限制,可以读写该文件的内容。我们先用 vim 查看一下文件内容:
与用户信息文件一样,该文件也是每一行代表一个用户,不同的是,该文件的每一行有 9 个字段,下面一一解释这 9 个字段的含义。
-
第 1 字段:用户名。
-
第 2 字段:加密密码。加密算法为 SHA512 散列加密算法,如果密码位是「!!」或「*」,代表没有密码,不能登录。
-
第 3 字段:密码最后一次的修改日期。使用 1970 年 1 月 1 日作为标准时间。每过一天时间戳加 1。
-
第 4 字段:允许修改密码的日期间隔,以「天」为单位。比如说:如果是 0,则表示没有限制;如果是 10,则表示假如今天修改了密码,要等到至少 10 天之后才能再次修改密码。
-
第 5 字段:密码有效期,也是以「天」为单位
-
第 6 字段:密码修改到期前的警告天数。也就是说,假设第 5 字段是 90,第 6 字段是 7,那么从更改密码之后的第 83 天开始,每次登录的时候,Linux 都会发出警告,提醒你更改密码。
-
第 7 字段:密码到期之后的宽限天数。如果为空或者 0,表示密码到期后立即失效,用户将无法登录;如果是 -1,表示密码到期后永远不会失效,用户依然能使用该密码继续登录。
-
第 8 字段:用户有效期,用时间戳表示。也就是从 1970 年 1 月 1 日开始算的第多少天。用户有效期到了之后,不管该用户的密码到没到期,都不能再登录了。
-
对于人来说,时间戳可能不是那么直观,我们更习惯于用年月日表示日期。好在 Linux 中有相关的命令可以实现时间戳和年月日的相互转换。
date -d "1970-01-01 17993 days" //把16066转换成日期 echo $(($(date --date="2019/05/05" +%s)/86400+1)) //把2019/05/05转换成时间戳
-
第 9 字段:保留。
三、组信息文件
组信息文件中存放的是组的相关信息,存放路径是 /etc/group
。
在 Linux 中,每创建一个用户,都会创建一个组名跟用户名一样的组,作为该用户的初始组。
Windows 中是每创建一个用户,都会默认放在 Users 组里。
用 vim 查看一下文件内容:
该文件的每一行代表一个组,每个组信息用 4 个字段,下面详细介绍一下每个字段的含义:
- 第 1 字段:组名。
- 第 2 字段:密码标志。这里的密码指的是组密码。组密码文件存放在
/etc/gshadow
中。组密码有什么作用呢?本来组成员是只有 root 用户可以添加删除的,当 root 用户给某个组设置了组管理员和组密码,组管理员就可以往这个组里加减成员。这样一来就相当于给这个组认命了一个组长,这个组长可以行使 root 用户添加删除组成员的权利。但是这样会削减系统的安全性,所以并不推荐使用组密码。 - 第 3 字段:GID。即组 ID。
- 第 4 字段:组中附加用户。
四、其他与用户管理相关的文件
用户的家目录
用户的家目录是用户的初始登录位置。
- 普通用户:
/home/用户名/
,所有者和所属组都是此用户,权限是 700 - 超级用户:
/root/
,所有者和所属组都是 root 用户,权限是 550
用户的邮箱
路径:/var/spool/mail/用户名
用户模板目录
路径:/etc/skel/
在创建用户时,该目录中的文件会被复制到用户的家目录下。也可以手动在该目录下创建一些自定义的文件,在创建用户时,自定义的文件也会被复制到用户的家目录下。