05【Linux经典命令】Linux 用户管理全面指南:从基础到高级操作
目录
前言
1 Linux用户管理基础概念
1.1 Linux用户类型
1.2 用户相关配置文件
1.3 UID与GID
2 用户创建与管理
2.1 创建用户
2.2 设置用户密码
3 用户权限管理
3.1 授予sudo权限
3.2 以其他用户身份执行命令
4 用户信息查询
4.1 查看用户基本信息
4.2 查看用户所属组
4.3 查看密码状态
4.4 查看密码有效期
5 用户账户策略管理
5.1 设置账户过期时间
5.2 强制用户下次登录修改密码
5.3 锁定与解锁用户
6 用户切换与环境
6.1 切换用户
6.2 用户环境变量
7 用户删除
7.1 删除用户及主目录
8 高级用户管理技巧
8.1 批量创建用户
8.2 修改用户属性
8.3 密码策略实施
9 安全最佳实践
10 常见问题解答
11 结语
前言
Linux作为多用户操作系统,其用户管理功能是系统管理员必须掌握的核心技能之一。本文将全面介绍Linux用户管理的各个方面,包括用户创建、密码设置、权限管理、用户组配置等实用操作深入理解Linux用户管理机制。
1 Linux用户管理基础概念
1.1 Linux用户类型
Linux系统中有三种主要用户类型:
- 超级用户(root):拥有系统最高权限,UID为0
- 系统用户:用于运行系统服务,UID范围通常为1-999
- 普通用户:由管理员创建的一般用户,UID通常从1000开始
1.2 用户相关配置文件
Linux用户信息主要存储在以下几个文件中:
- /etc/passwd:存储用户基本信息
- /etc/shadow:存储用户密码及密码策略
- /etc/group:存储用户组信息
- /etc/gshadow:存储用户组密码
1.3 UID与GID
- UID(User ID):每个用户唯一的数字标识
- GID(Group ID):用户主要组的数字标识
2 用户创建与管理
2.1 创建用户
- 最基本的用户创建命令:
useradd lianggj
这条命令会在系统中创建一个名为"lianggj"的用户,但不会创建主目录或设置密码。
- 更完整的用户创建方式:
useradd -m -s /bin/bash new_lianggj
参数说明:
- -m:创建用户主目录
- -s:指定用户默认shell
- 用户创建流程图:

流程说明:
- 系统首先检查用户名是否已存在
- 为新用户分配唯一的UID和GID
- 将用户信息写入/etc/passwd文件
- 在/etc/shadow中创建密码条目
- 创建用户主目录并设置适当权限
- 从/etc/skel目录复制初始配置文件
2.2 设置用户密码
- 创建用户后,需要为其设置密码:
echo "123456" | passwd --stdin lianggj
这条命令通过管道将密码"123456"传递给passwd命令,为lianggj用户设置密码。
安全建议:
- 避免使用简单密码
- 考虑使用pwgen或openssl rand生成随机密码
- 定期更换密码
3 用户权限管理
3.1 授予sudo权限
- 在Linux中,可以通过将用户添加到wheel组来授予sudo权限:
usermod -aG wheel lianggj
参数说明:
- -a:追加到现有组而不移除其他组
- -G:指定附加组
前提条件:确保wheel组在sudoers文件中有权限,通常位于/etc/sudoers中:%wheel ALL=(ALL) ALL
3.2 以其他用户身份执行命令
sudo -u lianggj command
4 用户信息查询
4.1 查看用户基本信息
id lianggj
- 输出示例:
uid=1001(lianggj) gid=1001(lianggj) groups=10(wheel)
4.2 查看用户所属组
groups lianggj
4.3 查看密码状态
passwd -S lianggj
- 输出示例:
lianggj PS 2024-12-13 7 99999 7 -1 (Password set, MD5 crypt.)
4.4 查看密码有效期
chage -l lianggj
- 输出示例:
Last password change : Dec 13, 2024
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 7
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
5 用户账户策略管理
5.1 设置账户过期时间
# 设置lianggj账户将在2025年12月31日过期
chage -E 2025-12-31 lianggj
5.2 强制用户下次登录修改密码
chage -d 0 lianggj
5.3 锁定与解锁用户
- 锁定用户:
passwd -l lianggj
- 解锁用户:
passwd -u lianggj
- 账户状态管理流程

流程说明:
- 管理员选择要执行的操作类型
- 根据操作类型执行相应命令
- 系统修改/etc/shadow文件中相应字段
- 更改立即生效
6 用户切换与环境
6.1 切换用户
su - lianggj
参数说明:
- -或-l:模拟登录,加载用户环境变量
6.2 用户环境变量
用户环境变量通常定义在以下文件中:
- ~/.bash_profile
- ~/.bashrc
- ~/.profile
7 用户删除
7.1 删除用户及主目录
userdel -r lianggj
参数说明:
- -r:删除用户主目录和邮件池
- 用户删除流程

流程说明:
- 系统检查用户是否存在
- 终止该用户的所有进程
- 从/etc/passwd中删除用户条目
- 从/etc/shadow中删除密码条目
- 从/etc/group中移除相关组信息
- 删除用户主目录和邮件目录
8 高级用户管理技巧
8.1 批量创建用户
- 可以使用脚本或newusers命令批量创建用户:
newusers users.txt
- 其中users.txt文件格式为:
username:password:UID:GID:comment:homedir:shell
8.2 修改用户属性
usermod -c "lianggj User" -d /home/new_lianggj -s /bin/bash lianggj
参数说明:
- -c:设置用户注释
- -d:修改主目录路径
- -s:修改默认shell
8.3 密码策略实施
- 可以通过编辑/etc/login.defs设置全局密码策略:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_WARN_AGE 14
9 安全最佳实践
- 最小权限原则:只授予用户必要的权限
- 定期审计:检查用户权限和活动
- 密码策略:强制使用复杂密码并定期更换
- 账户过期:为临时账户设置过期时间
- 禁用root SSH登录:通过编辑/etc/ssh/sshd_config:
PermitRootLogin no
10 常见问题解答
Q1: 用户被锁定后如何解锁?A: 使用passwd -u username或手动编辑/etc/shadow文件移除密码前的"!"
Q2: 如何查看系统所有用户?A: 使用getent passwd或查看/etc/passwd文件
Q3: 为什么用户无法使用sudo?A: 检查用户是否在sudoers文件或wheel组中,并确认wheel组有sudo权限
Q4: 如何限制用户资源使用?A: 使用ulimit或配置/etc/security/limits.conf文件
11 结语
Linux用户管理是系统管理员日常工作的重要组成部分。了解用户管理命令和技巧,能够有效地管理系统用户、设置适当的权限并维护系统安全。记住,良好的用户管理实践是系统安全的第一道防线。
相关文章:

05【Linux经典命令】Linux 用户管理全面指南:从基础到高级操作
目录 前言 1 Linux用户管理基础概念 1.1 Linux用户类型 1.2 用户相关配置文件 1.3 UID与GID 2 用户创建与管理 2.1 创建用户 2.2 设置用户密码 3 用户权限管理 3.1 授予sudo权限 3.2 以其他用户身份执行命令 4 用户信息查询 4.1 查看用户基本信息 4.2 查看用户所…...
POP3、IMAP、SMTP:三大邮件协议核心差异与应用场景解析
## 一、协议概述与核心功能 电子邮件系统的运行依赖三大核心协议:**POP3**(Post Office Protocol 3)、**IMAP**(Internet Message Access Protocol)和**SMTP**(Simple Mail Transfer Protocol)…...
HarmonyOS5 仓颉入门:和 ArkTs 互操作
现在一般的场景是在已有 ArkTs 库中使用仓颉,所以可以将仓颉代码封装为 ArkTs 库,提供给外部使用。 原理就是互操作宏解析被注解修饰的仓颉代码,会自动生成 ArkTs 声明文件和互操作层代码。 使用步骤: 1.在 cj 文件中ÿ…...
【Git 合并冲突解决记录:从 “refusing to merge unrelated histories“ 到批量冲突处理】
Git 合并冲突解决记录:从 “refusing to merge unrelated histories” 到批量冲突处理 前言 作为开发者,我们经常会遇到各种 Git 问题,其中最让人头疼的莫过于 fatal: refusing to merge unrelated histories 这个错误。最近在项目开发中遇…...

使用vite-plugin-html在 HTML 文件中动态注入数据,如元数据、环境变量、标题
vite-plugin-html 是一个用于 Vite 构建工具的插件,它可以帮助你在构建过程中动态注入一些 HTML 内容,比如标题、元数据、环境变量等。通过使用这个插件,你可以根据项目的配置和环境变量自动生成带有动态内容的 HTML 文件,适用于 …...

Kinova机械臂在Atlas手术导航系统中的核心作用
Kinova机械臂凭借其高精度运动控制和智能交互功能,成为Atlas手术导航系统的重要组成部分。该系统通过实时跟踪患者位置和精确规划手术路径,提高了医疗过程的精准性与效率。灵活的设计使外科医生能够更轻松地操作复杂的手术工具,从而提升患者安…...
C++——智能指针 auto_ptr
一、RAII思想的引入 #include <iostream> using namespace std;#if 0 // C中动态申请的资源需要用户自己手动释放 // 如果操作不当,容易造成内存泄漏 // 能否做到让资源自动被释放:RAII // RAII : 将资源交给对象管理,对象被销毁时自动…...
.Net Framework 4/C# System.IO 命名空间(文件的输入输出)
一、Path 类 Path 类是一个静态类,只能通过类名访问它的静态成员。 获得文件的名字,可以用 GetFileName,返回的是具有扩展名的指定路径字符串的文件名,也可以用 GetFileNameWithoutExtension,返回的是不具有扩展名的指定路径字符串的文件名。 获得文件夹的名字,可以用 G…...
图像分类进阶:从基础到专业 (superior哥AI系列第10期)
图像分类进阶:从基础到专业 🚀 前言 👋 哈喽,各位深度学习的探索者们!我是你们的老朋友superior哥 😎 经过前面九篇文章的学习,相信大家对深度学习的基础概念、神经网络架构、以及训练部署都…...

性能优化之SSR、SSG
一、SSR和SSG介绍 SSR(Server-Side Rendering,服务端渲染)和 SSG(Static Site Generation,静态站点生成)是现代前端框架(如 Next.js、Nuxt.js、Gatsby)的核心渲染策略,用…...
【C语言】字符与字符串
在 C 语言中,字符(Character) 和 字符串(String) 是两个不同但相关的概念。下面详细介绍它们的定义、存储方式和使用方法: 一、字符(Character) 1. 定义与存储 基本类型ÿ…...

经典算法:回文链表
题目:234. 回文链表 给你一个单链表的头节点 head,请你判断该链表是否为 回文链表。如果是,返回 true;否则,返回 false。 示例 1: 输入:head [1,2,2,1] 输出:true示例 2&#x…...

uboot移植之GPIO上电初始状态的调整
开发板在上电之后,GPIO都有一个默认初始状态,这个状态可能是高电平也可能是低电平。而我们的应用程序在正式接管控制这些GPIO,是在内核起来并成功加载根文件系统之后。所以在内核启动的这段时间内,这些GPIO保持在一种不受控的状态…...
PasteForm(ABP)框架之实现更加灵活的类似多租户的归属过滤功能,比如只能查看自己的相关数据
需求说明 在开发中,我们常会遇到一个问题,就是归属查询问题,比如只能查看我自己的,往往这个时候还附带了一个规则,比如有人是在这个规则之外的! 1.只能查看创建者自己创建的资料 2.只能查看我店铺的相关内容,不能查看别人店铺的 3.只能查看我部门的相关信息等 可能你会…...

本地id_rsa.pub输入到服务器~/.ssh/authorized_keys后,依然需要输入密码的解决办法
首先检查服务器: sudo vim /etc/ssh/sshd_config 然后把这两个修改为: 如果依然需要输入密码,在本地终端: ssh -v userserver 查看认证过程,例如我这里提示说明客户端已成功尝试使用密钥认证: 进一步…...

【设计模式-3.7】结构型——组合模式
说明:本文介绍结构型设计模式之一的组合模式 定义 组合模式(Composite Pattern)又叫作整体-部分(Part-Whole)模式,它的宗旨是通过将单个对象(叶子节点)和组合对象(树枝…...

Unity Mac 笔记本操作入门
在 macOS 笔记本电脑上使用 Unity Editor 的场景视图 (Scene View) 旋转视角,主要依赖于触摸板手势和键盘修饰键的组合。由于没有物理中键,操作方式会与 Windows 鼠标略有不同。 以下是具体的旋转视角操作: 1. 基本旋转视角 (Orbit) 这是最…...

实时数据仓库是什么?数据仓库设计怎么做?
目录 一、实时数据仓库是什么 (一)实时数据仓库的定义 (二)实时数据仓库的特点 二、实时数据仓库的应用场景 (一)金融行业 (二)电商行业 (三)物联网行…...

Linux(12)——基础IO(下)
目录 六、重定向 📄输出重定向 📄输入重定向 📄追加重定向 📄dup2 七、理解一切皆文件 八、缓冲区 🧠什么是缓冲区 🧠为什么要引入缓冲区 📄缓冲区类型 九、FILE 六、重定向 我们这…...

WPF可拖拽ListView
1.控件描述 WPF实现一个ListView控件Item子项可删除也可拖拽排序,效果如下图所示 2.实现代码 配合 WrapPanel 实现水平自动换行,并开启拖拽 <ListViewx:Name"listView"Grid.Row"1"Width"300"AllowDrop"True&…...
rocketmq索引
索引的理解 索引是什么, 索引实质是 相同数据的另一种存储结构 我们都知道读和写天然是存在矛盾的, 我们希望写的快,当然是顺序写的性能最高, 顺序写造成数据杂乱无章,没法按照一定的规律去找数。 如果想要找数的效率高, 必须要有结构组织的存放数据, 这样方便按规律找…...

[蓝桥杯]倍数问题
倍数问题 题目描述 众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数。但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼。现在小葱给了你 nn 个数,希望你从这 nn 个数中找到三个数,使得…...
定时任务的 cron 表达式
定时任务的 cron 表达式 一、什么时 cron 表达式 Cron表达式是一种广泛应用于Linux系统的时间表示格式,常用于定时任务的调度。Cron表达式可以通过指定不同的时间参数,描述一个在 未来某个时间点执行的任务。 二、Cron表达式语法 秒 分 时 日 月 周几…...

【MySQL】 约束
一、约束的定义 MySQL 约束是用于限制表中数据的规则,确保数据的 准确性 和 一致性 。约束可以在创建表时定义,也可以在表创建后通过修改表结构添加。 二、常见的约束类型 2.1 NOT NULL 非空约束 加了非空约束的列不能为 NULL 值,如果可以…...
MySQL 的 redo log 和 binlog 区别?
MySQL 的 redo log 和 binlog 区别? 1. 核心概念对比 1.1 redo log(重做日志) go专栏:https://duoke360.com/tutorial/path/golang 定位:InnoDB引擎层的物理日志作用:实现事务的持久性(ACID中的Durability)记录内容:物理页级别的修改(如"在page 5的offset 10…...

前端vue打开多个窗口,关闭窗口后才继续执行后续逻辑
1.打开第一个弹窗 弹窗的按钮代码 2.点击窗口1中按钮,打开新的窗口 // 请领单按钮点击 async cb_6_delClick() {let ls_yfbm this.st_3Value.BMBMlet pstring {}pstring.a ls_yfbmpstring.b this.queryFormDialog.outDepotDeptCodeawait this.openwithparm_w_md…...

「深度拆解」Spring Boot如何用DeepSeek重构MCP通信层?从线程模型到分布式推理的架构进化
什么是MCP? MCP(Model Context Protocol,模型上下文协议)是由Anthropic公司于2024年11月推出的开放标准协议,旨在为大型语言模型(LLM)与外部数据源、工具及系统提供统一的交互接口,被…...
如何避免在前端项目中出现重复的第三方依赖包?
在现代前端开发中,**重复的第三方依赖包(Duplicate Dependencies)**是导致项目体积膨胀、加载速度变慢、构建时间延长的常见问题。尤其在使用模块打包工具(如 Webpack、Vite、Rollup)时,若项目或其依赖的库…...
Java开发中复用公共SQL的方法
在一次Java后端开发的面试中,面试官问了我一个问题:“你在写代码时会复用公共SQL吗?如果会的话,能详细介绍一下你是如何实现的吗?”这个问题让我眼前一亮,因为在实际项目中,SQL复用确实是一个非…...

【西门子杯工业嵌入式-2-点亮一颗LED】
西门子杯工业嵌入式-2-点亮一颗LED 一、课程回顾与目标1.上节课内容回顾2.本节课目标 二、硬件连接与原理1. 硬件连接方式2. 连接实例 三、GPIO原理知识1. GPIO结构2. 推挽输出模式原理 四、软件实现步骤1. 项目结构设置2. 函数定义3. led.c 文件编写初始化函数 led_init交替闪…...