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

news2024/11/16 7:44:34

文件权限属性和权限管理

本章思维导图:

在这里插入图片描述
注:本章思维导图对应的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.coloradmin.cn/o/1144039.html

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

相关文章

拥抱AI-ChatGPT:人类新纪元

最近大模型通用智能应用持续发酵,各大科技公司都陆续推出了基于通用大模型的智能应用产品,典型的如OpenAI的ChatGPT、微软的BingChat、百度的文心一言、360的智脑、阿里的通义千问等。当然最火的要属于ChatGPT了,从去年年底推出到现在已经有很…

模型工具实现数据库批量追加到空的数据库

一. 下载: http://dt1.8tupian.net/2/29913a50b1000.pg3二. 介绍:许多时候我们的作业数据库需要批量追加到标准的汇交数据库,手动一个层一个层的追加比较麻烦,本工具实现将空间图层和属性数据自动追加到标准空库。

【psychopy】【脑与认知科学】认知过程中的面孔识别加工

目录 实验描述 实验思路 python实现 实验描述 现有的文献认为,人们对倒置的面孔、模糊的面孔等可能会出现加工时长增加、准确率下降的问题,现请你设计一个相关实验,判断不同的面孔是否会出现上述现象。请按照认知科学要求,画…

详细介绍如何使用 NeRF 进行 3D 体积渲染-附源码下载

介绍 在此示例中,我们展示了 Ben Mildenhall 等人的研究论文 NeRF:将场景表示为用于视图合成的神经辐射场的最小实现 。等人。作者提出了一种巧妙的方法,通过神经网络对体积场景函数进行建模来合成场景的新颖视图。 为了帮助您直观地理解这一点,让我们从以下问题开始: 是…

1819_ChibiOS的互斥信号与条件变量

全部学习汇总: GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 1. 关于会吃信号与条件变量的全局配置提供了4个配置信息,分别是互斥信号的使能、互斥信号的递归支持、条件变量的使能、条件变量的超时使…

jQuery图像查看插件Zoom.js

效果图 图片点击放大,再次点击或者滚动窗口或者按 ESC 键即可恢复原始大小,非常流畅,使用方法也非常简单,引入zoom.js和zoom.css文件之后,对图片添加data-action"zoom"属性即可。 使用方法 1,将…

【网络】详解http协议

目录 一、认识URLurlencode和urldecode 二、HTTP协议HTTP协议格式HTTP的方法HTTP的状态码HTTP常见Header 一、认识URL URL叫做统一资源定位符,也就是我们平时俗称的网址,是因特网的万维网服务程序上用于指定信息位置的表示方法。 urlencode和urldecode …

21.10 Python 使用CRC32校验文件

CRC文件校验是一种用于验证文件完整性的方法,通过计算文件的CRC值并与预先计算的CRC校验值进行比较,来判断文件是否发生变化,此类功能可以用于验证一个目录中是否有文件发生变化,如果发生变化则我们可以将变化打印输出&#xff0c…

初次学习dubbo记录

---------------------------------------10.17---------------------------------------- 集群和分布式概念 集群:很多"人"做的相同的一件事,即使有一个人挂掉了,也不会对系统造成致命影响 分布式:很多"人"…

外卖小程序:技术实现与关键代码

在当今数字化的餐饮市场中,外卖小程序扮演着重要的角色。这些应用程序通过技术实现点餐、支付和配送,为用户提供方便快捷的服务。下面我们来深入探讨构建外卖小程序的关键技术要点和代码示例。 1. 前端开发 前端是用户与应用程序交互的接口&#xff0…

三年轻量:腾讯云3年轻量2核2G4M服务器366上三年时长

腾讯云轻量应用服务器三年特价,3年轻量2核2G4M服务器,2023双十一优惠价格366元三年,自带4M公网带宽,下载速度可达512KB/秒,300GB月流量,50GB SSD盘系统盘,阿腾云atengyun.com分享腾讯云轻量2核2…

晚上没事干又想利用时间赚钱,那就做副业,不要再懒了

很多朋友白天上班工作不是那么累,晚上下班后又比较空闲,如果一晚上不想被游戏、短视频、电影填满的话,那可以做一些兼职副业来扩宽收入来源,不仅充分利用了时间,还赚取了额外的收入。 晚上能做的兼职副业可太多了&…

AQS 为什么要使用双向链表?

双向链表 双向链表的特点是它有两个指针,一个指针指向前置节点,一个指针指向后继节点。所以,双向链表可以支持 常量 O(1) 时间复杂度的情况下找到前驱结点,基于这样的特点。双向链表在插入和删除操作的时候,要比单向链…

基于STM32两轮自平衡小车系统设计与控制

**单片机设计介绍,1650【毕设课设】基于STM32两轮自平衡小车系统设计与控制 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序文档 六、 文章目录 一 概要 主控芯片用的是100脚的STM32F103VET6,陀螺仪用的是MPU6050,电机…

基础课12——数据采集

数据采集是指从传感器和其它待测设备等模拟和数字被测单元中自动采集非电量或者电量信号,送到上位机中进行分析处理。数据采集系统是结合基于计算机或者其他专用测试平台的测量软硬件产品来实现灵活的、用户自定义的测量系统。采集一般是采样方式,即隔一定时间(称采样周期)对同…

线性表的定义和基本操作

线性表的定义和基本操作 一、线性表的定义 线性表(Linear List)是具有相同数据类型的n(n>0)个数据元素的有限序列,其中n为表长,当n0时线性表是一个空表。若用L命名线性表,则其一般表示为 L (a1,a2,...,ai,ai1,.…

防止请求重复提交:注解+拦截器的实现方案

文章目录 了解请求重复提交解决思路具体实现 了解请求重复提交 请求重复提交是指用户在一次请求还未处理完成时,重复提交了相同的请求。这种情况通常发生在网络延迟、用户误操作或系统性能不佳等情况下。 请求重复提交可能会导致以下问题和影响: 数据不…

学习笔记:二分图

二分图 引入 二分图又被称为二部图。 二分图就是可以二分答案的图。 二分图是节点由两个集合组成,且两个集合内部没有边的图。换言之,存在一种方案,将节点划分成满足以上性质的两个集合。 性质 如果两个集合中的点分别染成黑色和白色&am…

C语言之 结构体,枚举,联合

目录 1.结构体 1.1结构的基础知识 1.2结构的声明 1.3 特殊的声明 1.4 结构的自引用 1.5 结构体变量的定义和初始化 1.6 结构体内存对齐 1.7 修改默认对齐数 1.8 结构体传参 2. 位段 2.1 什么是位段 2.2位段的内存分配 2.3 位段的跨平台问题 3. 枚举 3.1 枚举类型…

Mybatis简介(二)

1、多表映射 简介一 链接 对于数据库的操作,很多时候我们都是在多表的基础上进行操作的,在这里讲一下多表属性值与列名映射。 案例:这里有一个订单表和一个客户表 CREATE TABLE t_customer (customer_id INT NOT NULL AUTO_INCREMENT, cus…