当前位置: 首页 > 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…...

嵌入式AI边缘计算原型:STM32与云端PyTorch模型协同工作流设计

嵌入式AI边缘计算原型&#xff1a;STM32与云端PyTorch模型协同工作流设计 1. 场景需求与痛点分析 在智能家居、工业监测等物联网场景中&#xff0c;我们常常遇到这样的矛盾&#xff1a;边缘设备需要实时响应&#xff0c;但计算能力有限&#xff1b;云端算力强大&#xff0c;但…...

s2-pro部署实操:CSDN平台GPU资源监控与s2-pro服务性能关联分析

s2-pro部署实操&#xff1a;CSDN平台GPU资源监控与s2-pro服务性能关联分析 1. 专业语音合成工具s2-pro简介 s2-pro是Fish Audio开源的专业级语音合成模型镜像&#xff0c;它能够将文本转换为自然流畅的语音&#xff0c;并支持通过参考音频来复用特定音色。这个工具特别适合需…...

SDMatte在内容制作中的应用:短视频封面透明底素材、PPT动态图源快速生成

SDMatte在内容制作中的应用&#xff1a;短视频封面透明底素材、PPT动态图源快速生成 1. 为什么你需要专业的AI抠图工具 在内容创作领域&#xff0c;时间就是金钱。无论是制作短视频封面&#xff0c;还是设计PPT演示文稿&#xff0c;抠图都是最耗时的环节之一。传统Photoshop抠…...

MFCMouseEffect:把桌面输入反馈这件事,做成一个真正可扩展的引擎

MFCMouseEffect&#xff1a;把桌面输入反馈这件事&#xff0c;做成一个真正可扩展的引擎 很多录屏、教程、演示和桌面工具&#xff0c;功能本身已经足够好&#xff0c;但一到“用户看你怎么操作”这一步&#xff0c;体验就会突然掉下来。 为什么&#xff1f; 因为点击不够明…...

5个技巧让Markdown Viewer成为你的浏览器文档中心

5个技巧让Markdown Viewer成为你的浏览器文档中心 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 还在为浏览器无法直接预览Markdown文档而烦恼吗&#xff1f;Markdown Viewer浏览…...

数智驱动 人才筑基——拔尖创新人才与卓越工程师培养论坛举行

3月22日&#xff0c;第二届高等院校新工科人才培养暨产教融合发展大会在北京举行。大会以“科技创新 智造未来”为主题&#xff0c;来自全国各地的本科院校、职业院校、行业企业以及媒体等1000余位嘉宾参会。22日下午&#xff0c;数智驱动 人才筑基——拔尖创新人才与卓越工程师…...

从零部署RK3588 MPP:硬编解码环境搭建与核心工具解析

1. RK3588 MPP硬编解码环境搭建全流程 第一次在ArmSoM-W3开发板上折腾RK3588的MPP硬编解码环境时&#xff0c;我踩了不少坑。这里把完整搭建过程拆解成可复现的步骤&#xff0c;用最直白的语言分享给各位开发者朋友。 MPP&#xff08;Media Process Platform&#xff09;是瑞芯…...

FireRedASR Pro模型架构浅析:从卷积神经网络到端到端设计

FireRedASR Pro模型架构浅析&#xff1a;从卷积神经网络到端到端设计 最近在语音识别圈子里&#xff0c;FireRedASR Pro这个名字被提到的次数越来越多了。不少朋友都在问&#xff0c;这个模型到底有什么特别之处&#xff0c;为什么大家都在讨论它。其实&#xff0c;它的核心魅…...

SEO_全面介绍SEO从入门到精通的关键知识点

<h2>什么是SEO&#xff1f;</h2> <p>SEO&#xff08;Search Engine Optimization&#xff0c;搜索引擎优化&#xff09;是一套通过优化网站内容和结构&#xff0c;以提高其在搜索引擎结果页面&#xff08;SERP&#xff09;中的自然排名的技术和策略。SEO不仅…...

scanf_s使用避坑指南:如何正确应对C6064警告(含C6054连带问题处理)

scanf_s安全使用全指南&#xff1a;彻底解决C6064与C6054警告 在Windows平台进行C/C开发时&#xff0c;使用scanf_s函数处理用户输入是常见场景。但许多开发者都会遇到两个令人困惑的警告——C6064和C6054。这些警告看似简单&#xff0c;实则暗藏玄机。本文将带你深入理解这两个…...