Linux——文件权限属性和权限管理

文件权限属性和权限管理

本章思维导图:

在这里插入图片描述
注:本章思维导图对应的Xmid文件和.png文件都以传到“资源”

文章目录

  • 文件权限属性和权限管理
  • 1. sudo提权和sudoers文件
    • 1.1 sudo提权和成为root的区别
  • 2. 权限
    • 2.1 Linux群体
      • 2.1.1 为什么要有所属组
      • 2.1.2 修改文件的所属组、拥有者
        • 2.1.2.1更改拥有者 chown
        • 2.1.2.2 更改所属组 chgrp
    • 2.2 文件权限属性
      • 2.2.1 认识文件权限属性
      • 2.2.2 修改文件权限属性 chmod
      • 2.2.3 目录的权限
        • 2.2.3.1 目录/tmp和粘滞位
      • 2.2.4 权限掩码umask
      • 2.2.5 文件类型

1. sudo提权和sudoers文件

在上一篇Linux新建用户、删除用户以及用户之间的切换说到,新建用户adduser、删除用户userdel需要在root账户下进行操作,或者说需要root的权限。我们也说到,如果普通用户想要以root的权限进行操作,那就需要提权命令sudo

下面我们就来讲讲sudo提权命令

命令:

sudo 命令

功能:

sudo 允许允许的用户以超级用户身份执行命令。总的来说,就是允许普通用户以root的权限执行各种操作

现在,有小伙伴就有疑惑了:

既然每个普通用户都可以进行sudo提权操作,那每个人都可以有root的权限,那还需要root这个超级管理员干嘛呢?

我们可以现在就来试一下:

在这里插入图片描述

可以看到,尽管通用户Test_1使用了提权命令,但是并没有得到想要的结果,这是为什么呢?

我们发现,系统提示我们用户Test_1并不处于sudoers文件
那么sudoers文件又是什么呢?

  • sudoers文件是属于root账户的一个Linux配置文件

    我们可以用命令ll打开看一下:

    在这里插入图片描述

    可以看到里面只有root账户

  • 可以通俗地将sudoers文件比作是一个白名单只有位于白名单里面的账户才可以使用sudo命令提权,以root的权限执行操作

  • 而要将用户写入sudoers文件,需要root账户执行操作

到了现在,应该就可以解决之前的那个疑惑了——不是所有的普通用户可以使用sudo提权,只有得到root账户的信任,将这个用户添加到sudoers文件中,这个普通用户才可以进行sudo提权。因此我们也就不需要担心普通用户会在系统中捣乱了。

1.1 sudo提权和成为root的区别

可不要天真的以为sudo提权和成为,root用root账户操作都是以root的身份执行命令就没有什么区别。

这二者其实有着本质的区别

  • 给你root密码,让你成为root——直接让你成员超级管理员
  • 将你添加到sudoers—— 相信你,给你root权限,但是这个root权限可以被回收

2. 权限

然我们先举几个生活中的例子来对权限有一个更加清楚的认识:

  • 在腾讯视频、爱奇艺等软件看VIP电影,那我们就需要VIP的权限,需成为VIP会员,否则我们就只是普通用户只能看免费电影。
  • 尽管我们有爱奇艺视频的VIP会员,但是无论如何,我们都不可能在爱奇艺视频里面刷C++的编程题

因此,我们可以得出以下两个结论:

  1. 权限一定是用来限制人的
  2. 对应的操作对象一定要有对应的满足人的需求的属性——就像你不能在腾讯视频里面刷C语言,因为腾讯视频并没有刷题这一属性。

而将这两个结论和Linux系统的文件权限联系在一起,同样也可以推出两个结论:

  1. Linux群体(也就是“被限制的人”)更多的是一种身份,在Linux中有:拥有者u、所属组g、other这三种身份o,具体的人一定会在未来承担某个文件的某个身份。
  2. Linux的操作对象也就是Linux系统中的文件,其属性一般叫做文件权限属性,有三种:可读r,可写w,可执行x

下面,我们就对Linux群体文件权限属性展开具体的讨论:

2.1 Linux群体

前面说过,Linux群体更多的是一种身份——拥有者u、所属组g、othero这三种身份

  • 拥有者user一般就是该文件的创建者
  • 所属组group——可以在Linux系统中创建一个组群,并将特定的用户拉入,这样这些组里面的用户就构成了一个所属组。他们享有这个所属组被赋予的权限
  • other——不属于拥有者和所属组的用户统称为other

2.1.1 为什么要有所属组

有些小伙伴又会有疑惑了:

拥有者和other就可以确定一个文件的所属关系了,为什么还要一个所属组group呢?

我们可以来举一个生活中的例子:

两个开发组A、B在竞争同一个项目,一天项目的领导想要看开发组A成员张三写的代码,但是代码是张三所写,张三是这个文件的拥有者,而领导是other,如果想要让领导(other)看到张三所拥有的文件,那么张三就需要将这个文件的权限开放给other,但这就导致了一个问题——同为other的项目组B也可以看到项目组A的代码,这显然不是我们想要的,所以,就需要Linux有所属组这一个概念,张三可以通过过创建一个所属组,将领导拉到组里,同时将拥有者的权限开放给所属组,这样就可以了

所以,Linux所属组的存在,方便了Linux系统文件权限的管理,是很重要的。

2.1.2 修改文件的所属组、拥有者

注意:

只能在root的权限下更改一个文件的拥有者、所属组、other,无论你是不是这个文件的拥有者。

2.1.2.1更改拥有者 chown

命令:

chown new_username filename

  • new_username就是新的拥有者的用户名,filename就是被更改的文件名

例如:

在这里插入图片描述

2.1.2.2 更改所属组 chgrp

命令:

ch chgrp new_groupname filename

  • new_groupname就是新的拥有者的用户名,filename就是被更改的文件名

例如:

在这里插入图片描述


更改拥有者、所属组的同时也就在更改other,因此并没有更改other的命令

2.2 文件权限属性

例如,我们用命令ll来查看一个文件的具体属性:

在这里插入图片描述

现在,就以文件code为例,讲一下ll所展示的这一串信息都表示了什么:

在这里插入图片描述

  • 文件的拥有者、所属组前面已经介绍完毕,这里便不再赘述
  • 接下来,我们来深入探讨一下文件权限属性和文件类型

2.2.1 认识文件权限属性

例如上面的 code1文件,代表这个文件的权限属性的就是下面的九个字符:

在这里插入图片描述

那么具体的,这九个字符又都表示什么含义呢?

Linux规定:

  • 将九个字符分成三组,每组三个字符。例如上面的就是rw-r--r--这三组
  • 每组字符的每个位置代表着固定的含义:第一个位置表示可写r,第二个位置表示可读w,第三个位置表示可执行x
  • 第一组表示拥有者的权限,第二组表示所属组权限,第三组表示other权限

例如,对于上面的权限属性,我们可以做出如下解释:
在这里插入图片描述

Linux的文件权限值的表示方法:

字符表示法:

Linux表示意义Linux表示意义
- - -无任何权限r - -只读
- - x仅可执行r - x可读可执行
- w -只写r w -可读可写
- w x可写可执行r w x可读可写可执行

八进制表示法:

权限符号二进制八进制
- - -0 0 00
- - x0 0 11
- w -0 1 02
- w x0 1 13
r - -1 0 04
r - x1 0 15
r w -1 1 06
r w x1 1 17

那么可读、可写、可执行都表示什么呢?我们一起来看看:

在这里插入图片描述

可以得出结论:

  • 可读r:即可以打开文件,查看文件内容,执行catnano等操作

  • 可写w:即可向文件写入内容,执行echonano等操作

  • 可执行x:对一个可执行文件进行执行操作

    • 注:可以执行一个文件的条件为
    1. 拥有该文件的可执行权限x
    2. 该文件必须要有可执行的功能(必须是一个可执行的文件)——这也就是我们前面所说的“对应的操作对象一定要有对应的满足人的需求的属性

再来看一个例子:

在这里插入图片描述

要解决这个问题,就需要知道Linux的一个特性:

  • 要判断一个用户的权限,首先要判断这个用户是哪个身份,到底是拥有者还是所属组还是other。
  • 而匹配身份的顺序为 —— 拥有者 → 所属组 → other
  • 只要匹配成功,就不会再继续匹配

因此,上面的例子中,用户匹配到拥有者就停止匹配了,而code文件的拥有者没有任何权限,所以上面的读写操作自然就不能成功了。

最后再来看一个例子:

在这里插入图片描述

可见,尽管root是code的other,但是仍可以对code文件执行各项操作而不受限制。

我们可以说:

权限在root账户下,形同虚设。权限只限制普通用户。这也在另一方面说明了root的强大和重要性

2.2.2 修改文件权限属性 chmod

  • 既然文件的权限值有字符表示法和八进制表示法,那么修改权限的属性也有这两种方法。

  • 只有root账户或者文件的拥有者才可以修改文件的权限属性

字符表示法修改文件权限属性:

命令:

chmod u/g/o/a +/- rwx filename

其中:

  • u——拥有者user
  • g——所属组group
  • o——other
  • a——所有人
  • +/-——添加或删除权限
  • rwx——需要添加的权限

例如:

在这里插入图片描述

八进制表示法修改文件权限属性:

命令:

chmod num1num2num3 filename

  • num1num2num33个八进制数,分别代表拥有者、所属组、other的权限

例如:

在这里插入图片描述

2.2.3 目录的权限

我们前面提到,在Linux系统中,一切皆文件。所以我们可以说:一个目录也是一个文件

我们先来看一个目录的详细属性:
在这里插入图片描述

可以发现,目录文件和普通文件一样,也具有rwx可读可写可执行权限,也有拥有者、所属组和other身份。

因此,修改目录的权限属性也和修改文件的操作一样,这里不再过多赘述。

那么,目录文件的rwx文件又分别代表着什么呢?

可执行x

在这里插入图片描述

可以进行总结:

  • 目录的可执行x权限限制的是普通用户进入目录和在该目录底下执行命令的能力
  • 如果没有x权限,用户就不能cd进入目录,就算已经在目录里面,也不能执行ll等操作
  • 权限在root账户面前形同虚设。

可读r

在这里插入图片描述

可以进行总结:

  • 目录的可读r权限限制的是用户在该目录底下查看目录内容的能力
  • 如果没有可读r权限,用户就不能用ls命令查看文件内容

有小伙伴可能会对上面的例子有疑惑:

我连这个目录里的内容都不能查看了,为什么我还可以cat查看目录里code文件的内容呢?

我们必须清楚,限制文件的读写权限是文件的权限属性,限制目录的读写权限是目录的权限属性,这二者是互不影响的,因此,只要对这个文件有读权限,那么不管对这个目录有没有读权限,我们都可以查看该文件的内容。

可写w

在这里插入图片描述

可以进行总结:

  • 目录的可写权限w限制的是用户在该目录底下新建和删除文件的能力
  • 如果用户没有写权限w,那么用户就不能在该目录底下执行touchmkdirrm等命令
2.2.3.1 目录/tmp和粘滞位

我们先来看一下普通用户的家目录属性:

在这里插入图片描述

我们发现,只有家目录的拥有者,即这个账户本身拥有对这个目录的所有权限,而其他任何人对这个目录都没有任何权限

那么如果要在Linux中实现多个用户之间的数据传递和资源共享,该怎么做呢?

为了满足这一需求,Linux有一个专门的目录/tmp提供给所有用户,进行数据传递和共享。

在这里插入图片描述

我们可以看到:

  • /tmp目录为所有用户都开放了可读、可写、可执行权限
  • 所有用户都可以进入该目录,查看该目录的内容,同时在该目录底下新建文件

到了这里,有的小伙伴又有疑惑了:

既然/tmp目录为所有用户都开放了写权限,那我岂不是可以在这个目录里随便删除文件,搞破坏?

我们可以尝试一下:、
在这里插入图片描述

可以看到,Linux系统的设计者考虑到了我们的问题,通过实验可以发现:

在/tmp目录中,如果涉及到删除、剪切操作,只能对自己所拥有的文件生效,如果拥有者不是自己,那么就没有权限执行操作。

那么,Linux系统又是通过什么来实现这一功能的呢?

靠的就是我们所说的粘滞位

命令:

chmod +/-t d_name

  • 粘滞位就是目录可执行权限x的升级版
  • 粘滞位一般体现在other权限的可执行权限x
  • 如果该目录本来拥有可执行x权限,那被赋予粘滞位后**,x就会变成t;如果原来没有可执行x权限**,那被赋予粘滞位后,x就会变成T
  • 如果对一个目录的某个身份设置了粘滞位t,那么该目录下的文件只能由:
    • 超级管理员删除
    • 该目录的所有者删除
    • 该文件的所有者删除

2.2.4 权限掩码umask

有必要清楚,在Linux系统中,文件的初始权限为666,目录的初始权限为777

但是,为什么我们新创建的目录和文件,查看时,他们的权限一般都不是初始值呢?

在这里插入图片描述

这是因为Linux系统有权限掩码这一概念。我们可以用下面的命令查看当前的权限掩码:

umask

  • 规定:
  • 超级用户默认掩码值为0022,普通用户默认为0002。

在这里插入图片描述

我们只看后三位数字002这是三个八进制数,也就是用八进制表示法表示的权限值

实际创建出来的文件权限就是由umask权限掩码和权限初始值共同决定的:

  • 文字描述:权限 = 从初始权限中去掉在umask中出现的权限
  • 数学描述:权限 = 初始权限 & ~umaks

同时,我们也可以用命令来修改权限掩码:

umask 0num1num2num3

  • num1, num2, num3是三个八进制数

2.2.5 文件类型

在Windows系统中,我们通常用一个文件的后缀来区分文件的类型。但是在Linux系统中,我们靠命令ll展示的文件属性的第一个字符来区分文件的类型。

在这里插入图片描述

不同的字符代表着不同的类型,下面给出常见的Linux文件类型:

  • -:普通文件、文本、源代码、图片、视频、库、可执行程序等
  • d:目录文件
  • b:block,块设备文件
  • c:char,字符设备文件
  • l:链接文件
  • p:普通文件
  • s:socket文件

我们也可以用命令来查看文件到具体类型:

file filename

在这里插入图片描述

虽然在Linux中,文件后缀通常不像在Windows中那样具有特定的意义,但是文件后缀在 Linux 中仍然具有一些用途:

  1. 提示文件类型:文件后缀可以为用户提供一些关于文件类型的提示。例如,一个以 .jpg 结尾的文件通常是 JPEG 图像文件,尽管这并不是强制性的。用户和应用程序可以使用这些提示来决定如何处理文件。
  2. 与应用程序关联:文件后缀可以与特定的应用程序相关联,以指示默认的打开方式。例如,以 .txt 结尾的文件通常会在文本编辑器中打开。
  3. 便于组织文件:文件后缀有助于用户在文件系统中组织和识别文件。例如,将所有图片文件命名为 .jpg.png 结尾可以使用户更容易找到它们。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解Linux网络笔记(五):深度理解本机网络IO

本文为《深入理解Linux网络》学习笔记,使用的Linux源码版本是3.10,网卡驱动默认采用的都是Intel的igb网卡驱动 Linux源码在线阅读:https://elixir.bootlin.com/linux/v3.10/source 4、深度理解本机网络IO 1)、跨机网络通信过程 …

【笔录】TVP技术沙龙:寻宝AI时代

目录 引言大模型的应用案例大模型三问模型落地可行性考量维度AIGC的几个可行应用方向AIGC的存储LLM工程应用范式演进LLM编程协作范式变化 引言 大模型是10倍的机会,但并不是平均主义的机会,没有低垂的果实。 企业想在大模型的赛道上跑出成绩,…

光谱图像论文浅读

文章目录 Hyperspectral Image Super-Resolution via Deep Spatiospectral Attention Convolutional Neural Networks Hyperspectral Image Super-Resolution via Deep Spatiospectral Attention Convolutional Neural Networks 通过上采样高光谱保留其光谱特征,采用…

vscode连接服务器一直retry

解决方法 打开vscode控制面板,输入命令remote-ssh: kill vs code server on host 选择一直连接不上的服务器端口 重新连接

【鸿蒙软件开发】Stage模型开发概述应用/组件级配置

文章目录 前言一、基本概念1.1 UIAbility 组件1.2 ExtensionAbility 组件1.3 Context1.4 AbilityStage1.5 Stage模型开发流程应用组件开发了解进程模型了解线程模型应用配置文件 二、Stage模型应用/组件级配置2.1 为什么需要这个操作2.2 应用包名配置2.3 应用图标和标签配置2.4…

人工智能在疾病治疗中的应用:机遇与挑战

人工智能在疾病治疗中的应用:机遇与挑战 随着人工智能技术的飞速发展,其在诸多领域的应用价值日益显现。本文将探讨人工智能技术在疾病治疗中的应用,包括其背景意义、技术概述、具体应用、发展前景以及总结。 一、背景意义 随着医学技术的…

leetCode 169. 多数元素 + 摩尔投票法

169. 多数元素 - 力扣(LeetCode) 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。 class Solution { publ…

【SPSS】基于RFM+Kmeans聚类的客户分群分析(文末送书)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

一文解决:Swagger API 未授权访问漏洞问题

Swagger 是一个用于设计、构建、文档化和使用 RESTful 风格的 Web 服务的开源软件框架。它通过提供一个交互式文档页面,让开发者可以更方便地查看和测试 API 接口。然而,在一些情况下,未经授权的访问可能会导致安全漏洞。本文将介绍如何解决 …

前端技术知识(含八股)总结 - 持续更新中

前端技术知识(含八股)总结 - 持续更新中 参考文献1.HTML和CSS1.1 语义化标签1.2 CSS 选择器及优先级 / position 定位 / box-sizing 属性 / transition / 继承属性(如字体文字类的属性大部分有继承)/ 行内元素和块级元素 / html的…

2.MySQL的调控按钮——启动选项和系统变量

2.MySQL的调控按钮——启动选项和系统变量 1.启动选项和配置文件1.1 在命令行上使用选项1.2 配置文件中使用选项1.2.1 配置文件路径1.2.2 配置文件的内容1.2.3 特定 MySQL 版本的专用选项组1.2.4 配置文件的优先级1.2.5 同一个配置文件中多个组的优先级1.2.6 defaults-file 的使…

使用Spring Boot限制在一分钟内某个IP只能访问10次

有些时候,为了防止我们上线的网站被攻击,或者被刷取流量,我们会对某一个ip进行限制处理,这篇文章,我们将通过Spring Boot编写一个小案例,来实现在一分钟内同一个IP只能访问10次,当然具体数值&am…

MyBatisPlus创建新的Mapper.xml映射文件而不使用框架自带的?

MyBatisPlus创建新的Mapper.xml映射文件而不使用框架自带的? 以后使用数据库框架的时候可以使用MyBatisPlus而不适用MyBatis,因为MyBatisPlus更为简便,像简单的增删改查操作,在MyBatisPlus中可以直接完成,不用写Mappe…

免费活动-11月4日敏捷武林上海站 | Scrum.org CEO 亲临现场

​​​​​​​ 活动介绍 过去的几年里,外界的风云变幻为我们的生活增添了一些不一样的色彩。在VUCA世界的浪潮里,每一个人都成为自己生活里的冒险家。面对每一次的变化,勇于探索未知,迎接挑战,努力追逐更好的自己。…

雨云虚拟主机使用教程WordPress博客网站搭建教程

雨云虚拟主机(RVH)使用教程与宝塔面板搭建WordPress博客网站的教程,本文会讲解用宝塔面板一键部署以及手动安装两种方式来搭建WordPress博客,选其中一种方式即可。 WordPress WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MyS…

基于Java的民航售票管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

logback-classic包中ThrowableProxy递归缺陷StackOverflowError解析

logback-classic&#xff08;<1.2.12版本&#xff09;ThrowableProxy类中存在递归缺陷&#xff0c;会导致java.lang.StackOverflowError。改缺陷在1.2.12以上版本(包含该版本)中已修复。 如何复现&#xff1a; 两个异常彼此设置casue&#xff1a; 运行后报以下错误 以上写…

(免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设农产品销售管理系统。…

中颖单片机SH367309全套量产PCM,专用动力电池保护板开发资料

方案总体介绍 整套方案硬件部分共2块板子&#xff0c;包括MCU主板&#xff0c;采用SH79F6441-32作为主处理器。MCU主板包括2个版本。PCM动力电池保护板采用SH367309。 软件方案采用Keil51建立的工程&#xff0c;带蓝牙的版本&#xff0c;支持5~16S电池。 硬件方案--MCU主板 MC…

js中HTMLCollection如何循环

//不带索引 let divCon document.getElementsByClassName("el-form-item__error"); if (divCon.length > 0) {for (var item of divCon) {console.log("打印&#xff1a;", item.innerText);} }//带有索引 let divCon document.getElementsByClassNam…