Skip to content

用户与用户组

📖 概述

​ Linux是一种多用户多任务的操作系统。这意味着多个用户能够同时登陆和使用系统,并每个用户可以在独自的环境中执行不同的任务,互不影响。

​ 例如,在某台Linux操作系统的主机上,同时存在着root、Ada、Leon、Chris和Ethan这五个用户。在同一时间,每个用户都可以进行各自不同的活动。root用户可能正在管理和维护系统,确保系统的正常运行,Ada用户可能正在使用浏览器在线购物,Leon用户可能正在享受游戏的乐趣,Chris用户可能正在使用办公软件进行工作,而Ethan用户可能正在使用即时通讯软件与家人聊天。

​ 在Linux系统中,默认情况下会存在一个名为root的超级用户。该用户拥有系统的最高权限,并且可以执行系统中的任何操作,包括安装软件、修改系统配置、任意操作文件系统等。由于root用户具有非常大的权限,建议只在必要时谨慎使用,以免意外造成系统安全问题。

​ 因此,若想使用Linux系统资源,就必须向系统管理员申请一个用户,然后通过其对应的账户(User Account)进入系统。在这个过程中,一般需要验证凭证(通常为密码)。只有正确地输入主体凭证信息,才能进入系统。

用户

​ 每个Linux系统用户都拥有一个主目录,也称为家目录,root用户的主目录为/root

root用户主目录

​ 通常情况下,非root用户的主目录在/home目录下,主目录名称为用户名。例如,Ada用户的主目录为/home/Ada,Leon用户的主目录为/home/Leon,Chris用户的主目录为/home/Chris,Ethan用户的主目录为/home/Ethan

​ Linux系统对文件的权限管理是基于用户的。默认情况下,在主目录下,非root用户具有完全权限,而在其他目录下,非root用户通常只具有可读和可执行权限。非root用户如果想要获取额外权限,一般需要向管理员申请授权。

tip: 管理员不一定是root用户,也可以是被授予了特定管理权限的用户。

​ 那对于一组相同功能特征的用户,是否需要多次授权呢?答案是否定的,为了简化权限管理和授权过程,Linux中引入了用户组的概念。用户组就是具有相同功能特征用户的逻辑集合,是Linux中权限管理的另一粒度。

用户组

📂 相关文件

/etc/passwd

/etc/passwd文件中记录了系统中用户登陆账户的基本信息,该文件默认为非root用户可读。在/etc/passwd文件中,每行代表一个用户账户的记录,并划分为7个字段,使用:符号分隔。

passwd文件行记录

​ 每个字段的含义如下。

字段含义
用户名用户的登陆名称。
密码用户密码。为了安全,存储的并不是真正的密码,
而是使用符号x替代,真正的密码保存在/etc/shadow文件中。
UID用户ID。
GID用户初始组(主组)ID。
注释用户注释信息,无重要用途。
主目录用户的主目录,登陆后默认的工作目录。
shell用户的登陆shell。

​ 在以下示例中,我们查看了/etc/passwd文件的内容。可以看出,除了我们手动新建的用户外,系统中还存在许多默认用户。而这些用户绝大数是系统或服务正常运行所必需的,这类用户通常也称为系统用户。需要注意的是,系统用户无法用于登陆,但也不能删除。

==TODO==

/etc/shadow

/etc/shadow文件记录了系统中用户登陆账户的密码信息可选的老化信息

🤝 关系

​ 在Linux系统中,用户与用户组是多对多的关系。一个用户组包含多个用户,而一个用户也可以属于多个组。如下,RE-Village组包含Chris和Ethan两个用户,而用户Chris和Ethan又所属于hero组。

用户与用户组关系

👥 用户组管理

新建用户组

groupadd命令用于新建用户组,命令格式为groupadd [选项] 组名 ,常用选项如下。

选项含义示例
-g GID组ID-g 1998

​ 在以下示例中,我们创建了RE2和RE-Village两个用户组,其中RE2的组ID是手动设置的。

新建用户组示例

修改用户组

groupmod命令用于修改用户组的相关定义,命令格式为groupmod [选项] 组名,常用选项如下。

选项含义示例
-g GID修改组ID-g 2005
-n NEW_GROUP修改组名-n RE4

​ 在以下示例中,我们将RE2用户组的名称更改为了RE4,GID更改为了2005。

修改用户组示例

tip: 修改用户组定义时,其包含的用户关联的组信息也会同步更改。

删除用户组

groupdel命令用于删除用户组,命令格式为groupdel 组名

​ 在以下示例中,我们删除了RE4用户组。

删除用户组示例①

​ 需要注意的是,当一个作为用户主组(初始组)的用户组被删除时,系统会阻止这一操作,并显示错误信息。

​ 在以下示例中,我们创建了Chris用户,并将其初始组设置为了RE-Village。而当使用groupdel命令试图删除RE-Village用户组时,系统阻止了该行为,并显示了错误信息。

删除用户组示例②

👤 用户管理

新建用户

useradd命令用于新建用户,命令格式为useradd [选项] 用户名,常用选项如下。

选项含义示例
-m创建用户的主目录-m
-M不创建用户的主目录-M
-d HOME_DIR用户的主目录-d /primary/Ethan
-b BASE_DIR该选项在-d选项未指定时生效。系统会在该目录下创建与用户同名的主目录-b /primary
-k SKEL_DIR骨架目录,用户主目录就是复制该目录而来-k /etc/template/home
-s SHELL用户的登录Shell-s /bin/zsh
-e EXPIRE_DATE用户密码过期日期(日期格式为YYYY-MM-DD-e 2025-10-25
-f INACTIVE密码过期后,用户被禁用的宽限天数。0表示立即禁用;-1表示永不自动禁用-f 7
-u UID用户ID-u 1984
-c COMMENT用户的简短描述-c "The Great Father"
-g GROUP用户初始组(主组)-g RE-Village
-G GROUP1[,GROUP2,...]用户附加组-G RE2,RE4

​ 在以下示例中,我们创建了一个Ada用户和一个Leon用户。其中,两个用户的初始组都设置为了RE2,登录Shell都设置为了/bin/zsh。Ada用户的密码过期时间设置为了2025-12-31,过期后被禁用的宽限天数设置了7天。Leon用户的密码过期时间设置为了2025-12-25,但永不自动禁用。

新建用户示例①

useradd命令选项较多,但通常情况下,使用默认值就可以满足我们的要求。那默认值保存在哪里呢?其实,useradd命令在新建用户时参考的默认配置文件主要有两个,分别为/etc/login.defs/etc/default/useradd,以下将分别介绍这两个文件。

/etc/login.defs

/etc/login.defs

/etc/default/useradd

/etc/default/useradd文件用于配置useradd命令的默认行为。除了直接查看该文件内容外,也可以使用命令useradd -D查看新建用户时的默认配置。

useradd -D

​ 以下是每个配置项的具体说明。

配置含义
GROUP=100用户的公共用户组。对应useradd命令的-g选项,默认为100,表示用户的默认初始组
为GID为100的用户组。但CentOS系统使用的为私有用户组机制,当useradd命令
不指定-g选项时,系统会创建一个与用户同名的用户组。因此在CentOS系统中,该
配置项不被参考。
HOME=/home用户主目录的位置。对应useradd命令的-b选项,默认为/home。
INACTIVE=-1密码过期后,用户被禁用的宽限天数。0表示立即禁用;-1表示永不自动禁用。
对应useradd命令的-f选项,默认为-1(用户永不会被自动禁用)。
EXPIRE=用户密码过期日期。对应useradd命令的-e选项,默认为空,表示密码永不过期。
SHELL=/bin/bash用户的登录Shell。对应useradd命令的-s选项,默认为/bin/bash。
SKEL=/etc/skel骨架目录,用户主目录就是复制该目录而来。对应useradd命令的-k选项,默认为/etc/skel。
CREATE_MAIL_SPOOL=yes是否在系统邮件目录(通常为/var/spool/mail目录)创建一个文件用于用户接收邮件,默认是。

​ 通过vim等方式直接修改/etc/default/useradd文件的内容可以修改useradd命令的默认配置项。但也可以通过useradd命令本身修改默认配置项,命令格式为useradd -D [选项],选项有-g-b-f-e-s五个。

tip:

  1. 公共用户组GROUP配置项可以通过useradd -D命令的-g选项更改。-g选项可以指定组名或组ID,但最终在配置文件中都将以组ID呈现。

  2. 骨架目录SKEL配置项不能通过useradd -D命令的-k选项更改。

用户密码

passwd命令用于更新用户的密码,命令格式为passwd [选项] 用户名,常用选项如下。

选项含义示-例
-l该选项仅root用户可用,用于锁定指定用户密码。
具体表现为:向/etc/shadow文件中对应用户的加密密码串字段前添加!符号。
需要注意的是,作此操作后,用户并未完全锁定,仍可通过其他身份验证方式登陆,
例如ssh公钥身份验证。
-l
-u该选项仅root用户可用,用于解锁指定用户密码。
具体表现为:删除/etc/shadow文件中对应用户的加密密码串字段的!符号前缀
若用户无密码,则拒绝解锁,除非指定-f选项。
-uf
-S该选项仅root用户可用,用于查看指定用户密码的简短状态信息。
对应信息存储在/etc/shadow文件。
-S

上次更新于: