用户与用户组
📖 概述
Linux是一种多用户多任务的操作系统。这意味着多个用户能够同时登陆和使用系统,并每个用户可以在独自的环境中执行不同的任务,互不影响。
例如,在某台Linux操作系统的主机上,同时存在着root、Ada、Leon、Chris和Ethan这五个用户。在同一时间,每个用户都可以进行各自不同的活动。root用户可能正在管理和维护系统,确保系统的正常运行,Ada用户可能正在使用浏览器在线购物,Leon用户可能正在享受游戏的乐趣,Chris用户可能正在使用办公软件进行工作,而Ethan用户可能正在使用即时通讯软件与家人聊天。
在Linux系统中,默认情况下会存在一个名为root
的超级用户。该用户拥有系统的最高权限,并且可以执行系统中的任何操作,包括安装软件、修改系统配置、任意操作文件系统等。由于root
用户具有非常大的权限,建议只在必要时谨慎使用,以免意外造成系统安全问题。
因此,若想使用Linux系统资源,就必须向系统管理员申请一个用户,然后通过其对应的账户(User Account)进入系统。在这个过程中,一般需要验证凭证(通常为密码)。只有正确地输入主体凭证信息,才能进入系统。
每个Linux系统用户都拥有一个主目录,也称为家目录,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个字段
,使用:
符号分隔。
每个字段的含义如下。
字段 | 含义 |
---|---|
用户名 | 用户的登陆名称。 |
密码 | 用户密码。为了安全,存储的并不是真正的密码, 而是使用符号 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
查看新建用户时的默认配置。
以下是每个配置项的具体说明。
配置 | 含义 |
---|---|
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:
公共用户组
GROUP
配置项可以通过useradd -D
命令的-g
选项更改。-g
选项可以指定组名或组ID,但最终在配置文件中都将以组ID呈现。骨架目录
SKEL
配置项不能通过useradd -D
命令的-k
选项更改。
用户密码
passwd
命令用于更新用户的密码,命令格式为passwd [选项] 用户名
,常用选项如下。
选项 | 含义 | 示-例 |
---|---|---|
-l | 该选项仅root 用户可用,用于锁定指定用户密码。具体表现为:向 /etc/shadow 文件中对应用户的加密密码串字段前添加! 符号。需要注意的是,作此操作后,用户并未完全锁定,仍可通过其他身份验证方式登陆, 例如ssh公钥身份验证。 | -l |
-u | 该选项仅root 用户可用,用于解锁指定用户密码。具体表现为:删除 /etc/shadow 文件中对应用户的加密密码串字段的! 符号前缀若用户无密码,则拒绝解锁,除非指定 -f 选项。 | -uf |
-S | 该选项仅root 用户可用,用于查看指定用户密码的简短状态信息。对应信息存储在 /etc/shadow 文件。 | -S |