Linux用户和用户组

1、/etc/passwd

用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。

[root@ai_bk www]# grep pyrk /etc/passwd
pyrk:x:48:48::/home/pyrk:/bin/bash
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

用户名:代表用户账号的字符串。
口令:一些系统中,存放着加密后的用户口令字。把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。
用户标识号:是一个整数,系统内部用它来标识用户。一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。通常用户标识号的取值范围是0~65535。0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。
组标识号:字段记录的是用户所属的用户组。它对应着/etc/group文件中的一条记录。
注释性描述:字段记录着用户的一些个人情况,这个字段的格式并没有统一。
主目录:也就是用户的起始工作目录,它是用户在登录到系统之后所处的目录。

2、/etc/shadow

由于/etc/passwd允许所有用户读取,易导致用户密码泄露,因此 Linux 系统将用户的密码信息从 /etc/passwd 文件中分离出来,并单独放到了此文件中。

/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。

[root@ai_bk www]# grep pyrk /etc/shadow
pyrk:$1$E1cEIipa$GZCAVn/g/fJmJ5hfhAE3./:18201:0:99999:7:::
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

用户名:同 /etc/passwd 文件的用户名有相同的含义。
加密密码:这里保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法,原来采用的是 MD5 或 DES 加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。
最后一次修改时间:此字段表示最后一次修改密码的时间,从1970 年 1 月 1 至今天数。
最小修改时间间隔:该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。
密码有效期:经常变更密码是个好习惯,为了强制要求用户变更密码,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。
密码需要变更前的警告天数:与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 “再过 n 天你的密码就要过期了,请尽快重新设置你的密码!”。该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 “修改密码” 的警告信息。
密码过期后的宽限天数:也称为“口令失效日”,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。比如说,此字段规定的宽限天数是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。
账号失效时间:同第 3 个字段一样,使用自  1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!该字段通常被使用在具有收费服务的系统中。
保留:这个字段目前没有使用,等待新功能的加入。

3、/ect/group

文件是用户组配置文件,即用户组的所有信息都存放在此文件中。

[root@ai_bk www]# cat /etc/group
root:x:0:
组名:密码:GID:该用户组中的用户列表

组名:也就是是用户组的名称,有字母或数字构成。同 /etc/passwd 中的用户名一样,组名也不能重复。
组密码:和 /etc/passwd 文件一样,这里的 “x” 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。
组ID (GID):就是群组的 ID 号,Linux 系统就是通过 GID 来区分用户组的,同用户名一样,组名也只是为了便于管理员记忆。
组中的用户:此字段列出每个群组包含的所有用户。需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段,可以这么理解,该字段显示的用户都是这个用户组的附加用户。

4、添加用户:useradd

[root@localhost ~]# useradd lamp

它会完成以下几项操作:

1、在 /etc/passwd 文件中创建一行与 lamp 用户相关的数据:

[root@localhost ~]# grep lamp /etc/passwd
lamp:x:1000:1000::/home/lamp:/bin/bash

可以看到,用户的 UID 是从 1000 开始计算的。同时默认指定了用户的家目录为 /home/lamp/,用户的登录 Shell 为 /bin/bash。

2、在 /etc/shadow 文件中新增了一行与 lamp 用户密码相关的数据:

[root@localhost ~]# grep lamp /etc/shadow
lamp:!!:18464:0:99999:7:::

这个用户还没有设置密码,所以密码字段是 “!!”,代表这个用户没有合理密码,不能正常登录。同时会按照默认值设定时间字段,例如密码有效期有 99999 天,距离密码过期 7 天系统会提示用户“密码即将过期”等。

3、在 /etc/group 文件中创建一行与用户名一模一样的群组:

[root@localhost ~]# grep lamp /etc/group
lamp:x:1000:

lamp:x:1000:该群组会作为新建用户的初始组。

4、在 /etc/gshadow 文件中新增一行与新增群组相关的密码信息:

[root@localhost ~]# grep lamp /etc/gshadow
lamp:!::

没有设定组密码,所以这里没有密码,也没有组管理员。

5、默认创建用户的主目录和邮箱

[root@localhost ~]# ll -d /home/lamp
drwx------. 2 lamp lamp 62 Jul 20 22:28 /home/lamp
[root@localhost ~]# ll /var/spool/mail/lamp 
-rw-rw----. 1 lamp mail 0 Jul 20 22:28 /var/spool/mail/lamp

注意这两个文件的权限,都要让 lamp 用户拥有相应的权限。

5、删除用户:userdel

-r 选项表示在删除用户的同时删除用户的家目录。

用户基本信息:存储在 /etc/passwd 文件中;
用户密码信息:存储在 /etc/shadow 文件中;
用户群组基本信息:存储在 /etc/group 文件中;
用户群组信息信息:存储在 /etc/gshadow 文件中;
用户个人文件:主目录默认位于 /home/用户名,邮箱位于 /var/spool/mail/用户名。

发表回复