【Linux探索学习】第四弹——Linux权限管理详解:理解用户、组和权限之间的关系

前言:

在前面我们已经学习了Linux的基础指令,相信大家对Linux已经有了一定的认识,今天我们来学习Linux权限的相关知识点,Linux权限是Linux初学者必须要掌握的内容

目录

一、Linux下用户类型

二、权限基本概念

三、权限的表示

四、文件访问权限的相关设置方法

1. chmod指令

2. chowm指令

3. chgrp指令

4. umask指令

五、目录权限

粘滞位

六、特殊权限

七、总结


一、Linux下用户类型

在正式讲解Linux权限管理前,我们先来了解这样一个知识:Linux下的用户类型

在Linux下用户其实有两种类型:超级用户和普通用户——超级用户就是我们配置好环境后默认的用户类型,它也叫root用户,而普通用户则是我们在超级用户下自己创建的,因为为了平时学习和工作方便,我们可能需要多个用户身份,就好比VS下多个可执行程序文件一般,而普通用户跟超级用户比是有权限约束问题的,也就是说有些文件之类的可能在普通用户下无权访问,而超级用户则可以随意访问

我们可以用这样一个指令来查看我们当前的身份:whoami

超级用户:

普通用户:

这里的temp是普通用户的用户名,是自己创建的,而且一个超级用户可以创建多个普通用户,至于如何创建普通用户,我们会在下一篇进行详细讲解

二、权限基本概念

在 Linux 中,文件和目录的权限由以下三种操作控制:

  1. 读取(Read,r):查看文件内容或列出目录内容。
  2. 写入(Write,w):修改文件内容或在目录中添加、删除文件。
  3. 执行(Execute,x):执行文件(如脚本或程序)或进入目录。

这些权限可以被分配给三种类型的用户:

  • 文件所有者(User):文件的创建者或拥有者。
  • 用户组(Group):与文件所有者同属一个组的用户。
  • 其他用户(Others):不属于文件所有者和用户组的所有其他用户。

三、权限的表示

在这里我们先来解决一个问题:就是我们上面一直所说的权限到底是什么?

其实这里的权限说的是我们所创建的文件不同用户的执行能力

当我们查看我们所创建的文件的详细信息时:

我们可以看到每个文件的信息都是由相似的一排组成,那么这些信息分别表示什么意思呢?

如下图所示:

在 Linux 中,文件权限通常以字符串的形式表示,就比如上图中的:

这里,字符串的第一个字符表示文件类型:

  • - 表示普通文件
  • d 表示目录
  • l 表示符号链接
  • p:管道文件
  • c:字符设备文件(例如屏幕等串口设备)
  • s:套接口文件
  • b :块设备文件(例如硬盘、光驱等)

接下来的九个字符分为三组,每组三个字符,分别表示所有者、用户组和其他用户的权限:

  • 第一组(rwx):文件所有者的权限
  • 第二组(r-x):用户组的权限
  • 第三组(r--):其他用户的权限

每个字符的意义如下:

  • r:可读
  • w:可写
  • x:可执行
  • -:无权限

因为权限具有二态性,所以我们可以用二进制0/1来表示(可读可写可执行为1,无权限为0),比如一个文件的所有者对应的权限为:rwx,它的二进制表示为111,八进制表示为7

四、文件访问权限的相关设置方法

1. chmod指令

功能:设置文件的访问权限

注意事项:只有文件的拥有者和root用户才有权修改文章权限

chmod命令权限值的格式有两种:

① 用户表示符+/-=权限字符

+ :  向权限范围增加权限代号所表示的权限 
- :  向权限范围取消权限代号所表示的权限 
= :  向权限范围赋予权限代号所表示的权限 
用户符号 :  
u :拥有者 
g :拥有者同组用 
o :其它用户 
a :所有用户
实例:
# chmod u+w /home/abc.txt
# chmod o-x /home/abc.txt
如下:
在这个test.c文件中,所属组的权限为rw-,没有执行权限,且文件的拥有者为zwt,所以我们就可以用zwt身份或root身份下进行操作,赋予所属组执行权限
操作后我们就可以看到所属组也有了x执行权限
② 三位8进制数字

除了上面用字母表示外,我们还可以用八进制数字的方法来表示:

实例:

# chmod 664 /home/abc.txt
# chmod 640 /home/abc.txt

2. chowm指令

功能:修改文件的拥有者

格式:chown [参数] 用户名 文件名

注意事项:只有root用户才有权修改文件的拥有者

选项:-R 递归修改文件的拥有者

实例:

# chown user1 f1
# chown -R user1 filegroup1

3. chgrp指令

功能:修改文件的所属组

格式:chown [参数] 用户组名 文件名

注意事项:只有root用户才有权修改文件的所属组

选项:-R 递归修改文件的所属组

实例:

#  chgrp users /abc/f2

4. umask指令

功能:查看或修改文件掩码

在讲解这个指令前,首先我们要知道掩码是什么

当我们在Linux下创建文件时:

如图,我们创建了一个普通文件和一个目录文件

当我们查看它们两个权限时,我们可以看到目录文件的权限为775(八进制数组表示),普通文件的权限为664

但实际上默认权限与我们所看到的是有差别的,目录文件的默认权限为777,普通文件的默认权限为666,之所以我们看到的是上面的,就是因为掩码的存在

我们可以通过umask查看掩码:

我们可以看到掩码为0002,加到775中和664中恰好就是默认权限值,所以也就是说我们实际上得到的文件与默认权限相比,缺少了部分权限,而这一部分权限就是umask掩码中的权限

最终的权限 = 默认权限 & (~umask)

所以我们可以通过修改umask值来改变我们所创建的目录或文件的起始默认权限,从而达到我们想要的结果

五、目录权限

目录的权限与上面讲的文件的权限的内容是有不同的

目录文件的三种权限的结果如下:

可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.

可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.

可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.

也就是说,当一个用户对一个目录文件有写权限时,就可以删除里面的文件,即使这个用户可能对里面的文件并没有任何权限

但是这样就会导致一个问题,当我们以后在工作中,如果我们使用了网上的一个开源的目录文件,我们都是这个目录文件所属组的一员,且具有写权限,那么是不是意味着如果我们在这个目录文件下创建一个文件,别人可以随意的删除?

为了解决这个问题,我们引入了粘滞位的概念

粘滞位

  • 当设置在目录上的粘滞位时,只有文件的所有者可以删除或重命名该目录中的文件。标志位用 t 显示在其他用户权限的位置。

实例:

chmod +t dir       # 设置粘滞位

注意事项:

1、目录的可执行权限是表示你可否在目录下执行命令。
2、如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
3、而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。

六、特殊权限

Linux中除了基本的权限外,还给了三种特殊的权限,上面的粘滞位就是其中一种

如下:

  1. Set UID(SUID)

    • 当设置了 SUID 权限的可执行文件被运行时,程序以文件所有者的权限运行。标志位用 s 显示在所有者权限的位置。
  2. Set GID(SGID)

    • 与 SUID 类似,但程序以用户组的权限运行。标志位用 s 显示在用户组权限的位置。
  3. Sticky Bit

    • 当设置在目录上的 Sticky Bit 时,只有文件的所有者可以删除或重命名该目录中的文件。标志位用 t 显示在其他用户权限的位置。

设置这些特殊权限时,可以使用 chmod 命令:

chmod u+s file.txt # 设置 SUID

chmod g+s dir # 设置 SGID

chmod +t dir # 设置 Sticky Bit

七、总结

Linux 权限管理是确保系统安全的关键组成部分。理解用户、组和权限之间的关系,以及如何查看和修改权限,对于管理和保护 Linux 系统至关重要。通过合理地设置权限,可以有效地防止未授权访问和数据泄露。

希望本文能帮助您更好地理解 Linux 权限机制,并在实际学习和工作中应用这些知识。

感谢各位大佬观看,创作不易,还请各位大佬点赞支持!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/889718.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WebGoat JAVA反序列化漏洞源码分析

目录 InsecureDeserializationTask.java 代码分析 反序列化漏洞知识补充 VulnerableTaskHolder类分析 poc 编写 WebGoat 靶场地址:GitHub - WebGoat/WebGoat: WebGoat is a deliberately insecure application 这里就不介绍怎么搭建了,可以参考其他…

数据结构修炼——树?二叉树?堆?从入门到代码实现,第一弹!!!

目录 一、树的概念与结构1.1 树的概念1.2 树的相关概念1.3 树的表示及实际应用 二、二叉树概念及结构2.1 二叉树的概念2.2 特殊的二叉树2.2.1 满二叉树2.2.2 完全二叉树 2.3 二叉树的存储结构 三、二叉树的顺序结构与实现3.1 堆的概念及结构3.2 堆的实现3.2.1 堆的创建与销毁3.…

安卓13禁止用户打开开发者选项 android13禁止用户打开开发者选项

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 设置 =》关于平板电脑 =》版本号,一般的话,在这里连续点击就可以打开我们的开发者选项了。但是有些系统要进行保密,因此要禁止用户进入。 2.问题分析 这里我们是通过点…

Android Framework AMS(02)AMS启动及相关初始化5-8

该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:本章节主要涉及systemserver启动AMS及初始化AMS相关操作。同时由于该部分内容过多,因此拆成2个章节,本章节是第二章节&…

【技术】Jaskson的序列化与反序列化

文章目录 概念解释1.Jasksona.JSONJSON 的基本特点JSON 的基本结构JSON 示例 b.ObjectMapper类 2.序列化与反序列化a.序列化对象序列化集合序列化ListSetMap b.反序列化反序列化单个对象反序列化集合对象 概念解释 1.Jaskson Jackson 是一个用于处理 JSON 数据的 Java 库,所以…

vue-插槽作用域实用场景

vue-插槽作用域实用场景 1.插槽1.1 自定义列表渲染1.2 数据表格组件1.3 树形组件1.4 表单验证组件1.5 无限滚动组件 1.插槽 插槽感觉知道有这个东西,但是挺少用过的,每次看到基本都会再去看一遍用法和概念。但是在项目里,自己还是没有用到过…

基于SpringBoot+Vue的疫情物资管理系统(带1w+文档)

基于SpringBootVue的疫情物资管理系统(带1w文档) 基于SpringBootVue的疫情物资管理系统(带1w文档) 本课题研究和开发疫情物资管理系统管理系统,让安装在计算机上的该系统变成管理人员的小帮手,提高疫情物资管理系统信息处理速度,规范疫情物资…

C++入门基础知识107—【关于C++continue 语句】

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C continue 语句的相关内容!…

关于Java部署项目,文件上传路径问题 、Windows是\ linux是/

Windows是\ linux是/ ,踩坑。报错如下:

SpringBootWeb快速入门!详解如何创建一个简单的SpringBoot项目?

在现代Web开发中,SpringBoot以其简化的配置和快速的开发效率而受到广大开发者的青睐。本篇文章将带领你从零开始,搭建一个基于SpringBoot的简单Web应用~ 一、前提准备 想要创建一个SpringBoot项目,需要做如下准备: idea集成开发…

信息安全工程师(28)机房安全分析与防护

前言 机房安全分析与防护是一个复杂而细致的过程,涉及到物理安全、环境控制、电力供应、数据安全、设备管理、人员管理以及紧急预案等多个方面。 一、机房安全分析 1. 物理安全威胁 非法入侵:未经授权的人员可能通过门窗、通风口等进入机房,…

《大规模语言模型从理论到实践》第一轮学习笔记

第一章 绪论 本章主要介绍大规模语言模型基本概念、发展历程和构建流程。 大规模语言模型(Large Language Models,LLM),也称大语言模型 或大型语言模型。 1.1 大规模语言模型基本概念 1.语言模型(Language Model&a…

LeetCode 3310. 移除可疑的方法

LeetCode 3310. 移除可疑的方法 你正在维护一个项目,该项目有 n 个方法,编号从 0 到 n - 1。 给你两个整数 n 和 k,以及一个二维整数数组 invocations,其中 invocations[i] [ai, bi] 表示方法 ai 调用了方法 bi。 已知如果方法 k…

Leetcode 37. 解数独

1.题目基本信息 1.1.题目描述 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 33 宫内只能出现一次。(请参考…

文件IO及目录操作

一、文件IO 1.1 close函数&#xff08;关闭文件&#xff09; #include <unistd.h>---所需头文件 int close(int fd); 功能&#xff1a;关闭文件 参数&#xff1a;fd&#xff1a;文件描述符 返回值&#xff1a;成功返回0&#xff0c;失败返回-1&#xff0c;置位错误码 …

主机加固的关键要素:服务器防病毒

在数字化浪潮中&#xff0c;网络安全已成为企业不可忽视的一环。尤其是安全运维人员&#xff0c;他们肩负着保护企业数据不受侵害的重任。MCK主机加固解决方案&#xff0c;正是为了应对这一挑战而生。 网络安全的严峻现实 不久前&#xff0c;一家知名企业因勒索病毒攻击而被迫…

二分查找一>0~n-1中缺失的数字(点名)

1.题目&#xff1a; 2.解析&#xff1a;方法一&#xff1a;用哈希表&#xff1a;记录存在的数字&#xff0c;找到哈希表为空的数字输出 Set<Integer> set new HashSet<>();for(int x : records) set.add(x);for(int i 0; i < set.size(); i){if(!set.contain…

Linux系列-Linux的常见指令

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” Linux基本指令 ls指令 语法&#xff1a;ls 【选项】【目录或文件】 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件&#xff0c;对于文件&#xf…

【GO基础学习】环境安装到基础语法(1)

文章目录 环境安装GoLand 安装GO基础GO特点类型和函数Init函数和main函数GO命令下划线变量和常量数组切片Slice 引用 环境安装 下载地址&#xff1a;https://www.golangroadmap.com/ 安装目录文件说明&#xff1a; api&#xff1a;每个版本的 api 变更差异。 bin&#xff1…

基于SpringBoot+Vue的船舶监造系统(带1w+文档)

基于SpringBootVue的船舶监造系统(带1w文档) 基于SpringBootVue的船舶监造系统(带1w文档) 大概在20世纪90年代&#xff0c;我国才开始研发船舶监造系统&#xff0c;与一些发达国家相比&#xff0c;系统研发起步比较晚。当时的计算机技术刚开始发展起来&#xff0c;国家经济力量…