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

linux-用户与权限管理-组管理

在 Linux 系统中,用户、组与权限管理是保障系统安全的重要机制。用户和组的管理不仅涉及对系统资源的访问控制,还用于权限的分配和共享。组管理在 Linux 中尤其重要,它能够帮助管理员组织用户并为不同的组分配特定权限,从而控制用户对文件和目录的访问权限。

一、用户与组的概念

1.1 用户(User)

每个用户在 Linux 系统中都有一个唯一的标识,称为 用户 ID(UID)。在 Linux 系统中,用户的主要作用是进行身份标识与权限控制。用户分为三类:

  1. 超级用户(root):又称管理员,具有系统的最高权限,可以对系统进行任何操作。
  2. 系统用户:一些用于运行特定服务的用户,通常不会登录到系统,但系统会使用这些用户来执行服务程序。
  3. 普通用户:系统中的一般用户,权限受限,仅能对属于自己的文件和目录进行操作。
1.2 用户组(Group)

用户组是为了方便管理一组用户而存在的。每个组都有一个唯一的 组 ID(GID),可以包含多个用户。同一组内的用户可以共享对文件和资源的访问权限。Linux 的权限系统依赖于用户和组来管理文件、目录等资源的访问权限。

  • 初始组:用户在创建时会默认加入一个初始组,通常与用户名相同。
  • 附加组:一个用户可以属于多个附加组,附加组用于分配其他额外权限。
1.3 用户与组的权限

Linux 文件系统的权限分为三类:用户权限组权限其他用户权限。文件和目录的访问权限可以分别为拥有者、所属组和其他用户进行定义。权限控制分为三种操作:

  • 读(r):可以查看文件内容或列出目录。
  • 写(w):可以修改文件内容或在目录中创建、删除文件。
  • 执行(x):可以执行文件或进入目录。

二、组管理的常用命令

2.1 查看组信息

在 Linux 中,用户和组的信息存储在 /etc/passwd/etc/group 文件中。每次创建、删除或修改用户组时,都会更新这些文件。要查看系统中的所有组信息,可以通过 cat 命令查看 /etc/group 文件。

$ cat /etc/group

该命令输出的每一行代表一个组,其格式如下:

group_name:x:GID:user1,user2,...
  • group_name:组名。
  • x:密码字段,通常不使用。
  • GID:组 ID。
  • user1,user2,...:属于该组的用户列表。
2.2 创建新组(groupadd

使用 groupadd 命令可以创建一个新的用户组。groupadd 命令允许指定组名和组 ID(可选)。

$ sudo groupadd mygroup

可以通过 -g 选项指定组 ID(GID):

$ sudo groupadd -g 1001 mygroup

如果不指定 GID,系统会自动分配一个可用的 GID。

2.3 删除组(groupdel

groupdel 命令用于删除指定的用户组。

$ sudo groupdel mygroup

注意,删除一个组并不会删除组中的用户。用户仍然存在,只是该组不再存在,用户将失去该组的附加权限。

2.4 修改组信息(groupmod

groupmod 命令用于修改现有组的信息。可以修改组名或组 ID。

  • 修改组名:
$ sudo groupmod -n newgroupname oldgroupname
  • 修改组 ID:
$ sudo groupmod -g 2000 mygroup

三、用户组的管理

3.1 将用户添加到组(usermod

在 Linux 中,用户可以属于多个组。使用 usermod 命令可以将用户添加到一个或多个组。usermod 命令可以用 -g 选项来修改用户的初始组,用 -G 选项来设置用户的附加组。

$ sudo usermod -g mygroup username  # 修改用户的初始组
$ sudo usermod -G group1,group2 username  # 将用户添加到附加组

如果想要用户保持原有的附加组并添加新组,需要使用 -aG 选项:

$ sudo usermod -aG mygroup username

-a 表示追加附加组,-G 指定附加组。没有 -a 的情况下,原有的附加组将被替换。

3.2 从组中删除用户

要从组中删除用户,可以直接修改 /etc/group 文件,或者使用 gpasswd 命令。

  • 手动编辑 /etc/group 文件:找到目标组,将用户从组的用户列表中删除。
$ sudo gpasswd -d username groupname
3.3 切换用户组(newgrp

用户在系统中可以同时属于多个组。用户在某个时刻的默认权限是基于初始组的,但可以通过 newgrp 命令来切换到另一个组,从而使用该组的权限。

$ newgrp mygroup

执行该命令后,用户切换到 mygroup 组,后续创建的文件将以该组为所属组。

四、权限设置

在组管理中,权限的设置至关重要。Linux 文件系统中的权限主要通过 chmodchownchgrp 命令来管理。

4.1 修改文件权限(chmod

chmod 命令用于修改文件或目录的权限。权限由三组 rwx 值表示,分别对应文件的拥有者、所属组和其他人。

  • 语法:
$ chmod permissions file
  • 示例:
$ chmod 755 myfile  # 设置文件权限为 -rwxr-xr-x

权限模式中的数字代表权限的组合:

  • 7 = rwx(读、写、执行)
  • 6 = rw-(读、写)
  • 5 = r-x(读、执行)
  • 4 = r--(只读)
4.2 修改文件所属用户和组(chownchgrp

chown 命令用于修改文件的拥有者和所属组。chgrp 命令则用于仅修改文件的所属组。

  • 修改文件的拥有者和组:
$ sudo chown newowner:newgroup file
  • 只修改文件的所属组:
$ sudo chgrp newgroup file
4.3 权限示例

假设系统中有两个用户 user1user2,他们分别属于组 group1group2user1 创建了一个文件 file1.txt,默认文件权限是 rw-r--r--(即用户拥有读写权限,组和其他用户只有读取权限)。如果 user1 希望 group1 中的所有成员也能写该文件,可以通过以下命令修改权限:

$ chmod 664 file1.txt  # 修改为 rw-rw-r--

这样,组 group1 的用户现在可以读写该文件。

五、实际应用场景

5.1 开发团队权限管理

假设一个开发团队中有多个项目,每个项目有不同的开发成员。为了管理不同项目的权限,可以为每个项目创建一个用户组,并将对应的成员添加到该组中:

  1. 创建项目组:
$ sudo groupadd project1_team
$ sudo groupadd project2_team
  1. 将用户添加到相应的组:
$ sudo usermod -aG project1_team developer1
$ sudo usermod -aG project2_team developer2
  1. 设置项目文件夹的权限,使得只有项目组成员可以访问和修改:
$ sudo chown -R :project1_team /path/to/project1
$ sudo chmod -R 770 /path/to/project1
5.2 文件共享权限设置

在文件服务器环境中,多个用户需要共享文件资源。可以为这些用户创建一个共享组,并设置共享目录的权限,使得组内用户能够访问和修改文件。

  1. 创建共享组并添加用户:
$ sudo groupadd sharegroup
$ sudo usermod -aG sharegroup user1
$ sudo usermod -aG sharegroup user2
  1. 设置共享目录的权限:
$ sudo chown -R :sharegroup /path/to/shareddir
$ sudo chmod -R 770 /path/to/shareddir  # 组用户可以读写执行,其他用户无权限

六、总结

Linux 系统中的用户与组管理是系统安全和资源管理的重要组成部分。通过合理地创建和管理用户组,可以有效地控制不同用户对文件和目录的访问权限。组管理简化了权限的分配与管理,特别是在需要多人协作、共享资源的场景下,组权限的使用尤为重要。

相关文章:

linux-用户与权限管理-组管理

在 Linux 系统中,用户、组与权限管理是保障系统安全的重要机制。用户和组的管理不仅涉及对系统资源的访问控制,还用于权限的分配和共享。组管理在 Linux 中尤其重要,它能够帮助管理员组织用户并为不同的组分配特定权限,从而控制用…...

Day23_0.1基础学习MATLAB学习小技巧总结(23)——句柄图形

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。 参考书目:《MATLAB基础教程 (第三版) (薛山)》 之前的章节都是…...

同步io和异步io

同步 I/O 和异步 I/O 是处理输入输出操作的两种不同策略,它们各有优缺点,适用于不同的场景。下面是它们的主要区别: 同步 I/O 定义:在同步 I/O 模型中,发起 I/O 操作的线程会被阻塞,直到操作完成。换句话说…...

AI基础 L19 Quantifying Uncertainty and Reasoning with Probabilities I 量化不确定性和概率推理

Acting Under Uncertainty 1 Reasoning Under Uncertainty • Real world problems contain uncertainties due to: — partial observability, — nondeterminism, or — adversaries. • Example of dental diagnosis using propositional logic T oothache ⇒ C av ity • H…...

C++ 关于时间的轮子

时间字符串转chrono::system_clock std::chrono::system_clock::time_point parse_date(const std::string& date_str) {std::tm tm {};std::istringstream ss(date_str);ss >> std::get_time(&tm, "%Y-%m-%d"); // 假设日期字符串格式为YYYY-MM-DDr…...

阿里达摩院:FunASR - onnxruntime 部署

阿里达摩院:FunASR - onnxruntime 部署 git clone https://github.com/alibaba/FunASR.git 切换到 onnxruntime cd FunASR/runtime/onnxruntime1下载 onnxruntime wget https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/dep_libs/onnxruntime-linux-x64-1.14.0.t…...

SpringMvc注解

SpringMvc注解 1 SpringMcv基础环境搭建 注&#xff1a;如果已经有SpringMvc项目直接跳过这个就可以了 1 新建项目 2.修改文件为packaging 为war包 <packaging>war</packaging> <?xml version"1.0" encoding"UTF-8"?> <pr…...

队列的基本概念及顺序实现

队列的基本概念 队列的定义 ​ 队列(Queue)简称队&#xff0c;也是一宗操作受限的线性表&#xff0c;只允许在表的一段进行插入&#xff0c;而在表的另一端进行删除。向队列中插入元素成为入队或进队&#xff1b;删除元素成为出队或离队。 ​ 特性&#xff1a;先进先出 (Fir…...

Leetcode 最长连续序列

算法流程&#xff1a; 哈希集合去重&#xff1a; 通过将数组中的所有元素放入 unordered_set&#xff0c;自动去除重复元素。集合的查找操作是 O(1)&#xff0c;这为后续的快速查找提供了保证。 遍历数组&#xff1a; 遍历数组中的每一个元素。对于每个元素&#xff0c;首先检…...

linux网络编程——UDP编程

写在前边 本文是B站up主韦东山的4_8-3.UDP编程示例_哔哩哔哩_bilibili视频的笔记&#xff0c;其中有些部分博主也没有理解&#xff0c;希望各位辩证的看。 UDP协议简介 UDP 是一个简单的面向数据报的运输层协议&#xff0c;在网络中用于处理数据包&#xff0c;是一种无连接的…...

第四部分:1---文件内核对象,文件描述符,输出重定向

目录 struct file内核对象&#xff1a; 如何读写文件&#xff1f; 文件描述符在文件描述符表中的分配规则&#xff1a; 输出重定向初步解析&#xff1a; dup2实现复制文件描述符&#xff1a; struct file内核对象&#xff1a; struct file 是在内核空间中创建的用于描述文…...

如何在开发与生产环境中应用 Flask 进行数据库管理:以 SQLAlchemy 和 Flask-Migrate 为例

在使用 Flask 进行开发时&#xff0c;数据库管理是一个至关重要的环节。借助 SQLAlchemy 作为 ORM&#xff08;对象关系映射&#xff09;工具和 Flask-Migrate 进行数据库迁移&#xff0c;开发者可以高效地进行数据库管理&#xff0c;并在不同的环境&#xff08;如开发环境和生…...

【Java零基础】Java核心知识点之:Map

HashMap(数组链表红黑树) HashMap 根据键的 hashCode 值存储数据&#xff0c;大多数情况下可以直接定位到它的值&#xff0c;因而具有很快的访问速度&#xff0c;但遍历顺序却是不确定的。 HashMap 最多只允许一条记录的键为 null&#xff0c;允许多条记录的值为 null。HashMa…...

9.12日常记录

1.extern关键字 1&#xff09;诞生动机:在一个C语言项目中&#xff0c;需要再多个文件中使用同一全局变量或是函数&#xff0c;那么就需要在这些文件中再声明一遍 2&#xff09;用于声明在其他地方定义的一个变量或是函数&#xff0c;在当前位置只是声明&#xff0c;告诉编译器…...

光纤的两种模式

光纤主要分为两种模式&#xff1a;‌‌单模光纤&#xff08;Single-Mode Fiber, SMF&#xff09;‌和‌‌多模光纤&#xff08;Multi-Mode Fiber, MMF&#xff09;‌。这两种光纤在传输特性、应用场景以及传输距离上存在显著差异。‌12 单模光纤 ‌定义‌&#xff1a;单模光纤…...

SpringMVC的初理解

1. SpringMVC是对表述层&#xff08;Controller&#xff09;解决方案 主要是 1.简化前端参数接收( 形参列表 ) 2.简化后端数据响应(返回值) 1.数据的接受 1.路径的匹配 使用RequestMapping(可以在类上或在方法上)&#xff0c;支持模糊查询&#xff0c;在内部有method附带…...

Python 基本库用法:数学建模

文章目录 前言数据预处理——sklearn.preprocessing数据标准化数据归一化另一种数据预处理数据二值化异常值处理 numpy 相关用法跳过 nan 值的方法——nansum和nanmean展开多维数组&#xff08;变成类似list列表的形状&#xff09;重复一个数组——np.tile 分组聚集——pandas.…...

Android Greendao的数据库复制到设备指定位置

方法如下&#xff1a; private void export() {// 确保您已经请求并获得了WRITE_EXTERNAL_STORAGE权限// 获取要储存的设备路径String picturesDirPath Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath();// 在公共目录下创建…...

Ajax 揭秘:异步 Web 交互的艺术

Ajax 揭秘&#xff1a;异步 Web 交互的艺术 一 . Ajax 的概述1.1 什么是 Ajax ?1.2 同步和异步的区别1.3 Ajax 的应用场景1.3.1 注册表单的用户名异步校验1.3.2 内容自动补全 二 . Ajax 的交互模型和传统交互模型的区别三 . Ajax 异步请求 axios3.1 axios 介绍3.1.1 使用步骤3…...

TitleBar:打造高效Android标题栏的新选择

在Android应用开发中&#xff0c;标题栏是用户界面的重要组成部分。一个好的标题栏不仅能够提升应用的专业感&#xff0c;还能增强用户体验。然而&#xff0c;传统的标题栏实现方式往往存在代码冗余、样式不统一、性能开销大等问题。今天&#xff0c;我们将介绍一个名为TitleBa…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...