Linux权限

28 篇文章 2 订阅

在这里插入图片描述

🦜1. shell是什么

之前有一篇文章讲过,指令的本质就是编译好的程序和脚本,但是这些指令是不会直接转发给操作系统,而是需要命令行解释器,通过翻译再转发给我们的操作系统,也就是我们所谓的shell

image-20230517161332112

这里打个形象的比方就是:
一名程序员,长期面对的都是电脑,和人打交道比较少,不善于交际。到了谈婚论嫁的年龄,还没个对象,不知道该如何和女孩子聊天,也接触不女孩子。这时候就需要一个媒婆,来给这个程序员说媒,通过这个媒婆,来向这名程序员说媒,这样程序员就能接触到女孩子,并且和女孩子聊一聊。

在这个过程中,程序员就好比用户媒婆就好比shell(命令行解释器),而这名女孩子就是我们的操作系统

对于Windows,我们不是直接操作Windows内核,而是通过图形接口、点击,完成我们的操作。

而对于Linux,我们采取的是指令操作:通过shell将指令解析给Linux内核,通过内核运行出结果,再由shell解析给用户。

shell除了解释我们的命令行,还一个功能就是,可以保护我们的操作系统,如果我们随便输入指令,这会先经过shell,如果该指令有问题,会直接拦截,就不会进入我们的操作系统。

image-20230517164048126

🦥2. Linux权限

🐧2.1 Linux用户分类

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

  • 超级用户:拥有最高权限,基本不受限制,一般学习的时候,不会使用root用户

  • 普通用户:系统中创建的用户,权限相对较低,适用于日常的使用

    image-20230517173202086

命令:su [用户名]

功能: 切换用户

示例:

  • su root普通用户切root用户

    image-20230517173729223

  • su Pyhroot用户切换普通用户

    image-20230517180312156

  • su Pyh2普通用户切换普通用户

    image-20230517174426142

Linux中的所有用户都有密码,因为root具有最高权限,所有切换普通用户使,无需密码,用户也相当于一个文件。

当普通用户切换普通用户时,需输入的是需要切换到的那个用户的密码

🐧2.2 文件属性

在Linux中,一切皆文件,文件的属性决定了我们对其操作时的权限和限制。

文件属性包括:可读文件、可写文件、可执行文件这三大类

🍥2.2.1 文件类型

image-20230518141031238

通过ll指令我们可以查看文件的详情信息,该行显示出的第一个符号,就代表这这个文件的类型。

  • -:普通文件(文本文件、可执行程序、基本库…)

    image-20230518142957285

  • d:目录文件

    image-20230518143400553

  • b:块设备文件(磁盘文件)

    image-20230518143619019

  • c:字符设备文件(键盘、鼠标、显示器文件…)

    image-20230518143834114

  • p:管道文件(进行通信)

    GIF 2023-5-18 14-45-36

在Linux环境下,文件的后缀名与文件类型无直接关系,最主要还是看显示的第一个字符。

🐧2.3 什么是权限

“权限” 二字贯穿于我们的生活,例如:玩游戏,有些道具充钱了才能使用、音乐平台需要充值会员才能听某些歌曲。
通过这些,我们可以发现权限认证的是身份,这些都是与我们“人”本身有关。但是还有另一个方面,比如说去教室打篮球、学生去校长办公室聚餐,这些要是硬来,也没法说,但这些事物本身的属性并不具备。

可以说,权限是用来管理对事物的访问和操作的权力,而事物属性则是用来描述事物的特性和状态。权限决定了谁能够操作事物,而事物属性描述了事物本身的属性和特点

🐧2.4 权限身份

上面都是关于文件本身的属性,有了本身的属性,还需要有对于的角色划分,也就是以什么角色来操作这个文件。

Linux将角色划分成三种:

  • 拥有者(Owner):创建该文件的用户,对文件具有完全的权限。
  • 所属组(Group):每个用户在Linux系统中都可以属于一个或多个用户组。所属组是与文件关联的用户组。用户组中的成员拥有与所属组相关的权限。
  • 其他人(Others):其他人指的是除了拥有者和所属组之外的所有用户。其他人权限适用于系统上的所有用户,不论其是否属于文件的拥有者或所属组(由于Others太多了,所以没有在文件属性显示)。

image-20230518183337290

​ 其中的rw-或者r--就表示了赋予对于用户的权限

  • r:读权限
  • w:写权限
  • x:执行权限

这三个权限对应的位置都是确定的,每个位置只有是或否

拥有者权限为例:rw-,文件test.txt对应拥有者的权限是读写权限,没有操作权限。

image-20230518184705627

🍻2.4.1 没有权限的现象

image-20230518190421487

如图可见,对应Others(普通用户)来说,想要执行为赋于的权限操作时,会被拦截。

但是Linux中还有一个超级用户,也就是所谓的root用户,那root的角色是Others时,是否会被限制呢?

image-20230518191012891

如上图,我们可以发现,root用户的角色是Others,只有读权限,但还是可以进行写操作。

因此,我们可以暂时猜测,Linux中的root用户,是不是不受权限的限制呢?接下来我们尝试去除所有权限。

image-20230518193145688

我们发现当我们去除所有权限之后,root用户还是无视权限,该干嘛干嘛。

所以,当我们没有权限时,系统会提示Permission denied。当然了,这些都与root用户无关,这就是超级用户的含金量!!!

🍻2.4.2 权限修改

指令: chmod

功能: 更改文件或目录的权限

Tips:修改文件(目录)的权限只有该文件(目录)的拥有者和root才可以

  1. 用户表示符+、-、=权限字符

    • +:向权限范围增加权限代号所表示的权限
    • -:向权限范围取消权限代号所表示的权限
    • =:向权限范围赋予权限代号所表示的权限
    • 用户符号:
    • u:拥有者
    • g:拥有者同组用
    • o:其它用户
    • a:所有用户

    示例:

    image-20230518205515622

  2. 八进制表示法

    每个权限组使用以下数字表示:

    • 4:读权限(r)
    • 2:写权限(w)
    • 1:执行权限(x)

    计算权限组的值,可以将对应的数字相加。例如,如果拥有者需要读、写和执行权限,所属组需要读和执行权限,其他人只需要读权限,则计算如下:

    • 拥有者:读(4) + 写(2) + 执行(1)= 7
    • 所属组:读(4) + 执行(1)= 5
    • 其他人:读(4)

    示例:

    image-20230518211052554

    指令:chown

    功能: 修改文件的拥有者

    语法:chown [选项] 新拥有者[:新所属组] 文件/目录

    示例:

    image-20230518211632514

    在这里我们发现,修改拥有者时失败了,这是什么原因呢?

    打个比方:A找B办点事,想着空手去不好,于是带了一些“礼品”给B。B心想,办事就办事嘛,带什么“礼品”,不收!打娘胎里的时候人家就说了,这孩子以后不爱“收礼品”。这时候B的上级就过来了,“孩子,这不比娘胎,这环境不一样,得收”。就这样通过B的上级授权,A把“礼品”给了B。

在Linux中也是一样,拥有者无法直接给将自己文件给出去,需要权限升级。

image-20230518232937458

能把拥有者给出去,也能将所属组给出去

指令:chgrp

功能: 修改文件或目录所属组

示例:

image-20230518233414229

🍻2.4.3 默认权限

image-20230519005919939

我们发现在创建文件后,目录文件默认显示的是664(八进制表示),普通文件默认显示的是775,那为何是这样呢?

Linux环境下:

默认给普通文件的起始权限是666

默认给目录文件的起始权限是777

给我们显示出的和默认的不一样,这其实是因为Linux里面存在一个权限掩码umask

image-20230519010433083

这个umask,就类似于漏斗,反是在umask中出现的权限,不会在最终的文件权限中出现。

image-20230519012323327

这其中的运算是 最终权限 = 起始权限 & (~umask)

🍻2.4.4 目录权限

了解关于文件的基本权限后,我们来观察一下这些权限对应目录的影响。

首先去除目录dir1的读权限:

image-20230519135635266

我们发现当把读权限去除之后,无法查看该目录,那么读权限约束的就是是否可以查看该目录

再继续将写权限去除:

image-20230519140552772

去除写权限之后,创建、更改、删除操作都无法进行。

最后,去除执行权限

image-20230519141030596

这里查看该目录时虽然被拒绝,但是也会给我们显示该目录的情况,这就好比去动物园,没门票不让进去,但是我们还是可以通过窗户看到里面的动物。

通过这些就能知道,为什么系统会默认给目录文件的起始权限是777,因为没有执行权限的话,我们是无法进入该目录的。

🍻2.4.5 粘滞位

普通用户自己的家目录的权限是700,除了自己和root,其他用户都看不到

image-20230519142207963

但有些时候,我们多个用户需要进行文件数据的共享,那这样就不能在任何一个用户的家目录下创建共享文件。

那么我们就可以在根目录下,创建一个目录,开发所有权限,用来临时共享我们的文件。

image-20230519144612843

如果我们的创建者改变主意,把这个文件的权限更改,只允许自己操作,其他人一律不给权限,会怎样呢?

image-20230519144942618

我们发现一个很离谱的问题,创建该文件的用户收回权限之后,其他用户虽然无法进行查看,但是可以把文件删除!这就很离谱。

那我们可以得出一个结论:一个文件是否能被删除,并不由本身决定,而是由该文件所处的目录决定

因为是共享目录,我们也不能直接将所有的写权限收回,如果收回了,这个共享的意义就不存在了。在Linux中有一个叫粘滞位的权限位,它就限制了除了创建该文件的用户和root之外的用户,都无法对该文件进行删除操作。

指令:chmod o+t [共享目录]

image-20230519150012840

由原本的x变为了t,这也是一种权限位,会约束彼此之间不能互删

image-20230519152743540

给设置目录(一般是共享目录)设置粘滞位之后,大家可以在目录进行各种文件的增删改查,只有文件拥有者和root用户能够删除这个文件。

这里的shared目录是博主自己建的,用于测试这些操作。其实Linux的家目录下有一个tmp目录,这个就是用于我们共享文件的一个临时目录。

image-20230519154014486

🐸3. 结语

在Linux系统中,权限是用来控制对文件和目录的访问权限的。每个文件和目录都有所有者(owner)、所属组(group)和其他用户(others)这三种权限设置。它们是保护文件和目录的重要机制,确保只有授权的用户能够访问和修改文件。

当然了这些规则root都是无视的,无论这些文件的权限是什么。root是Linux中超级用户权限,建议仅在需要进行系统级别的操作时使用root用户,其他操作还是尽量用普通用户,这也更便于我们学习。

本篇文章就到此结束,感谢大家的观看,如果有帮助的话点赞评论支持一下,我们下期再见,如果还有下期的话。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加法器+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值