本学习笔记为Datewhale-6月组队学习-Linux教程的学习内容,学习链接为:https://github.com/datawhalechina/team-learning-program/tree/master/Linux
Linux用户和组管理
前言
在前一篇博文【Linux-Task02:Linux系统安装】里,我们一起学习了如何用 Oracle VM VirtualBox虚拟机 安装 Linux系统,而在这篇博文中我们将会一起学习Linux用户和组管理
一、学习知识点概要
Task03:Linux用户和组管理
知识点:Linux系统的用户和用户组、用户与组的配置文件和用户与组的管理命令
二、学习内容
(一)用户和用户组
Linux 是多用户多任务操作系统,换句话说,Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。
1. 什么是用户
用户需要使用系统资源则需向系统管理员申请账户进入系统,不同用户具有不问的权限,毎个用户在权限允许的范围内完成不间的任务,每个用户都有唯一的用户名和密码。用户分超级用户和普通用户,超级用户即系统管理员root。
Linux 正是通过这种权限的划分与管理,实现了多用户多任务的运行机制,提供对用户文件的安全性保护。
2. 什么是用户组
为了简化对用户的管理, Linux 系统通过分组对用户进行管理及控制访问权限。同一用户组内的用户拥有相同的权限。
用户组也分两种,一种是主用户组(primary group),一种是次用户组(secondary group)
3. 用户和用户组关系
每个用户在创建时都会自动属于一个用户组,用户与用户组之间的关系可以分一对一、一对多、多对一和多对多四种。
4.Linux UID和GID(用户ID和组ID)
Linux 系统不是通过用户名称,而是通过用户 ID 号(UID)识别用户。Linux 系统将所有用户的名称与 ID 的对应关系都存储在 /etc/passwd 文件中。每个用户的 ID 分为用户 ID和组 ID两种。
在 /etc/passwd 文件中,利用 UID 可以找到对应的用户名;在 /etc/group 文件中,利用 GID 可以找到对应的群组名。
(二)用户与组的配置文件
在Linux中,万物皆文件,所以用户与组也以配置文件的形式保存在系统中,以下为用户和组的主要配置文件详解:
- /etc/passwd:用户及其属性信息(名称、 UID、主组ID等)
- /etc/shadow:用户密码及其相关属性
- /etc/group:组及其属性信息
- /etc/gshadow:组密码及其相关属性
1. Linux /etc/passwd
Linux 系统中的 /etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。
passwd文件格式,如下:
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
注:
密码
“x” 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中(此文件只有 root 用户),需要注意的是,虽然 “x” 并不表示真正的密码,但也不能删除,如果删除了 “x”,那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆
UID(用户 ID)
UID 范围 | 用户身份 |
---|---|
0 | 超级用户。UID 为 0 就代表这个账号是管理员账号。 |
1~499 | 系统用户(伪用户)。也就是说,此范围的 UID 保留给系统使用。其中,1~99 用于系统自行创建的账号;100~499 分配给有系统账号需求的用户。 |
500~65535 | 普通用户。通常这些 UID 已经足够用户使用了。 |
主目录
用户登录后有操作权限的访问目录,通常称为用户的主目录。
默认Shell
Shell 就是 Linux 的命令解释器,功能就是将用户输入的命令转换成系统可以识别的机器语言,是用户和 Linux 内核之间沟通的桥梁。
通常情况下,Linux 系统默认使用的命令解释器是 bash(/bin/bash),当然还有其他命令解释器,例如 sh、csh 等。
2. Linux /etc/shadow(影子文件)
/etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。
shadow文件格式,如下:
用户名:加密密码:最后一次修改时间(从1970年1月1日起计算到现在为止):最小修改时间间隔(0表示随时可改):密码几天后必须变更(99999表示永不过期):密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间(从1970-1-1算起):保留字段
3. Linux /etc/group文件解析
/ect/group 文件是用户组配置文件,即用户组的所有信息都存放在此文件中
各用户组中。
shadow文件格式,如下:
组名:密码:GID:该用户组中的用户列表
注:
组密码
和 /etc/passwd 文件一样,这里的 “x” 仅仅是密码标识,真正加密后的组密码(组管理员可代root用户管理用户)默认保存在 /etc/gshadow 文件中。
组ID (GID)
就是群组的 ID 号,Linux 系统就是通过 GID 来区分用户组的,同用户名一样,组名也只是为了便于管理员记忆。
组中的用户
此字段列出每个群组包含的所有用户。需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段,可以这么理解,该字段显示的用户都是这个用户组的附加用户。
4.Linux /etc/gshadow文件内容解析
组用户信息存储在 /etc/group 文件中,而将组用户的密码信息存储在 /etc/gshadow 文件中。
gshadow文件格式,如下:
组名:加密密码:组管理员:组附加用户列表
组密码
对于大多数用户来说,通常不设置组密码,因此该字段常为空,但有时为 “!”,指的是该群组没有组密码,也不设有群组管理员。
组管理员
从系统管理员的角度来说,该文件最大的功能就是创建群组管理员。那么,
由于目前有 sudo 之类的工具,因此群组管理员的这个功能已经很少使用了。
组中的附加用户
该字段显示这个用户组中有哪些附加用户,和 /etc/group 文件中附加组显示内容相同。
5.Linux初始组和附加组
一般情况下,用户的初始组就是在建立用户的同时建立的和用户名相同的组。
每个用户都可以加入多个附加组,但是只能属于一个初始组。所以我们在实际工作中,如果需要把用户加入其他组,则需要以附加组的形式添加。
(三)、用户和用户组管理命令
Linux用户和组管理命令主要有如下几类:
1. 用户的增删修改
添加用户:
useradd 选项 用户名
选项 | 作用 |
---|---|
-u | 手工指定用户的 UID,注意 UID 的范围(不要小于 500)。 |
-d | 手工指定用户的主目录。主目录必须写绝对路径,而且如果需要手工指定主目录,则一定要注意权限; |
-c | 手工指定/etc/passwd文件中各用户信息中第 5 个字段的描述性内容,可随意配置; |
-g | 手工指定用户的初始组。一般以和用户名相同的组作为用户的初始组,在创建用户时会默认建立初始组。一旦手动指定,则系统将不会在创建此默认的初始组目录。 |
-G | 指定用户的附加组。我们把用户加入其他组,一般都使用附加组; |
-s | 手工指定用户的登录 Shell,默认是 /bin/bash; |
-e | 指定用户的失效日期 |
-o | 允许创建的用户的 UID 相同。例如,执行 “useradd -u 0 -o usertest” 命令建立用户 usertest,它的 UID 和 root 用户的 UID 相同,都是 0; |
-m | 创建用户时强制建立用户的家目录。在建立系统用户时,该选项是默认的; |
-r | 创建系统用户 |
删除用户
userdel 选项 用户名
-r 选项表示在删除用户的同时删除用户的家目录。
修改用户
usermod 选项 用户名
选项 | 说明 |
---|---|
-c 用户说明 | 修改用户的说明信息,即修改 /etc/passwd 文件目标用户信息的第 5 个字段; |
-d 主目录 | 修改用户的主目录,即修改 /etc/passwd 文件中目标用户信息的第 6 个字段,需要注意的是,主目录必须写绝对路径; |
-e 日期 | 修改用户的失效曰期,格式为 “YYYY-MM-DD”,即修改 /etc/shadow 文件目标用户密码信息的第 8 个字段; |
-g 组名 | 修改用户的初始组,即修改 /etc/passwd 文件目标用户信息的第 4 个字段(GID); |
-u UID | 修改用户的UID,即修改 /etc/passwd 文件目标用户信息的第 3 个字段(UID); |
-G 组名 | 修改用户的附加组,其实就是把用户加入其他用户组,即修改 /etc/group 文件; |
-l 用户名 | 修改用户名称; |
-L | 临时锁定用户(Lock); |
-U | 解锁用户(Unlock),和 -L 对应; |
-s shell | 修改用户的登录 Shell,默认是 /bin/bash。 |
修改用户密码
passwd 选项 用户名
选项 | 作用 |
---|---|
-l | 暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 “!”,使密码失效。仅 root 用户可用; |
-u | 解锁用户,和 -l 选项相对应,也是只能 root 用户使用; |
-d | 使账号无口令,删除密码 |
-f | 强迫用户下次登录时修改口令 |
-S | 查询用户密码的状态,显示密码信息,也就是 /etc/shadow 文件中此用户密码的内容。仅 root 用户可用; |
-g | 修改群组密码 |
-n 天数 | 设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段; |
-x 天数 | 设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段; |
-w 天数 | 设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段; |
-i 日期 | 设置用户密码失效日期,口令过期后多少天停用账户,对应 /etc/shadow 文件中各行密码的第 7 个字段 |
2. 用户组管理
添加用户组
groupadd 选项 用户组
选项 | 描述 |
---|---|
-g GID | 指定组 ID; |
-r | 创建系统群组。 |
删除用户组
groupdel 组名
需要从系统上删除群组时,可用groupdel(group delete)指令来完成这项工作。
注意,不能使用 groupdel 命令随意删除群组。此命令仅适用于删除那些 “不是任何用户初始组” 的群组,换句话说,如果有群组还是某用户的初始群组,则无法使用 groupdel 命令成功删除。倘若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
修改用户组属性
groupmod 选项 用户组
选项 | 描述 |
---|---|
-g GID | 修改组 ID |
-n 新组名 | 修改组名 |
-o | 重复使用群组识别码 |
切换用户组
newgrp 目标用户组
newgrp 指令类似 login 指令,当它是以相同的帐号,另一个群组名称,再次登入系统。 newgrp 命令可以从用户的附加组中选择一个群组,作为用户新的初始组。 欲使用 newgrp 指令切换群组,您必须是该群组的用户,否则将无法登入指定的群组。单一用户要同时隶属多个群组,需利用交替用户的设置。若不指定群组名称,则 newgrp 指令会登入该用户名称的预设群组。
三、学习问题与解答
问题一:UID和GID的区别?
解答:每个用户的 ID 分为用户 ID和组 ID两种。在 /etc/passwd 文件中,利用 UID 可以找到对应的用户名;在 /etc/group 文件中,利用 GID 可以找到对应的群组名。
四、学习思考与总结
本次学习,动手学会了如何在Linux系统下管理用户和用户组。Linux 是多用户多任务操作系统,支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。毎个用户在权限允许的范围内完成不间的任务,每个用户都有唯一的用户名和密码。
为了简化对用户的管理, Linux 系统通过分组对用户进行管理及控制访问权限。Linux 正是通过这种权限的划分与管理,实现了多用户多任务的运行机制,提供对用户文件的安全性保护。
希望大家可以互相交流、共同学习,如果发现博文中有错的或不解的,欢迎留言或私聊交流~
————————————————
五、参考文章
[1]https://github.com/datawhalechina/team-learning-program/tree/master/Linux
[2]https://www.cnblogs.com/ddz-linux/
[3]http://c.biancheng.net/view/844.html
[4]https://www.runoob.com/linux/linux-user-manage.html