【Linux修炼】4.Linux权限

article/2025/8/29 14:26:47

在这里插入图片描述每一个不曾起舞的日子,都是对生命的辜负。

Linux权限

  • shell命令以及运行原理
  • Linux权限的概念
  • Linux权限管理
    • 01. 文件访问者的分类(人)
    • 02.文件类型和访问权限(事物属性)
    • 03. 默认权限的初始值:
    • 04. umask
    • 05. 进入目录所需要的权限
  • 粘滞位
  • 关于权限的总结

shell命令以及运行原理

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?

从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

  • 将使用者的命令翻译给核心(kernel)处理。
  • 同时,将核心的处理结果翻译给使用者。

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。

shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

  • 帮助理解:如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。

Linux权限的概念

Linux下有两种用户:超级用户(root)、普通用户

  • 超级用户:可以再linux系统下做任何事情,不受限制。
  • 普通用户:在linux下做有限的事情。
  • 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

命令: su [用户名]
功能: 切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 suroot(root可以省略),此时系统会提示输入root用户的口令。(即root用户的密码)

  • 演示:

image-20221003204119414

上面切换之后最终的结果的路径不变,如果是lesson目录,切换之后仍然是lesson,只是用户变成了root。那么如果要像重新登录root的路径一样,直接切换到root的家目录的话,在su后面加上-,即可。

  • 演示:

    image-20221003204235994

既然普通用户能变成root用户,那么root用户也能切换到普通用户,直接su 用户名就可以切换到你想切换的用户了,可见root的重要性。下面具体实操一下:

image-20221003205411575

但是我们其中发现一个问题:

  • image-20221003205915906

通过su从root用户切换到任意的子用户时,无法查看这个子用户的具体内容。但仔细观察我们发现,路径是有问题的,正常的一个用户的家目录应该是~,而此时这个路径是root,因此我们访问不了, 当我们cd ~到此用户的家目录中,就可以查看具体内容了:

image-20221004124719012

Linux权限管理

在此之前,对于权限,主要有三个这样的问题:

  1. 什么是权限?
  2. 如何操作权限?(修改权限)
  3. 为什么要有权限?

接下来我们开始:

01. 文件访问者的分类(人)

  • 文件和文件目录的所有者:u—User(中国平民 法律问题)
  • 文件和文件目录的所有者所在的组的用户:g—Group(团队)
  • 其它用户:o—Others (外国人)

对于这些身份,将他们分类的意义在于能够将团队之间进行一定的联系,即一个团队都属于一个group,进而避免了Others的访问。

02.文件类型和访问权限(事物属性)

image-20221005122026356

当我们通过ll命令显示文件信息的时候,会出现这样的示例:

image-20221005122254794

即对应了上面所描述的具体信息,但我们发现,其第一个字符大都是不同的,因此文件类型也是不同的:

  1. 文件类型:

    d:文件夹
    -:普通文件(源代码、库文件、可执行程序、文档压缩包等等)
    l:链接文件(类似Windows的快捷方式)
    b:块设备文件(例如硬盘、光驱等)
    p:管道文件
    c:字符设备文件(例如屏幕等串口设备,键盘)
    s:套接口文件
    

对于这些文件类型,和windows的命名方式并不相同,windows的文件类型在后缀中就可以进行观察和修改,但对于Linux文件,其命名并不能决定文件的属性,而是需要不同的指令来创建不同的文件,比如d开头的目录,就需要mkdir指令去创建,对于-开头的普通文件,就需要touch指令去创建,这些使我们已经学到的命令,对于其他文件来说,暂时不需要过多了解,只是提到并且知道有这么个东西即可在后续学习的过程中将会进行深入的讲解。

  • 需要注意的是,对于后缀来说,Linux的文件属性虽然与其无关,但在其他命令比如gcc的命令下,对于后缀的要求和windows下是一样的,因为gcc只是Linux其中的一个工具,对应windows下的软件,是这个工具要求文件的后缀属性,因此在使用类似于gcc命令的时候将文件名命名成相应的后缀是必要的。

image-20221005124535132

对于圈出的这10个字母,第一个的含义已经描述清楚,下面继续:

  1. 基本权限:

    image-20221005191514698

    对于剩下的九个字符,我们三个三个分成一组,即:(依次为)

    • rwx (拥有者)

    • rwx (所属组)

    • r-x(其他)

这三组就依次对应拥有者、所属组、Others的权限声明。

我们发现,每三个字符为一组后,存在着rwx-四种字母的组合,因此这四种字母也分别代表着不同的含义:

  • r:Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
  • w:Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
  • x:execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
  • “—”表示不具有该项权限

因此,我们可以看出,在这里file的权限是,拥有者具有读、写、执行;所属组具有读、写、执行;Other只有读、执行,并没有写的权限。

上面就解释了什么是权限以及权限的基本内容。

  • 那么到了第二个问题,如何操作(修改)权限呢?
    • 修改命令的权限

    对于拥有者来说:chmod u (+或者-) (具体权限)(u代表拥有者),就可以改变拥有者对这个文件操作的权限,下面展示一下:(改变文件权限只能是拥有者或者root!)

image-20221005195201876

通过±权限,我们可以看出拥有者的权限发生了变化,但对于执行权限来说,有的文件即便加上也不一定能够执行,因为这与文件的格式有关,一般是二进制文件才可以执行。

对于操作所属组和Others的权限来说,只需要将上面命令的u改成g或者o即可,即:

  1. 改所属组 :g
  2. 改Others:o

这里继续补充,如果想要一起修改,举个例子,想要修改所属组和Others的权限,只需要在命令时用逗号隔开就能够同时进行修改:

chmod u-rwx,g-rwx test.txt

image-20221005200615164

当然,我们也可以进行批量化修改,同时通过一条指令改变权限:

chmod a (±权限) 文件名

image-20221005201621243

这样就可以同时修改。

那么,对于这些权限,到底与命令之间有什么关系呢?

image-20221005202457006

可以看出,由于test.c不是二进制编码文件,因此对于拥有者来说,只能进行读和修改,不能运行test.c。

但当我们把拥有者读的权限去掉之后,cat test.c就读不到具体的内容:

image-20221005202849496

可以看出,再进行cat读不到其内部的内容。这就是没有权限的表现。当然,这里仍有一个需要强调的地方,仍是这种把读的权限去掉之后,对于拥有者本身,不能读,但是事实上所属组仍然可以通过cat读出文件的具体内容,这时候就产生了一个歧义,拥有者本身既有拥有者的身份,也有所属组的身份,当把拥有者的身份’对应的权限去掉之后,是否拥有者本身还可以凭借着所属组的身份访问呢?

答案是否定的。在Linux中,为了防止这样的歧义发生,就设计了这样的一个规则:去掉拥有者的权限,即便仍有所属组的权限,只要在所属组中,你有着拥有者的身份,就不能去通过这个去掉的权限去执行。如果不这样设计的话,想要删掉拥有者的权限,就必须将所属组的权限也删除掉,这是不现实的。

补充: 通过ugo的方式,我们能够将其权限进行修改,此外,由于按照有1无0的原则,还有一中八进制的修改方式:

image-20221006131500341

通过后面直接对数字的改变,我们同样可以改变权限:

image-20221006131653920

即一个数字就代表一个身份的人具备的权限。777就代表这同时将拥有者、所属组、Others进行修改成所有命令都允许。

    • 修改身份(修改拥有者、所属组、Others)

    对于修改身份来说,作为文件的拥有者,我们可不可以将自己或者别人的身份进行修改呢?举个例子,能不能将作为拥有者的你修改成所属组或者Others呢?事实上,只有root有这个权限,即便你是拥有者,你也不能进行随意修改,当然也可以用sudo进行提权操作,在这里由于没有将本人账号添加到root白名单因此不能进行sudo的提权操作,因此我们直接用root账号进行演示,当学到vim时,将会详细介绍sudo的使用。

当我们进入root之后,cd /home ,再进行ll操作,就可以看见各个用户,再cd cfy,就可以用root权限对cfy的文件进行操作,因此在这里我们通过chown hwc test.c 就将cfy中test.c文件的拥有者从cfy变成了另一个·用户hwc,当我们把所属组的权限删掉之后,我们发现,cfy就不能通过任何形式访问,因为其既不是拥有者,也不在所属组中。

image-20221006124336879

image-20221006124445906

当然,我们想要将其切换回来仍可以用这个命令:

image-20221006124633229

  • 如果想改变所属组,将chown命令换成chgrp命令即可
  • 同时改变cfy的文件的拥有者和所属组,将其变成hwc:chown hwc:hwc test.c

**总结:**对于修改Other其实是没有必要的,只要其不是拥有者不是所属组,那么就一定是Others,因此上述只介绍了两个1改变权限的命令,设置文件属性:chmod;设置文件所属角色:chown/chgrp

  • 注意:

    root永远不受权限的约束,既可以随意修改权限,也不会受到权限的约束,即便删除这个权限,root仍可以使用!

那么到了第三个问题,为什么要有权限呢?

通过上述的一系列的操作我们发现,权限的存在是便于我们系统进行安全管理的。

03. 默认权限的初始值:

为什么我们创建的目录或者普通文件,默认权限是我们所看到的样子?

即:image-20221006133150159

Linux规定,目录的起始权限是从777起始的,普通文件起始权限是从666开始的,但对于这个来说,我们看下面的权限并不是这样:

[cfy@VM-8-3-centos ~]$ ll
total 196
drwxrwxr-x 3 cfy cfy   4096 Sep 30 14:51 106
-rw-rw-r-- 1 cfy cfy      0 Sep 30 14:27 106.txt
drwxrwxr-x 3 cfy cfy   4096 Oct  2 14:03 file
-rw-rw-r-- 1 cfy cfy      0 Sep 30 14:27 file2.txt
-rw-rw-r-- 1 cfy cfy      0 Sep 30 14:27 file3.txt
-rw-rw-r-- 1 cfy cfy      0 Oct  1 21:18 file.txt
-rwxrwxrwx 1 cfy cfy     94 Oct  5 20:20 test.c
-rwxrwxrwx 1 cfy cfy 168948 Oct  5 20:17 test.txt
-rw-rw-r-- 1 cfy cfy  16077 Oct  1 16:37 tmp.txt
[cfy@VM-8-3-centos ~]$ 

image-20221006210622306

我们发现,将其权限用八进制表示 106目录的权限是775,106.txt的权限是664。

实际上,这与Linux中的权限掩码有关:

04. umask

即通过umask命令得出:

[cfy@VM-8-3-centos ~]$ umask
0002

系统会默认配置好umask,当执行umask的时候,出现了四位数字,0002,但对于八进制权限来说,第一位的0我们并不算在内,那么权限掩码就是002,对于Linux文件中的权限,凡是在umask中出现的权限,都必须在起始权限中去掉:

对于八进制的002来说,转化成二进制就是000 000 010 ,因此,对于目录文件的默认777,将会变成775;普通文件的666,将会变成664,这也就与我们得到的默认权限是相符的。我们发现,这与减法类似,但事实上不是减法的运算,而是:

  • 最终权限 = 起始权限 & (~umask) (~代表按位取反)

当然,umask的权限掩码可以自己设定,随之我们在新建文件的默认权限也会发生改变:

image-20221006212336304

超级用户默认掩码值为0022,普通用户默认为0002

05. 进入目录所需要的权限

对于目录来说,赋予拥有者rwx的权限,但我们想进入目录,需要什么权限呢?

  1. r

image-20221006214641145

当我们把r去掉后,发现可以进入,因此进入的权限与r无关,但当在目录中ll后,由于testq没有r权限,我们不能观察其内部文件。

  1. w

image-20221006215028891

去掉w之后,仍然可以进入,并且能够观察,但当我们创建文件时,由于没有w,因此不能创建。

  1. x

image-20221006215159191

因此我们发现,能够进入目录是因为有x权限,没有x权限就不能进入。

那么问题来了,换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限。 这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉?

因此,为了避免这个不科学的操作,引入了粘滞位。、

粘滞位

Linux系统中有很多人,我们需要在一个公共的目录下,进行临时文件的操作(增删查改)

image-20221016160528243

即我们通过ll /就会发现有一个这样的目录,这就是公共目录,即每一个用户都可以在这里放入各种文件,也可以删除各种文件,因此为了避免张三的文件被李四的操作删掉,我们就需要利用粘滞位。

因此按照这种步骤,我们模仿上述的场景,从创建一个类似于上面的公共目录开始:

1. 创建公共目录

image-20221016162520090

创建完公共目录之后,我们就可以以不同身份在其中创建文件了。

2. 以不同身份在mytmp公共目录中创建文件

image-20221016163449677

接下来我们需要用另一个用户创建文件。

由于此账号暂时没有sudo权限,因此我们将其切换成root账号后直接su 另一个用户(hwc)

image-20221016164051475

3. 以hwc的身份删除cfy所创建的文件

我们发现,cfy1.txt的权限不让hwc这个用户去写,于是hwc这个用户火大了,就把cfy1.txt这个文件给删除了,这也正是我们在引入粘滞位之前所说的情况。(操作如下)

image-20221016164617796

即,一个不能以另一个用户读、写、执行的文件,竟然可以让另一个用户删除、,因此,创建和删除的权限是目录的权限,即在目录中创建和删除里面文件的权限不是文件本身的权限,而是目录的权限。

在这时候,我们就需要一个策略,让一个公共目录,大家可以进行rwx操作,但是禁止大家互删对方的文件,即去掉目录的这个权限,因此我们需要给这个公共目录设置粘滞位。

4. 给目录设置粘滞位

对于设置粘滞位,是以root身份设置的,对于root创建的公共目录来说,无论是cfy还是hwc都属于Others,因此我们设置的粘滞位是给Others设置的粘滞位。

image-20221016165739898

当我们给目录设置完粘滞位之后,就需要验证一下是否还可以删除:

5. 验证是否还可以互删

image-20221016170532142

  • 对于root用户来说,无论怎样设置都可以删除,因此root的权限非常重要

总结:

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由:

一、超级管理员删除(root)
二、该目录的所有者删除
三、该文件的所有者删除

关于权限的总结

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

关于Linux的权限部分到这里就结束了,觉得有用的话就三连支持一下作者吧!


http://chatgpt.dhexx.cn/article/mGukkvyk.shtml

相关文章

Linux权限认识

目录 前言1.初识权限2.文件权限2.1文件类型和访问权限2.2文件访问者2.3文件权限值的表示方法 3.文件访问权限的修改3.1chmod2.chown3.chgrp 4.目录权限4.1目录权限与文件权限4.2粘滞位4.3目录权限的总结 Ending 前言 对于Linux是笔者第一次的介绍,而对于的基础指令…

Linux权限修改(详细)

Linux权限修改(详细) 前言:本人最近在学Linux相关操作,虽然之前也有部署过自己的网站以及个人博客,但是对于Linux系统的基本操作终究只是知其然并不知其所以然,故特地学习。 基本权限查看 首先&#xff0…

Linux权限提升

提权必备命令 linux提权寻找exp: https://www.exploit-db.com/ http://ww1.1337day.com/ http://www.securiteam.com http://www.securityfocus.com http://www.exploitsearch.net http://metasploit.com/modules/ http://securityreason.com http://seclists.org/fulldisclos…

【Linux】Linux权限的理解

文章目录 🎪 Linux权限的理解🚀1.shell命令及其运行原理🚀2.Linux权限概念⭐2.1 用户与root身份切换⭐2.2 用户与用户身份切换⭐2.3 单条指令提权 🚀3.Linux文件权限⭐3.1 文件属性(第一个字符)⭐3.2 文件角色划分与文件属性⭐3.3…

Linux权限详解.

🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸 文章目录 一、Shell运行原理以及bash二、Linux权限三、权限管理1.改角色2.改属性a. ugo对wrx进行-b.八进制方案 四.常见权限问题1.目录权限2.umask权…

linux权限详细介绍

当我们使用"ls -l" 指令查看一个文件或目录信息的时候,系统会显示出,如下信息 这些信息中包含了这个文件的权限信息和所有者以及所在组,还有该文件的大小,该文件最后修改的日期时间,文件名称等信息.从左往右看, 第一个代表文件的类型, 如果是一个普通文件为"-&q…

Linux 权限

目录 Linux下的用户 文件的权限 Linux 下的文件 修改属性 修改人 目录权限 Umask 粘滞位 Linux下的用户 Linux 下有两种用户,超级用户( root )和 普通用户。 超级用户具有 Linux 下的最高权限,一般不受权限约束&#xff0c…

Linux权限及其理解

文章目录: Linux权限的概念Linux权限管理文件访问者的分类(人)文件类型和访问权限(事物属性)文件权限值的表示方法文件访问权限的设置方法权限掩码目录的权限粘滞位 总结 Linux权限的概念 与其它系统相比,…

Linux权限介绍

文章目录 Linux权限介绍1. shell命令及原理2. Linux权限的概念3. Linux权限管理3.1 人(用户)3.2 事物属性(文件类型和访问权限)3.3 文件访问权限的相关设置方法3.3.1 chmod3.3.2 chown3.3.3 chgrp 3.4 file指令3.5 目录权限3.6 默认权限3.7 粘滞位3.7.1.…

Linux的权限命令

上一篇👉重定向输出>和>>&系统管理命令&管道| 总目录👉一文带你轻松加愉快入门Linux 文章目录 1.文件权限2.Linux三种文件类型:3.文件类型标识4.文件权限管理: &a…

【Linux入门】Linux权限及管理

【Linux入门】Linux权限及管理 目录 【Linux入门】Linux权限及管理Linux权限管理文件访问者的分类文件类型和访问权限(事物属性) 文件权限值的表示方法文件访问权限的相关设置方法目录的权限实现共享目录粘滞位目录权限总结 作者:爱写代码的刚…

Linux-权限

文章目录 1. 认识Linux下用户的分类1.1用户切换1. 2 指令暂时提权 2. 什么叫做权限2.1. 文件属性文件的类型文件权限属性角色和具体的人(用户)是什么关系呢?权限 3. 见一见没有权限会有什么现象(见见)4. 权限的修改问题修改文件 拥…

【Linux】linux权限设置

文章目录 一、shell1. shell概念2. 进程 二、用户1. 用户分类2. 用户切换 三、权限1. 临时权限提升2. 权限的属性3. linux中角色类别4. 第一列文件属性 四、修改权限1. 修改文件权限2. 修改文件所属3. 修改文件权限八进制4. 粘滞位 五、linux默认权限设置1. 默认权限2. 权限掩码…

linux权限管理操作(权限设置)

权限设置 语法:#chmod 选项 权限模式 文档 注意事项: 常用事项: -r:递归设置权限(文档类型为文件夹的时候) 权限模式:就是该文档需要设置的权限信息 文档:可以是文件,也…

Linux权限

文章目录 一、Linux下用户的分类二、文件访问者的分类三、权限的分类四、权限的表现形式五、修改权限六、粘滞位七、补充说明 一、Linux下用户的分类 超级用户(root)、普通用户 超级用户可以在Linux系统下做任何事情,不受任何限制 普通用户受…

Linux权限(下)

Linux权限下 file指令目录的权限x权限r权限w权限 文件的默认权限umask码修改umask码 粘滞位背景谁能删除设有粘滞位的目录下的文件?设置粘滞位的注意事项 file指令 在此之前我们先了解一个指令,这个指令可以让我们更详细的了解文件的具体类型&#xff0…

Linux--权限讲解

文章目录 前言一、什么是shell外壳程序?二、为什么有shell外壳程序?三. Linux的用户基本介绍四. 用户间的相互转换及权限的索取五. 什么是权限?六. 权限的具体分类七. 文件权限属性的改变和‘人’的改变八. 为什么要有权限?九. 显…

Linux权限的基本知识

本文已收录至《Linux知识与编程》专栏! 作者:ARMCSKGT 演示环境:CentOS 7 目录 前言 正文 权限是什么? Linux权限的划分 Linux用户的切换命令 Linux文件权限 Linux文件类型 Linux文件权限 Linux角色划分 文件权限的访问…

【Linux】权限管理

目录 一.用户在使用Linux系统时的权限 1.概念 2.用户权限切换(角色切换) 1.普通用户切换root 2.root切换普通用户 二.用户在使用文件或目录时的权限 0.如何区分是文件还是目录? 1.拥有文件或目录权限的三个身份 2.文件或目录的权限 3.如何修改权限 &#…

【Linux】——权限详解

Linux权限的概念 在学习Linux权限之前,我们需要首先了解一下关于用户的知识。在Linux下有两种用户,分别是root用户和普通用户。root用户就好比充钱的VIP一样,可以在Linux下做任何事情,几乎不受限制,我们也称其为超级用…