当前位置: 首页 > ai >正文

【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文件条目格式如下:

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文件条目格式如下:

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文件条目格式如下:

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文件条目格式如下:

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:自动创建用户邮箱文件,用于存储邮件。
http://www.xdnf.cn/news/18799.html

相关文章:

  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day14
  • 蓝桥杯算法之基础知识(3)——Python的idle的快捷键设置(idle改键)
  • OpenCV实战1.信用卡数字识别
  • 极简风格PDF格式转换解决方案
  • 人工智能安全地图:将人工智能漏洞与现实世界的影响联系起来
  • Linux 系统核心调优:CPU、磁盘 I/O、网络与内核参数实战
  • Java全栈开发面试实录:从基础到实战的深度探索
  • 【AI算力平台】算力高效调度策略——GPU调度
  • Rust 登堂 之 函数式编程(三)
  • vagrant怎么在宿主机管理虚拟机镜像box(先搁置)
  • PyTorch生成式人工智能——PatchGAN详解与实现
  • LeetCode 438. 找到字符串中所有的字母异位词
  • 功能强大的PDF工具箱-- PDF补丁丁,v1.1.0.4657新版本,免费无广告,开箱即用版~
  • flutter专栏--dart基础知识
  • Android系统学习2——Android.Utils.Log模块讨论
  • [Maven 基础课程]Maven 是什么
  • Java微服务AI集成指南:LangChain4j vs SpringAI
  • imx6ull-驱动开发篇43——I.MX6U 的 I2C 驱动分析
  • 软件开发技术栈
  • 集成电路学习:什么是ResNet深度残差网络
  • LeetCode 2140. 解决智力问题
  • JavaScript常用的算法详解
  • 8.26网络编程——Modbus TCP
  • 【跨国数仓迁移最佳实践7】基于MaxCompute多租的大数据平台架构
  • 发力低空经济领域,移动云为前沿产业加速崛起注入云端动能
  • Tomcat下载历史版本
  • 前沿技术趋势与应用:探索数字世界的下一个十年
  • 【第三章】软件测试缺陷管理:从判断到回归的全流程实践指南​
  • 支持向量机学习
  • 33.ansible 比较重要的配置文件