• Linux —— 基本权限(1)


    1.shell命令以及运行原理

    首先,我们要明白,Linux是一个操作系统,我们一般将它称为"核心"(kernel)。我们作为用户,是不能直接访问和操作kernel的。我们必须通过shell来对操作系统进行访问和操作

    我们举一个很简单的例子来理解为什么直接操作kernel是不允许的。假如我们手上有500元巨款,我希望这笔巨款存到某某银行当中,此时就出现了用户、银行(操作系统),此时我们是直接把钱丢到银行门口让银行本身处理这一笔巨款吗?当然不是。我们需要通过柜员办理我们的业务。也就是说,银行柜员充当了"中间者"的角色,我们将钱交给柜员,柜员以合适的方式交给银行,此时就建立了用户与银行的联系。
    在这里插入图片描述
    所以,从技术角度上讲,shell的定义是一个命令行解释器(command Interpreter),它的主要工作是:将用户的命令翻译给kernel,将kernel的处理结果反馈给用户

    抛开Linux不谈,即使是可视化界面的Windows系统,我们作为用户也不能直接操作kernel。我们是通过图形接口,例如打开某某程序,我们会使用鼠标双击它,双击这个过程本身就是一个指令,这个指令通过GUI交给Windows内核处理,然后GUI将处理的结果反馈给我们,此时我们就看见程序被打开了。

    2.Linux权限

    2.1Linux账户分类

    在Linux中,有两大用户,一是超级用户(root),二是普通用户。

    超级用户可以在Linux下做任何事包括我们熟悉的删库跑路(rm -rf /)。而普通用户只能做有限的事

    我们可以通过命令提示符来判断我们当前使用的用户是什么类型:
    在这里插入图片描述
    并且我们可以使用 su 命令来切换用户,前提是我们已经创建好了多个用户。
    在这里插入图片描述

    2.2权限的理解

    所谓权限,就是有些人能做很多事,有些人不能做很多事。这里提到了两个对象,即人和事物。任何权限都建立在这两个对象之上。

    例如,我是没有某某视频会员的人,那我就不能看VIP电影。可能读者们是某某视频的SVIP,那么可以无限并且流畅地观看所有电影。

    在Linux中,权限不仅仅体现在超级用户和普通用户之上。在Linux中,权限一般体现在用户和文件上

    2.3用户的分类

    事实上用户应该只被分为两类,一便是这个文件的拥有者,二便是其他人。但是Linux不这么干,它将用户分为了拥有者、所属组、其他人。至于为什么,那便跟实际的生活工作有关。

    假设一个公司的一个工作室要开发一款软件,那么工作室的开发人员便是这款软件的拥有者,他们具有分配给自己和其他类型用户的读、写、执行的权限。那么工作室的领导属于哪个分类?所以便有了所属组的概念,因为领导即便不是参与软件的开发人员,但是软件属于这个工作室。其他人我们可以理解为使用软件的普通人。

    2.4文件的分类

    在Windows系统中,我们区分一个文件的类型通过文件的后缀进行区分。例如梨子.jpg,test.c,工作.doc……

    在Linux系统中也是通过后缀名来区分的吗?
    在这里插入图片描述
    那如何区分文件类型?当我们输入 ll 指令后注意一开始的内容。
    在这里插入图片描述
    往后代表的意思分别为:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    需要注意的是,Linux系统虽然不以文件后缀来区分文件。但Linux下的软件会进行区分。
    在这里插入图片描述
    那么Linux下的文件被分为:

    d:文件夹
    -:普通文件
    l:链接,类似Windows的快捷方式
    b:块设备文件,例如硬盘、光驱
    p:管道文件
    c:字符设备文件,例如显示器
    s:套接字文件

    2.5文件的权限

    我们知道了,ll 命令下会显示文件的详细信息,现在我们便来分析一下各个权限的的字母代表什么意思。

    权限被分为三种:可读(r),可写(w),可执行(x)。而上面的例子,拥有者的权限是rw-,这就代表拥有者对此文件可读、可写但不可执行。所属组的权限是rw-,这就代表所属组对此文件可读、可写但不可执行。其他人的权限为r–,代表其他人对此文件可读、但不可读、不可执行。

    像这样,当某种用户具有某种权限时,文件就依照读、写、执行的顺序记录下来,并以字符的形式显示。如果某一位置没有对应的权限,就以 - 表示。
    在这里插入图片描述
    当然Linux提供了另一种权限表示方法,那就是以八进制的数字表示
    在这里插入图片描述

    2.6文件权限的修改

    当我们创建了一个文件时,文件所分配的权限是默认的。当我们想修改这些权限的时候就必须使用 chmod 指令

    我们使用vim编写一段C代码并生成对应的目标文件:
    在这里插入图片描述
    如果此时我们想要修改拥有者的权限,使它不能被拥有者执行:
    在这里插入图片描述
    在这里插入图片描述
    像上面的操作,我们想要修改某种用户类型的权限时,只需指明是哪一种类型用户和加减操作即可。

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

    那么对于 = ,效果是这样的:
    在这里插入图片描述
    上面我们提到过八进制的权限表示法,我们也可以使用:
    在这里插入图片描述

    注意:
    修改文件的权限只能是拥有者和root账户

    当我们修改拥有者时,那么原拥有者便不能再进行权限的更改。更改拥有者使用的命令为 chown
    在这里插入图片描述

    2.7目录权限的修改

    与文件一样,目录也有权限。
    在这里插入图片描述
    如果想要修改目录的权限,与文件的修改方式一样:
    在这里插入图片描述
    如果我们想要统一的修改目录下的所有文件的权限,我们只需加一个递归即可:
    在这里插入图片描述

    3.文件权限的默认值问题

    我们应该思考一个问题,那就是文件生成的时候,它的权限值为什么这样?而不是那样?
    在这里插入图片描述
    其实在linux中,每一个目录、文件的生成都有一个起始权限。目录的起始权限为777,普通文件的起始权限为666。但是当一个目录生成时,看到的权限应该是drwxrwxrwx才对;当一个普通文件生成时,看到的应该是-rw-rw-rw-才对。但事实并非如此。
    在这里插入图片描述
    实际上,linux有一个权限掩码。我们可以通过 umask 指令查看
    在这里插入图片描述
    在生成目录或文件的时候,起始权限会和掩码进行一个“舍去”,舍去的过程为起始权限值&(~对应的掩码值)

    例如我们生成目录的起始权限值为777,掩码为002。那么起始权限可写成:111 111 111,掩码可写成:000 000 010。计算过程:111 111 111 & (~000 000 010) ,即得到 111 111 101,八进制表示 775,就对应了我们所看到的目录生成的权限值。

    文件的计算与上述一致。

    我们还可以对权限掩码进行修改:
    在这里插入图片描述

    4.粘滞位

    Linux作为多用户的操作系统,不同的用户有自己的家目录。
    在这里插入图片描述
    为了方便多个用户之间数据互传,Linux支持多个用户使用同一个公共目录。我们可以在根目录下,找到一个公共目录:
    在这里插入图片描述
    可以发现,公共目录的权限与普通的目录权限不一样,对other的权限为什么是rwt呢?t又代表什么权限呢?

    对此,我们不妨自己创建一个公共目录,并修改它的权限,让其符合公共目录的定义。此时就产生一个问题,公共目录由谁创建?普通用户A还是普通用户B?都不行,公共目录必须由root来创建
    在这里插入图片描述
    那么对于建立好的public目录来说,它能被拥有者、所属组、其他人读、写、执行。我们切换到普通用户A,在public目录下建立几个文件:
    在这里插入图片描述
    我们再切换到用户B,进入此公共目录:
    在这里插入图片描述

    此时就产生了不合理的地方:用户A创建了几个文件,而用户B因为没有权限对其读和写,就一气之下将用户A的文件给删除了,并且Linux没有制止。所以在建立公共目录时,必须使用粘滞位保证每个用户的文件不被其他用户删除。粘滞位事实上也是一种权限,但是为什么叫粘滞位就跟翻译有关系了。我们添加粘滞位,就可以保证此目录下的文件只能由root账户删除、目录的拥有者删除、文件的拥有者删除
    在这里插入图片描述

    再切换到用户B,再尝试对用户A的文件删除:
    在这里插入图片描述

  • 相关阅读:
    vcenter server (部署较大服务器)
    在AWS上部署一个网站
    I2C 验证中需要注意的问题
    使用turtle绘图:绘制“点“:dot()绘制“标记“:stamp()
    Windows系统无NVIDIA卡安装APEX
    Kafka - 异步/同步发送API
    【部分】CCAA审核员-2022年7月OHSMS职业健康安全体系考试真题
    常用的函数-MySQL
    【气动学】龙格库塔算法飞行器机动飞行质点弹道仿真(侧向和纵向)【含Matlab源码 4586期】
    《TCP IP网络编程》尹圣雨----2.第一章习题
  • 原文地址:https://blog.csdn.net/weixin_59913110/article/details/127105991