深入理解 Linux 用户管理:从基础到实践
在 Linux 操作系统中,用户管理是确保系统安全、合理分配资源的核心环节。无论是个人开发者搭建本地开发环境,还是运维人员管理企业级服务器集群,熟练掌握 Linux 用户管理都是一项必备技能。本文将从用户管理的基础概念出发,结合实际操作命令,带大家深入了解 Linux 用户管理的方方面面。
一、Linux 用户管理基础概念
在 Linux 系统中,用户可以分为三类:系统用户、普通用户和超级用户(root)。系统用户主要用于运行系统服务,例如apache用户用于运行 Apache Web 服务器,mysql用户用于运行 MySQL 数据库服务等,这类用户通常不允许登录系统,其存在主要是为了保证服务运行的安全性和隔离性。普通用户则是为实际使用系统的人创建的,每个普通用户都有自己独立的家目录,用于存放个人数据和配置文件。超级用户root拥有系统的最高权限,可以对系统进行任何操作,包括创建和删除用户、修改系统配置文件等,但也正因如此,使用root用户时需要格外谨慎,一旦操作失误可能会导致系统崩溃。
此外,Linux 还引入了群组的概念。一个用户可以属于一个或多个群组,群组的存在方便了对用户权限的集中管理。例如,将所有开发人员加入到developers群组,然后对项目目录设置developers群组的读写权限,这样该群组内的所有用户都能访问和操作项目目录,大大提高了权限管理的效率。
二、用户管理常用命令
1. 创建用户
在 Linux 中,可以使用useradd命令来创建新用户。例如,要创建一个名为testuser的用户,可以执行以下命令:
sudo useradd testuser
执行该命令后,系统会自动为testuser创建一个家目录(默认为/home/testuser),并设置默认的用户配置。如果希望在创建用户时指定家目录,可以使用-d选项,如:
sudo useradd -d /home/newuser testuser
此外,还可以使用-m选项在创建用户时同时创建家目录(即使默认目录不存在),以及使用-s选项指定用户的默认 Shell,例如:
sudo useradd -m -s /bin/bash testuser
这将创建一个名为testuser的用户,同时创建其家目录,并将默认 Shell 设置为bash。
2. 设置用户密码
创建用户后,需要为其设置密码,否则用户无法登录系统。可以使用passwd命令来设置或修改用户密码。如果是普通用户执行passwd命令,只能修改自己的密码;而root用户执行该命令时,可以修改任何用户的密码。例如,要为testuser用户设置密码,root用户可以执行以下命令:
sudo passwd testuser
执行命令后,系统会提示输入新密码,并要求再次确认密码。
3. 删除用户
当不再需要某个用户时,可以使用userdel命令将其删除。例如,要删除testuser用户,可以执行:
sudo userdel testuser
默认情况下,userdel命令只会删除用户账号,不会删除用户的家目录。如果希望在删除用户时同时删除其家目录,可以使用-r选项:
sudo userdel -r testuser
4. 用户权限管理
Linux 系统通过文件和目录的权限设置来控制用户对资源的访问。每个文件和目录都有所有者(owner)、所属群组(group)和其他用户(others)三种身份,每种身份又分别有读(r)、写(w)、执行(x)三种权限。可以使用chown命令来更改文件或目录的所有者,使用chgrp命令来更改所属群组,使用chmod命令来修改权限。
例如,要将文件test.txt的所有者更改为testuser,可以执行:
sudo chown testuser test.txt
要将文件test.txt的所属群组更改为developers,可以执行:
sudo chgrp developers test.txt
要为testuser用户赋予文件test.txt的读写权限,可以执行:
sudo chmod u+rw test.txt
这里u表示所有者(user),+rw表示添加读和写权限。如果要为所属群组和其他用户赋予执行权限,可以使用g+x和o+x,如:
sudo chmod g+x,o+x test.txt
5. 群组管理
创建群组可以使用groupadd命令,例如创建一个名为newgroup的群组:
sudo groupadd newgroup
删除群组使用groupdel命令:
sudo groupdel newgroup
将用户添加到群组可以使用usermod命令的-aG选项,其中-a表示追加(不覆盖原有群组),G表示指定附加群组。例如,将testuser用户添加到newgroup群组:
sudo usermod -aG newgroup testuser
三、用户管理的实践应用场景
1. 多用户协作开发
在团队开发项目中,经常需要多个开发人员共同访问和修改项目文件。通过创建一个开发群组,将所有开发人员加入该群组,并设置项目目录对该群组的读写权限,可以实现安全高效的协作开发。例如,创建developers群组,将user1和user2用户加入该群组,然后设置项目目录/project的群组权限为读写:
sudo groupadd developerssudo usermod -aG developers user1sudo usermod -aG developers user2sudo chgrp developers /projectsudo chmod g+rw /project
2. 服务器安全管理
为了提高服务器的安全性,应尽量避免直接使用root用户登录。可以创建一个具有sudo权限的普通用户,通过该用户登录服务器后,再使用sudo命令执行需要管理员权限的操作。首先创建一个用户,例如adminuser,并为其设置密码:
sudo useradd -m -s /bin/bash adminusersudo passwd adminuser
然后将adminuser用户添加到sudo群组(在 Debian 和 Ubuntu 系统中为sudo群组,在 CentOS 系统中为wheel群组):
sudo usermod -aG sudo adminuser
这样,adminuser用户就可以通过sudo命令执行管理员操作,同时降低了因误操作root权限带来的风险。
四、总结
Linux 用户管理是一项复杂但又至关重要的工作,通过合理地创建、管理用户和群组,以及细致地设置权限,可以有效保障系统的安全和稳定,提高多用户环境下的协作效率。无论是初学者还是有经验的系统管理员,都应该熟练掌握这些用户管理的基本命令和方法,并在实际工作中不断积累经验,根据不同的应用场景灵活运用,从而更好地发挥 Linux 系统的强大功能。希望本文能帮助大家对 Linux 用户管理有更深入的理解和掌握。
相关文章:
深入理解 Linux 用户管理:从基础到实践
在 Linux 操作系统中,用户管理是确保系统安全、合理分配资源的核心环节。无论是个人开发者搭建本地开发环境,还是运维人员管理企业级服务器集群,熟练掌握 Linux 用户管理都是一项必备技能。本文将从用户管理的基础概念出发,结合实…...
Go语言之路————指针、结构体、方法
Go语言之路————指针、结构体、方法 前言指针结构体声明初始化使用组合引用结构体和指针结构体的标签 方法例子结合结构体总结 前言 我是一名多年Java开发人员,因为工作需要现在要学习go语言,Go语言之路是一个系列,记录着我从0开始接触Go…...
【漫话机器学习系列】227.信息检索与数据挖掘中的常用加权技术(TF-IDF)
在自然语言处理(NLP)、信息检索(IR)和数据挖掘(DM)领域中,TF-IDF 是一种非常经典且常用的加权技术。 无论是搜索引擎排序、文本挖掘,还是特征工程,TF-IDF都扮演着重要角色…...
【音视频】FFmpeg过滤器框架分析
ffmpeg的filter⽤起来是和Gstreamer的plugin是⼀样的概念,通过avfilter_link,将各个创建好的filter按⾃⼰想要的次序链接到⼀起,然后avfilter_graph_config之后,就可以正常使⽤。 ⽐较常⽤的滤镜有:scale、trim、over…...
硬盘损坏数据恢复后对python程序的影响
最近硬盘突然间坏掉了,让数据商恢复了2个月今天终于拿到了恢复后的数据。 但是一测试问题就来了: PS E:\geosystem> python manage.py runserver 0.0.0.0:5000 Unhandled exception in thread started by <function check_errors.<locals>.…...
Azure Devops - 尝试一下在Pipeline中使用Self-hosted Windows agent
1.简单介绍 Azure Devops是微软提供的辅助软件的开发,测试,部署以及计划和进度跟踪的平台,通过Azure Devops可以使开发者,项目经理,运维人员在软件的整个生命周期中更紧密地合作,同时借助Continuous Integ…...
Linux红帽:RHCSA认证知识讲解(十 四)分区管理、交换分区,创建逻辑卷与调整逻辑卷的大小
Linux红帽:RHCSA认证知识讲解(十 四)分区管理、交换分区,创建逻辑卷与调整逻辑卷的大小 前言一、分区管理,使用fdisk管理分区1.1 找到硬盘1.2 使用fdisk分区1.3 格式化分区1.4 挂载分区 二、创建逻辑卷,调整…...
详解 Unreal Engine(虚幻引擎)
详解 Unreal Engine(虚幻引擎) Unreal Engine(简称 UE)是由 Epic Games 开发的一款全球领先的实时渲染引擎,自 1998 年随首款游戏《Unreal》问世以来,已发展成为覆盖 游戏开发、影视制作、建筑可视化、汽车…...
【Linux网络】Http服务优化 - 增加请求后缀、状态码描述、重定向、自动跳转及注册多功能服务
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
Docker compose 部署微服务项目(从0-1出发纯享版无废话)
目录 一.Docker安装 (1)安装依赖 (2)安装Docker (3)启动Docker服务 (4)系统配置 (5)镜像加速配置 (6)验证安装 二.编写Docke…...
C#学习第19天:多线程
什么是多线程? 定义:多线程允许一个程序分成多个独立的执行路径来进行并发操作。用途:提高程序的执行效率,特别是在I/O操作、计算密集型任务和用户交互中。 多线程核心概念 1. 创建和管理线程 使用 Thread 类 using System; u…...
day7 python针对心脏病数据集预处理
在数据科学与机器学习领域,数据预处理与可视化是挖掘数据价值的关键前置步骤。本文以 heart1.csv 心脑血管疾病数据集为例,借助 Python 中的 pandas、matplotlib、seaborn 以及 scikit-learn 库,详细演示数据加载、缺失值处理、特征相关性分析…...
树莓派学习专题<9>:使用V4L2驱动获取摄像头数据--设定分辨率和帧率
树莓派学习专题<9>:使用V4L2驱动获取摄像头数据--设定分辨率和帧率 1. 设定分辨率2. 设定帧率3. 设定分辨率代码解析4. 获取与设定帧率代码解析5. 实测 1. 设定分辨率 使用如下代码设定摄像头的分辨率: #define CAMERA_RESOLUTI…...
模态链:利用视觉-语言模型从多模态人类视频中学习操作程序
25年4月来自谷歌 DeepMind 和斯坦福大学的论文“Chain-of-Modality: Learning Manipulation Programs from Multimodal Human Videos with Vision-Language-Models”。 从人类视频中学习执行操作任务,是一种很有前景的机器人教学方法。然而,许多操作任务…...
JAVAEE初阶01
个人主页 JavaSE专栏 JAVAEE初阶01 操作系统 1.对下(硬件)管理各种计算机设备 2.对上(软件)为各种软件提供一个稳定的运行环境 线程 运行的程序在操作系统中以进程的形式存在 进程是系统分配资源的最小单位 进程与线程的关…...
【网络安全】用 Linux 命令行 CLI 日志文件处理指南
Linux 命令行 CLI 神技回忆录:日志文件处理指南(以 Zeek Logs 为例) 1. CLI简介2. 基础操作3. 文件读取4. 查找与筛选5. 进阶操作6. Zeek 日志骚操作7. 结语 1. CLI简介 在数据分析的世界里,图形界面(GUI)…...
[C++] 高精度乘法
目录 引入: 大整数比较比较方法例题1-青蛙计数题目描述 输入描述输出描述输入输出样例AC代码 高精度乘法模版高精度运算小合集(这集乘法上集加法) 注意: 若还没有学过高精度运算的话先去看高精度加法 引入: 大整数比较 比较方法 大整数比较可以使用此方法比较(注释有讲解): …...
反事实——AI与思维模型【82】
一、定义 反事实思维模型是一种心理认知模型,它指的是人们在头脑中对已经发生的事件进行否定,然后构建出一种可能性假设的思维活动。简单来说,就是思考“如果当时……,那么就会……”的情景。这种思维方式让我们能够超越现实的限制,设想不同的可能性和结果,从而对过去的…...
Java学习手册:Java开发常用的内置工具类包
以下是常用 Java 内置工具包。 • 日期时间处理工具包 • java.time包(JSR 310):这是 Java 8 引入的一套全新的日期时间 API,旨在替代陈旧的java.util.Date和java.util.Calendar类。其中的LocalDate用于表示不带时区的日期&…...
JAVA多线程(8.0)
目录 线程池 为什么使用线程池 线程池的使用 工厂类Executors(工厂模式) submit 实现一个线程池 线程池 为什么使用线程池 在前面我们都是通过new Thread() 来创建线程的,虽然在java中对线程的创建、中断、销毁、等值等功能提供了支持…...
通过门店销售明细表用Python Pandas得到每月每个门店的销冠和按月的同比环比数据
假设我在本地有Excel销售表,包含ID主键、门店ID、日期、销售员姓名和销售额,需要用Pandas统计出每个月所有门店和各门店销售额最高的人,不一定是一个人,以及他所在的门店ID和月总销售额。 步骤1:导入数据并处理日期 …...
详解最新链路追踪skywalking框架介绍、架构、环境本地部署配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等
1.skywalking介绍 多种监控手段,可以通过语言探针和service mesh 获得监控数据支持多种语言自动探针,包含java/net/nodejs轻量高效,无需大数据平台和大量的服务器资源模块化,UI、存储、集群管理都有多种机制可选支持告警优秀的可…...
【OSG学习笔记】Day 11: 文件格式与数据交换
OSG 常用文件格式简介 在开始转换前,先了解 OSG 生态中常见的文件格式: .osg:OSG 标准二进制格式,存储场景图数据,体积小、加载快,适合实时渲染。 .ive:OSG 标准文本格式,可读性强,便于手动编辑或调试场景图结构(本质是 XML 格式的文本描述)。 .osgb:OSG 二进制格…...
2025.04.26-美团春招笔试题-第二题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 02. 曼哈顿距离探测器 问题描述 K小姐正在研发一种城市交通探测器,该探测器能够检测城市中任意两个位置之间的曼哈顿距离是否恰好为特定值。曼哈顿距离是在直角坐标系中,两点之间…...
搭建基于火灾风险预测与防范的消防安全科普小程序
基于微信小程序的消防安全科普互动平台的设计与实现,是关于微信小程序的,知识课程学习,包括学习后答题。 技术栈主要采用微信小程序云开发,有下面的模块: 1.课程学习模块 2.资讯模块 3.答题模块 4.我的模块 还需…...
05--Altium Designer(AD)的详细安装
一、软件的下载 Altium Designer官网下载 1、临近五一的假期,想着搞个项目,且这个项目与PCB有关系,所以就下这个软件来玩玩。下面保姆级教大家安装。 2、选择适合自己的版本下载(我安装的是24的) 3、软件安装 1.下…...
药监平台上传数据报资源码不存在
问题:电子监管码上传药监平台提示“导入的资源码不存在” 现象:从生产系统导出的关联关系数据包上传到药监平台时显示: 原因:上传数据包的通道的资源码与数据包的资源码不匹配。 解决方法:检查药监平台和生产系统的药…...
DeepSeek预训练追求极致的训练效率的做法
DeepSeek在预训练阶段通过多种技术手段实现了极致的训练效率,其中包括采用FP8混合精度训练框架以降低计算和内存需求 ,创新性地引入Multi-head Latent Attention(MLA)压缩KV缓存以提升推理效率,以及基于Mixture-of-Experts(MoE)的稀疏计算架构以在保证性能的同时显著降低…...
Windows11系统中GIT下载
Windows11系统中GIT下载 0、GIT背景介绍0.0 GIT概述0.1 GIT诞生背景0.2 Linus Torvalds 的设计目标0.3 Git 的诞生(2005 年)0.4 Git 的后续发展0.5 为什么 Git 能成功? 1、资源下载地址1.1 官网资源1.2 站内资源 2、安装指导3、验证是否下载完…...
Maven的概念与初识Maven
目录 一、Maven的概念 1. 什么是Maven 2. 项目构建:从代码到部署的标准化流程 2.1 Maven构建生命周期 2.2 传统构建 vs Maven构建 3. 依赖管理:解决“JAR地狱”的利器 3.1 依赖声明 3.2 依赖传递与冲突解决 4. Maven仓库:依赖的存储…...
【Android】app调用wallpaperManager.setBitmap的隐藏权限
这是一个杞人忧天的问题,app中,可以通过wallpaperManager.setBitmap来设置壁纸, private void setWallpaper() {// 获取 WallpaperManager 实例WallpaperManager wallpaperManager WallpaperManager.getInstance(getApplicationContext());t…...
ORACLE数据库备份入门:第四部分:2-备份场景举例
下面以4个常见的场景为例,介绍如何规划备份方案。备份方案没有标准答案,需要根据实现情况来制定,也和管理员的个人使用习惯有很大相关性。 1 交易型数据库备份 以银行的交易系统为例,除了前一章节提到的关于RPO和RTO的指标外&am…...
STL中emplace实现原理是什么?
template <class... Args>void emplace_back (Args&&... args);这个是vector的emplace_back方法,用到的c11的语法有三个,分别是万能引用、完美转发、参数包。 参数包中的参数是用来构造vector<T>中的T对象。 假如我直接传的就是一个…...
血泪之arduino库文件找不到ArduinoJSON.h: No such file or directory错误原因
#include <ArduinoJson.h> 始终报这个错误, C:\techxixi_project\Arduino\test\camer\camertoserver\camertoserver.ino:6:10: fatal error: ArduinoJSON.h: No such file or directory 6 | #include <ArduinoJSON.h> | ^~~~~~~~~…...
通过门店销售明细表用PySpark得到每月每个门店的销冠和按月的同比环比数据
假设我在Amazon S3上有销售表的Parquet数据文件的路径,包含ID主键、门店ID、日期、销售员姓名和销售额,需要分别用PySpark的SparkSQL和Dataframe API统计出每个月所有门店和各门店销售额最高的人,不一定是一个人,以及他所在的门店…...
【前后端分离项目】Vue+Springboot+MySQL
文章目录 1.安装 Node.js2.配置 Node.js 环境3.安装 Node.js 国内镜像4.创建 Vue 项目5.运行 Vue 项目6.访问 Vue 项目7.创建 Spring Boot 项目8.运行 Spring Boot 项目9.访问 Spring Boot 项目10.实现 Vue 与 Spring Boot 联动11.安装 axios12.编写请求13.调用函数请求接口14.…...
图解 Redis 事务 ACID特性 |源码解析|EXEC、WATCH、QUEUE
写在前面 Redis 通过 MULTI、EXEC、WATCH 等命令来实现事务功能。Redis的事务是将多个命令请求打包,然后一次性、按照顺序的执行多个命令的机制,并且在事务执行期间,服务器不会中断事务而该去执行其他客户端的命令请求。 就像下面这样&#…...
w~嵌入式C语言~合集3
我自己的原文哦~ https://blog.51cto.com/whaosoft/13870307 一、单片机多任务事件驱动 单片机的ROM与RAM存贮空间有限,一般没有多线程可用,给复杂的单片机项目带来困扰。 经过多年的单片机项目实践,借鉴windows消息机制的思想ÿ…...
CMCC RAX3000M CH EC 算力版刷机(中国移动 RAX3000M 算力版)刷机
刷机前面的工作参考: https://blog.csdn.net/asdcls/article/details/147434218 刷机 eMMC Flash instructions: 1. SSH to RAX3000M, and backup everything, especially factory part. (data partition can be ignored, its useless.) 2. Write new GPT tabl…...
cron定时任务
cron定时任务 一、Cron表达式的定义 基础结构 Cron表达式是由空格分隔的6或7个字段组成的字符串,格式为: 秒 分 时 日 月 星期 [年]其中,年通常可以被省略 字段说明: 秒(0-59) 秒字段表示每分钟的哪一…...
1.4 大模型应用产品与技术架构
目录 一,产品架构 1.1 AI Embedded产品架构 1.2 AI Copilot产品架构 1.3 AI Agent产品架构 二,技术架构 2.1 纯Prompt 2.2 Agent Function Calling 2.3 RAG (Retrieval-Augmented Generation 检索增强生成) 2.4 Fine-tu…...
Android HAL HIDL
1 Android HAL HIDL 1.1 Android中查看有哪些HIDL HAL HIDL是Treble Interface的一部分。 adb root adb shell # lshal 1.2 Android打印C调用栈 #include <utils/CallStack.h> 在需要打印的地方加如下的定义。 android::CallStack stack("oem"); logcat | g…...
std::mutex底层实现原理
std::mutex是一个用于实现互斥访问的类,其具备两个成员函数——lock和unlock 锁的底层实现原理 锁的底层实现是基于原子操作的,这些原子操作是由指令支持的,因为单个指令是不能被中断的 一些与锁的实现有关的原子指令为: 待补充…...
性能提升手段--池化技术
看到hadoop代码里有ByteBufferPool,使用池子来避免频繁创建、销毁ByteBuffer,减轻GC压力,提高性能。 顺便总结一下池化技术 一、什么是池化技术? 池化(Pooling) 是一种资源管理策略,通过预先创建并复用资源(如数据库连接、线程、内存对象等)来提…...
精益数据分析(28/126):解读商业模式拼图与关键指标
精益数据分析(28/126):解读商业模式拼图与关键指标 在创业和数据分析的探索旅程中,每一次深入研究都可能带来新的启发和突破。今天,我们依旧带着共同进步的初心,深入解读《精益数据分析》中关于商业模式的…...
QT6 源(52)篇二:存储 c 语言字符串的类 QByteArray 的使用举例,
(3) (4) 谢谢...
工业摄像头通过USB接口实现图像
工业摄像头系列概览:类型与应用 工业摄像头系列涵盖了多种类型,以满足不同行业和应用的需求。以下是对工业摄像头系列的一些介绍: 一、主要类型与特点 USB工业摄像头 :这类摄像头通常通过USB接口与计算机连接,适用于…...
【BBDM】main.py -- notes
命令行接口 python main.py [OPTIONS]参数 参数类型默认值说明-c, --configstr"BBDM_base.yml"配置文件路径-s, --seedint1234随机种子,用于结果复现-r, --result_pathstr"results"结果保存目录-t, --trainflagFalse训练模式开关:…...
X86物理机安装iStoreOS软路由
目录 安装前准备 制作启动盘 安装系统到硬盘 启动与初始配置 常见问题与注意事项 参考资料 安装前准备 硬件设备 X86物理机(如普通电脑、J4125/N5105等小主机) U盘(建议容量≥2GB) 显示器、键盘(用于初始配置…...
QML Date:日期处理示例
目录 引言相关阅读QML Date对象知识概要格式化选项 DateExamples示例解析代码解析示例1:日期格式化示例2:不同地区的日期显示示例3:日期解析示例4:自定义格式示例5:日期与时间戳转换 运行效果总结下载链接 引言 在Qt …...