用户和用户组

简介: 本文介绍了Linux系统中的用户账户和组的基本概念,包括普通用户和超级用户(root)的定义和区别,以及组的概念和作用。文章还详细描述了用户账户和组的相关文件(如/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow)的结构和内容,并提供了创建和删除用户账户及组的基本命令和选项。

 1 什么是用户账户和组 ?

1.1 用户

Linux操作系统是多用户多任务的操作系统,允许多个用户同时登录到系统,使用系统资源。用户账户是用户的身份标识。用户通过用户账户可以登录到系统,并且访问已经被授权的资源。系统依据账户来区分属于每个用户的文件、进程、任务,并给每个用户提供特定的工作环境(例如,用户的工作目录、shell版本以及图形化的环境配置等),使每个用户都能各自不受干扰地独立工作。

Linux系统下的用户账户分为两种:

  • 普通用户账户:在系统中只能进行普通工作,只能访问他们拥有的或者有权限执行的文件。
  • 超级用户账户(root):也叫管理员账户,它的任务是对普通用户和整个系统进行管理。超级用户账户对系统具有绝对的控制权,能够对系统进行一切操作。

1.2 组

在Linux系统中,为了方便管理员管理和用户工作,产生了组的概念。

组群是具有相同特性的用户的逻辑集合,使用组群有利于系统管理员按照用户的特性组织和管理用户,提高工作效率。有了组群,在做资源授权时可以把权限赋予某个组群,组群中的成员即可自动获得这种权限。一个用户账户可以同时是多个组群的成员,其中某个组群是该用户的主组群(私有组群),其他组群为该用户的附属组群(标准组群)。

概 念 描 述
用户名 用来标识用户的名称,可以是字母、数字组成的字符串,区分大小写
密码 用于验证用户身份的特殊验证码
用户标识(UID) 用来表示用户的数字标识符
用户主目录 用户的私人目录,也是用户登录系统后默认所在的目录
登录shell 用户登录后默认使用的shell程序,默认为/bin/bash
组群 具有相同属性的用户属于同一个组群
组群标识(GID) 用来表示组群的数字标识符

注意:root用户的UID为:系统用户的UID从1到999;普通用户的UID可以在创建时由管理员指定,如果不指定,用户的UID默认从1 000开始顺序编号。在Linux系统中,创建用户账户的同时也会创建一个与用户同名的组群,该组群是用户的主组群。普通组群的GID默认也是从1 000开始编号。

2 用户账户文件

用户账户信息和组群信息分别存储在用户账户文件和组群文件中。

2.1 /etc/passwd文件

在Linux系统中,所创建的用户账户及其相关信息(密码除外)均放在/etc/passwd配置文件中。用vim编辑器(或者使用cat /etc/passwd)打开passwd文件,内容格式如下:

image.gif 编辑

文件中的每一行代表一个用户账户的资料,可以看到第一个用户是root。然后是一些标准账户,此类账户的shell为/sbin/nologin,代表无本地登录权限。

passwd文件的每一行用“:”分隔为7个域,各域的内容如下:

用户名:加密口令:UID:GID:用户的描述信息:主目录:命令解释器(登录shell)

passwd文件中的各字段的含义如下表所示,其中少数字段的内容是可以为空的,但仍需使用“:”进行占位来表示该字段。

字 段 说 明
用户名 用户账号名称,用户登录时所使用的用户名
加密口令 用户口令,考虑系统的安全性,现在已经不使用该字段保存口令,而用字母“x”来填充该字段,真正的密码保存在shadow文件中
UID 用户号,唯一表示某用户的数字标识
GID 用户所属的私有组号,该数字对应group文件中的GID
用户描述信息 可选的关于用户全名、用户电话等描述性信息
主目录 用户的宿主目录,用户成功登录后的默认目录
命令解释器 用户所使用的shell,默认为“/bin/bash”

2.2 /etc/shadow文件

由于所有用户对/etc/passwd文件均有读取权限,为了增强系统的安全性,用户经过加密之后的口令都存放在/etc/shadow文件中。/etc/shadow文件只对root用户可读,因而大大提高了系统的安全性。shadow文件的内容形式如下(cat /etc/shadow)

image.gif 编辑

shadow文件保存投影加密之后的口令以及与口令相关的一系列信息,每个用户的信息在shadow文件中占用一行,并且用“:”分隔为9个域,各域的含义如下表所示。

字 段 说 明
1 用户登录名
2 加密后的用户口令,*表示非登录用户,!!表示没设置密码
3 从1970年1月1日起,到用户最近一次口令被修改的天数
4 从1970年1月1日起,到用户可以更改密码的天数,即最短口令存活期
5 从1970年1月1日起,到用户必须更改密码的天数,即最长口令存活期
6 口令过期前几天提醒用户更改口令
7 口令过期后几天账户被禁用
8 口令被禁用的具体日期(相对日期,从1970年1月1日至禁用时的天数)
9 保留域,用于功能扩展

3 组群文件

组群账户的信息存放在/etc/group文件中,而关于组群管理的信息(组群口令、组群管理员等)则存放在/etc/gshadow文件中。

3.1 /etc/group文件

group文件位于“/etc”目录,用于存放用户的组账户信息,对于该文件的内容任何用户都可以读取。每个组群账户在group文件中占用一行,并且用“:”分隔为4个域。每一行各域的内容如下(使用cat /etc/group):

组群名称:组群口令(一般为空,用x占位):GID:组群成员列表

group文件的内容形式如下:

image.gif 编辑

可以看出,root的GID为0,没有其他组成员。group文件的组群成员列表中如果有多个用户账户属于同一个组群,则各成员之间以“,”分隔。在/etc/group文件中,用户的主组群并不把该用户作为成员列出,只有用户的附属组群才会把该用户作为成员列出。

3.2 /etc/gshadow文件

/etc/gshadow文件用于存放组群的加密口令、组管理员等信息,该文件只有root用户可以读取。每个组群账户在gshadow文件中占用一行,并以“:”分隔为4个域。每一行中各域的内容如下:

组群名称:加密后的组群口令(没有就用!):组群的管理员:组群成员列表

gshadow文件的内容形式如下:

image.gif 编辑

接下来我们进行用户的添加、以及群组的添加练习。

4 用户账户及组创建

用户账户管理包括新建用户、设置用户账户口令和用户账户维护等内容。

4.1 新建用户

在系统新建用户可以使用useradd或者adduser命令。useradd命令的格式是:

useradd [选项] <username>

useradd命令有很多选项,如下表所示。

选 项 说 明
-c comment 用户的注释性信息
-d home_dir 指定用户的主目录
-e expire_date 禁用账号的日期,格式为YYYY-MM-DD
-f inactive_days 设置账户过期多少天后用户账户被禁用。如果为0,账户过期后将立即被禁用;如果为-1,账户过期后,将不被禁用
-g initial_group 用户所属主组群的组群名称或者GID
-G group-list 用户所属的附属组群列表,多个组群之间用逗号分隔
-m 若用户主目录不存在则创建它
-M 不要创建用户主目录
-n 不要为用户创建用户私人组群
-p passwd 加密的口令
-r 创建UID小于500的不带主目录的系统账号
-s shell 指定用户的登录shell,默认为/bin/bash
-u UID 指定用户的UID,它必须是唯一的,且大于499

4.2 删除用户账户

要删除一个账户,可以直接删除/etc/passwd和/etc/shadow文件中要删除的用户所对应的行,或者用userdel命令删除。userdel命令的格式为

userdel [-r] 用户名

如果不加-r选项,userdel命令会在系统中所有与账户有关的文件中(例如/etc/passwd,/etc/shadow,/etc/group)将用户的信息全部删除。

如果加 -r 选项,则在删除用户账户的同时,还将用户主目录以及其下的所有文件和目录全部删除掉。另外,如果用户使用E-mail的话,同时也将/var/spool/mail目录下的用户文件删掉。

4.3 创建组

创建组群和删除组群的命令与创建、维护账户的命令相似。创建组群可以使用命令groupadd或者addgroup。

例如,创建一个新的组群,组群的名称为testgroup,可用以下命令:

groupadd testgroup

image.gif

4.4 删除组

要删除一个组可以用groupdel命令,例如删除刚创建的testgroup组时可用以下命令:

groupdel testgroup

image.gif


相关文章
|
机器学习/深度学习 数据采集 自然语言处理
深度学习实践技巧:提升模型性能的详尽指南
深度学习模型在图像分类、自然语言处理、时间序列分析等多个领域都表现出了卓越的性能,但在实际应用中,为了使模型达到最佳效果,常规的标准流程往往不足。本文提供了多种深度学习实践技巧,包括数据预处理、模型设计优化、训练策略和评价与调参等方面的详细操作和代码示例,希望能够为应用实战提供有效的指导和支持。
1177 0
|
Shell 开发工具 数据安全/隐私保护
idea上传项目到gitee(码云)超详细
idea上传项目到gitee(码云)超详细
idea上传项目到gitee(码云)超详细
|
10月前
|
机器学习/深度学习 分布式计算 Java
训练时一套,线上跑一套?离线训练与在线服务数据一致性这坑,我替你踩过了
训练时一套,线上跑一套?离线训练与在线服务数据一致性这坑,我替你踩过了
808 8
|
存储 网络协议 Linux
在Linux中,如何通过syslog进行远程日志转发?
在Linux中,如何通过syslog进行远程日志转发?
|
机器学习/深度学习 存储 人工智能
深度强化学习实战:训练DQN模型玩超级马里奥兄弟
本文介绍了如何利用深度学习和强化学习技术构建一个能够自主学习并完成《超级马里奥兄弟》游戏的智能系统。通过使用深度Q网络(DQN)架构,智能体在虚拟环境中与游戏进行交互,逐步优化其行为策略。文中详细描述了环境构建、神经网络设计、智能体-环境交互机制等关键步骤,并展示了系统的训练过程和最终表现。该研究不仅展示了强化学习在游戏领域的应用潜力,也为未来的研究提供了宝贵的经验和技术参考。
1085 81
深度强化学习实战:训练DQN模型玩超级马里奥兄弟
|
网络协议 安全 Linux
Linux剪裁探索初探
本文深入探讨了Linux剪裁的概念、方法、实践及其好处。Linux剪裁通过移除内核中不必要的模块和功能,减小内核大小、优化系统性能并提升安全性,特别适用于资源受限的设备和特定用途的服务器。文章详细介绍了配置内核选项、模块化和使用工具辅助剪裁的方法,并提供了一个实践示例,最后讨论了剪裁的好处与挑战。
994 15
|
数据处理 Python
Python读取大文件的“坑“与内存占用检测
Python读取大文件的“坑“与内存占用检测
657 0
|
存储 搜索推荐 数据可视化
分享100+个搜索引擎,看看你知道的有几个
分享100+个搜索引擎,看看你知道的有几个
3109 0
分享100+个搜索引擎,看看你知道的有几个
WK
|
机器学习/深度学习 算法 PyTorch
如何计算损失函数关于参数的梯度
计算损失函数关于参数的梯度是深度学习优化的关键,涉及前向传播、损失计算、反向传播及参数更新等多个步骤。首先,输入数据经由模型各层前向传播生成预测结果;其次,利用损失函数评估预测与实际标签间的差距;再次,采用反向传播算法自输出层逐层向前计算梯度;过程中需考虑激活函数、输入数据及相邻层梯度影响。针对不同层类型,如线性层或非线性层(ReLU、Sigmoid),梯度计算方式各异。最终,借助梯度下降法或其他优化算法更新模型参数,直至满足特定停止条件。实际应用中还需解决梯度消失与爆炸问题,确保模型稳定训练。
WK
978 0
|
安全 Linux 调度
在Linux中, 用户和组的概念是什么?作用分别是什么?
在Linux中, 用户和组的概念是什么?作用分别是什么?