【Linux】用户与用户组管理

目录

🚀前言

大家好!我是 EnigmaCoder

  • 本文将介绍Linux中用户和用户组管理的相关内容,包含用户与用户组的分类、相关文件与命令等。

🤔用户的作用

  • 可以通过用户来登陆系统获得操作环境。
  • 用户可以来运行软件,所有的软件都需要某个用户来运行。

Linux操作系统中,系统并不知道用户名,而只知道用户对应ID号。可以通过命令:id 用户名 来查看该用户的信息。

☘️用户的分类

用户大致分成三类:

  1. 系统超级管理员:UID(用户的ID)为0的用户就是系统的超级管理员, 一般是root
  2. 系统用户:0<UID<1000的用户,这些用户一般不可以登录到操作系统,而是专门来运行各种软件和程序。
  3. 普通用户:UID>=1000的用户,这些用户都是由超级管理员创建。

也可以按两类分,将系统超级管理员归于系统用户一类,分成系统用户与普通用户。

🦜用户组的分类

Linux 系统中,用户组是多个用户的集合,用于统一管理用户权限 ------ 如同员工加入企业后需归属特定部门,每个用户必须至少属于一个用户组。根据用户与组的关联关系,用户组主要分为以下两类:

  1. 私有组(又称 "主组 / 属组")
    新用户创建时,系统会自动生成一个与用户名同名的用户组,并将该组设为用户的默认所属组(即私有组)。默认情况下,用户的文件 / 目录权限会优先关联其私有组,私有组的权限仅对该用户及组内成员(若后续添加)生效。
  2. 附加组(又称 "公共组")
    除私有组外,用户可额外加入的其他用户组统称为附加组。用户加入附加组后,可直接继承该组的权限(如访问组所属的文件、执行组授权的命令等),附加组主要用于实现跨用户的权限共享与协作。

示例:使用useradd A创建用户 A 时,系统会自动创建同名的 "用户组 A" 作为 A 的私有组;若后续通过usermod -aG dev A将 A 加入 "dev 组",则 "dev 组" 即为 A 的附加组,A 可获得 "dev 组" 的所有权限。

🐧用户的文件与命令

💯用户信息文件

/etc/passwdLinux系统中存储用户账户信息的关键文件,包含系统上所有用户的基本信息。它通常是一个纯文本文件,每个用户占一行,每行由7个字段组成,字段间用冒号(:)分隔。

典型的/etc/passwd文件条目格式如下:

bash 复制代码
username:password:UID:GID:GECOS:homedir:shell

各字段详解如下:

  1. 用户名username):用户登录名,长度通常不超过32个字符,区分大小写。例如:root
  2. 密码password):Linux系统使用密码占位符x代替密码,x表示密码在shadow文件中,没有x表示不需要密码可以直接登录系统。如果为*表示用户被禁用。
  3. 用户ID (UID):用户唯一数字标识符。
  4. ID (GID):用户主要组别的数字标识符,对应/etc/group文件中的组ID
  5. GECOS字段:用户描述信息,用于标识,无实际的用处。
  6. 主目录 (homedir):用户登录后的家目录。
  7. 登录Shell (shell):用户登录后默认启动的shell程序路径。
    • /bin/bash:常用默认 Shell,支持命令历史、补全,适合日常操作和写脚本。
    • /bin/sh:基础 Shell,主要兼容老脚本,少用作登录 Shell。
    • /sbin/nologin:禁止登录但不影响服务,给服务用户用。
    • /bin/false:完全禁止登录,无任何交互,给伪用户用。

💯用户密码文件

用户密码文件/etc/shadowLinux系统中存储用户密码信息的重要文件。

典型的/etc/shadow文件条目格式如下:

bash 复制代码
username:encrypted_password:last_changed:min_age:max_age:warn:inactive:expire:reserved

各字段详解如下:

  1. 用户名username):与/etc/passwd中的用户名对应。
  2. 加密密码encrypted_password):采用加密算法存储。
    • MD5 :以 $1$ 为前缀,较早的加密方式,安全性较低,易被破解,现在较少使用。
    • SHA-256 :以 $5$ 为前缀,采用 SHA-256 哈希算法,安全性高于 MD5,是较常用的加密方式之一。
    • SHA-512:以 $6$ 为前缀,基于 SHA-512 哈希算法,安全性更高(哈希值更长),是目前主流的加密方式,多数现代 Linux 发行版默认采用。
    • Blowfish :以 $2a$$2b$$2y$ 为前缀,一种强加密算法,安全性高,但普及度不如 SHA 系列。
    • !:账户被锁定
    • *:账户不可登录
  3. 最后修改日期last_changed):从1970年1月1日起的天数。
  4. 最小天数min_age):密码修改后必须保持的天数。
  5. 最大天数max_age):密码有效期。
  6. 警告天数warn):密码到期前警告天数。
  7. 不活动天数inactive):密码到期后账户被禁用前的天数。
  8. 过期日期expire):账户被禁用的绝对日期。
  9. 保留字段

💯用户相关的策略文件

/etc/login.defs 是 Linux 系统中用于配置用户账号默认参数的重要配置文件,主要用于控制 useraddpasswd 等用户管理命令的默认行为,定义用户账号的基本规则(如 UID/GID 范围、密码策略等)。

该文件中的配置项多为注释说明与默认参数设置,以下是其中的核心内容及说明:

配置项 说明
MAIL_DIR /var/spool/mail 定义用户邮件目录,新用户的邮件会存储在此目录下以用户名命名的文件中
PASS_MAX_DAYS 99999 密码的最大有效期(天),超过此天数需修改密码
PASS_MIN_DAYS 0 密码修改的最小间隔(天),0 表示可随时修改
PASS_MIN_LEN 5 密码的最小长度(字符数)
PASS_WARN_AGE 7 密码过期前的警告天数
UID_MIN 1000 普通用户的最小 UID(默认从 1000 开始)
UID_MAX 60000 普通用户的最大 UID
GID_MIN 1000 普通用户组的最小 GID
GID_MAX 60000 普通用户组的最大 GID
SYS_UID_MIN 201 系统用户的最小 UID(不同系统可能有差异)
SYS_UID_MAX 999 系统用户的最大 UID
SYS_GID_MIN 201 系统用户组的最小 GID
SYS_GID_MAX 999 系统用户组的最大 GID
CREATE_HOME yes 控制 useradd 命令是否自动创建用户家目录(yes 为默认创建)
UMASK 077 默认权限掩码,控制新创建文件/目录的初始权限(077 表示仅用户自身有读写执行权限)
USERGROUPS_ENAB yes 当删除用户时,若该用户的主组无其他成员,是否自动删除主组(yes 为自动删除)

修改 /etc/login.defs 后无需重启服务,新的配置会直接影响后续执行的用户管理命令(如 useradd 创建新用户时会遵循新的 UID 范围和家目录设置)。但需注意,该文件的配置仅对新创建的用户生效,对已存在的用户无影响。

💯管理用户的命令

命令 功能描述 常用选项 示例
useradd 创建新用户 -m:自动创建家目录 -s:指定默认shell -g:指定主组 -G:指定附加组 -d:指定自定义家目录路径 -u:指定用户UID useradd -m -s /bin/bash -g users -G sudo newuser
userdel 删除用户 -r:同时删除用户家目录 -f:强制删除(即使用户已登录) userdel -r olduser
usermod 修改用户属性 -g:修改主组 -G:修改附加组(覆盖原有) -aG:追加附加组(不覆盖) -s:修改默认shell -d:修改家目录 -l:修改用户名 -L:锁定用户 -U:解锁用户 usermod -aG sudo username
passwd 管理用户密码 -l:锁定用户密码 -u:解锁用户密码 -d:删除用户密码 -e:强制用户下次登录修改密码 --stdin:从标准输入设置密码 passwd -e username
chage 管理密码过期策略 -d 0:强制下次登录改密码 -M:设置密码最大有效期(天) -m:设置密码最小修改间隔(天) -W:设置密码过期前警告天数 -I:设置密码过期后宽限天数 chage -M 90 -W 7 username
id 查看用户ID信息 -u:仅显示UID -g:仅显示GID -G:仅显示所有所属组ID -n:显示名称而非ID id -un username
su 切换用户 -:切换用户并加载环境变量 -c:执行单个命令后返回原用户 su - root -c "systemctl restart nginx"
sudo 授权执行命令 -i:切换到目标用户交互模式 -u:指定执行命令的用户 -l:列出当前用户可执行的命令 sudo -u www-data touch /var/www/file
groups 查看用户所属组 无常用选项(直接跟用户名) groups username
chsh 更改默认shell -s:指定新的shell程序 chsh -s /bin/zsh username

🎋用户组的文件与命令

💯用户组信息文件

/etc/group 文件是 Linux 系统中用于管理用户组信息的配置文件,每个条目代表一个用户组。每个条目由冒号 : 分隔的四个字段组成。

典型的/etc/group文件条目格式如下:

bash 复制代码
group_name:password:GID:user_list

各字段详解如下:

  1. 组名group_name): 用户组的名称,必须是唯一的。例如 developersadmin 等。

  2. 组密码password): 用户组的加密密码。通常为 x*,表示密码存储在 /etc/gshadow 文件中。如果为空,表示该组不需要密码。

  3. 用户组IDGID): 用户组的数字标识符(Group ID),必须是唯一的。例如 10001001 等。

  4. 组成员user_list): 属于该组的用户列表,多个用户名之间用逗号 , 分隔。例如 user1,user2,user3。如果为空,表示该组没有成员。

💯用户组密码文件

/etc/gshadowLinux 系统中存储组密码及相关安全信息的文件,仅对 root 用户可读。

典型的/etc/gshadow文件条目格式如下:

bash 复制代码
groupname:encryptedpassword:admins:members

各字段详解如下:

  1. 组名groupname):用户组的名称,与 /etc/group 文件中的组名一致。
  2. 加密密码encryptedpassword):组密码的加密哈希值。
  3. 管理员列表admins):组管理员列表,多个用户用逗号分隔。管理员可通过 gpasswd 管理组成员。
  4. 组成员列表members):组内成员列表,多个用户用逗号分隔。成员继承组权限。

💯管理用户组的命令

命令 功能描述 常用选项 示例
groupadd 创建新组 -g:指定组GID -r:创建系统组 groupadd -g 1005 memeda01
groupdel 删除组 无常用选项(直接跟组名) groupdel memeda01
groupmod 修改组属性 -g:修改组GID -n:修改组名称 groupmod -n newmemeda memeda01
gpasswd 管理组密码及成员 -a:添加用户到组 -d:从组中删除用户 -M:批量添加用户到组 -r:删除组的密码 -A:批量设置组管理员 gpasswd -a user1 memeda01 gpasswd -M user1,user2 memeda01 gpasswd -A user3 memeda01
groupmems 管理组成员(需超级管理员权限) -g:指定操作的组 -a:添加用户到组 -d:从组中删除用户 -p:清空组的所有成员 -l:列出组内所有成员 groupmems -g memeda01 -a user1 groupmems -g memeda01 -l groupmems -g memeda01 -p

💧总结

思考:创建新用户时,将修改或创建哪些文件或目录?

以创建zhangsan用户为例:

  • /etc/passwd:新增 zhangsan 的账号记录,含 UIDGID、家目录、默认 shell 等。
  • /etc/group:若未指定主组,新增与 zhangsan 同名的主组记录,含组名、GID。
  • /etc/shadow:新增 zhangsan 的密码安全记录,存加密密码(初始可能空或锁定)、密码过期等信息。
  • /etc/gshadow:同步新增同名主组的记录,管理组密码与管理员权限。
  • /home/zhangsan:若/etc/login.defsCREATE_HOME yes,自动创建家目录并赋权。
  • /var/spool/mail/zhangsan:自动创建用户邮箱文件,用于存储邮件。
相关推荐
柳鲲鹏38 分钟前
未成功:使用 Nginx 搭建代理服务器(正向代理 HTTPS 网站)
运维·nginx
wuyang-ligerj1 小时前
路由基础(二):路由表和FIB表
运维·网络·网络协议·智能路由器
adyp1 小时前
Superset docker、ubuntu、windows安装方式
运维
郭俊强1 小时前
nestjs 连接redis
数据库·redis·缓存
海边捡石子2 小时前
postgress数据迁移gaussdb注意事项
数据库
来根烟了寂寞2 小时前
瑞芯微rv1106交叉编译openssl 1.x
linux·嵌入式
拾心212 小时前
【运维进阶】高可用和负载均衡技术
运维·负载均衡
chen_note2 小时前
Redis数据持久化——RDB快照和Aof日志追加
java·数据库·mybatis·持久化·aof·rdb
hyy27952276842 小时前
自动化运维之k8s——Kubernetes集群部署、pod、service微服务、kubernetes网络通信
运维·kubernetes·自动化
携欢2 小时前
PortSwigger靶场之SQL injection with filter bypass via XML encoding通关秘籍
xml·数据库·sql