linux权限深度解析——探索原理

        前言:本节内容主要讲述的是linux权限相关的内容, linux的权限如果使用root账号是感受不到的, 所以我们要使用普通账号对本节相关内容进行学习,以及一些实验的测试。 然后, 通过linux权限的学习我们可以知道为什么有时候我们对一个文件进行操作的时候总是permission dinied, 以及让我们知道根目录下的文件权限和我们普通用户家目录下的文件的权限的区别。

        ps:本节内容适合正在学习linux并且懂得一些linux指令的友友们观看。

用户分类

//首先认识一下linux下用户的分类:

  • root:超级用户, 管理员
  • 普通用户:也就是我们创建出来的一些用户。 (addusr出来的普通用户)

这两个用户的根本区别就是root用户不受权限的约束, 而普通用户会受到权限的限制。

//su

普通用户能够切换成为root用户, root用户也能够切换为普通用户。

普通用户切换成root用户:

        第一种——su + root密码。 就可以切换成为root用户了。 这个时候如果切换,那么切换后用户所处的位置不变。 

        第二种——su-  + root密码。 同样是切换成root用户。 这个时候如果切换, 那么切换后用户的位置变成root自己的家目录

以上两种情况切换后都可以使用cral + d切换回来。 

root用户切换成普通用户——root用户切换成为普通用户不需要密码, 直接就可以切换。 

普通用户切换成位普通用户

普通用户切换成为普通用户一般一般有两种方式:

        第一种——拥有该普通用户的密码, 那么就可以使用su + 用户 + 用户的密码进行切换身份

        第二种——先切换成root用户(切换方式参考上面), 然后再通过root身份直接切换成指定用户。

注意, 意识身份切换都可以使用cral + d切换回来。 

指令提权:我们在执行指令的时候, 可以不切换成为root用户, 而是只对其中一条指令进行提权, 这个时候就用到了sudu + 指令 + 当前用户的密码。这里可能友友们会有疑问, 为什么对某一条指令进行提权要输入的是自己的密码, 而不是root的密码。 那是因为这个指令提权是有条件的, 那就是只有某个用户被添加到系统的白名单中, 才能够进行指令提权。 而如果没有被添加到白名单中, 提权指令是没有用的 。

什么叫做权限

权限大白话就是一件事情是否允许被你做, 这就是权限。

一个用户的身份分为:拥有者, 所属组, 其他人。

我们看下面这几串命令行:

        这里面, 第一个_mian_yang起始就是代表文件的拥有者, 第二个_mian_yang代表文件的所属组。 就是说, 这些文件的拥有者是_mian_yang, _mian_yang就是拥有者身份;这些文件的所属组是_mian_yang, 如果一个用户所属于_mian_yang这一个小组, 那么他就是所属组身份;而如果一个用户既不是_mian_yang, 也不在_mian_yang这个所属组里面。 那么这个用户就是其他人的身份。 

        那么假如有一个校长叫做张三, 张三要去他自己的校长办公室。 那么请问, 张三能够去校长办公室是因为它是张三呢, 还是因为它是校长呢。 这里显然是因为他是校长, 所以他能够去自己的校长办公室。那么, 对于我们的文件来说, 我们能访问这个文件, 是因为我们是这个用户呢?还是因为我们用户的身份呢? 答案是身份。即权限认证的是身份。 

        第二个问题, 我们都知道手机的功能有很多, 我们可以在上面看视频, 查资料, 打游戏等等。 这些可以看作手机拥有的属性。 但是, 当我们饿了的时候, 我们不能将手机吃掉让我们不再饥饿。 能够作为食物这是手机不具备的属性。 那么我们无论如何, 即便是有最高权限的人, 也不能让手机可以成为食物, 所以。 我们就可以知道第二点, 即权限也和事物的属性有关。 

//身份与用户的关系

        谈完三种权限, 我们结合之前的用户分类, 思考一下权限和用户分类之间的关系。 

        首先, 对于一个普通用户来说, 这个普通用户既可能是一个文件的拥有者, 也可能是一个文件的所属组, 也可能是其他人。 

        对于root用户来说, root用户既可能是一个文件的拥有者, 也可能是一个文件的所属组, 也可能是其他人。 

 那么, 具体是怎么体现的呢?也就是linux是如何判断这个用户的身份的呢? 我们还是看这张图:

        对于绿框框和橘框框, 绿框框是拥有者, 橘框框是所属组。 那么对于任何一个登陆的用户在访问一个文件的时候, 都要先看一下是不是文件的拥有者, 如果不是, 就要看一下是不是文件的所属组。 如果还不是,那么就是其他人other。

//文件的权限

        继续看这张图, 对于这张图来说, 粉色框框里面的就是各个身份的权限。 绿色横杠是拥有者权限, 橙色横杠是所属组权限, 蓝色横杠是其他人权限。  其中, 每个身份都有rwx三个权限, 这三个权限为一组, 并且这三个权限的位置是确定的。第一个位置为读, 第二个位置为写, 第三个位置为为可执行, 这三个位置不会发生乱序, 每一个位置是什么含义都是确定的!并且每一个位置只有是或者否, 具有指定的权限。

        这里思考一下, 为什么要有所属组这个权限? 

假如张三和李四都进入了一家公司进行面试, 最后都成为了一家公司的实习生,然后分别被分到了A组和B组。 并且张三是A组, 李四是B组, 现在这个公司让这两个组同时开发一款软件。 有一天张三写了一串很厉害的代码, 李四就像看看, 但是张三不想让李四看。但是呢, 有一天领导想要看一下张三写的代码, 但是呢, 如果张三将代码的阅读权限放开, 那么李四就能够看到了, 所以所属组就在这个时候起了作用。 让这个领导属于这个所属组,这样,这个程序我能看,领导也能看, 而其他人就看不了了。

权限的修改

能够修改权限的只有两个人, 一个是拥有者, 一个是root。 

方法:chmod u + rwx修改拥有者改的权限, 给拥有者加上权限(r读权限, w写权限, x执行权限)

chmod u-rwx修改拥有者的权限, 给拥有者减去相应的权限

chmod g+rwx修改所属组的权限, 给所属组加上权限

chmod g-rwx修改所属组的权限,, 给所属组加上权限

chmod g-rwx修改其他人的权限,, 给其他人加上权限

chmod g-rwx修改其他人的权限,, 给其他人加上权限

也可以给多个身份权限 chmod u+rwx, g+rwx就是给所属组, 拥有者加上权限, 减去权限相反。

比如说想要一次性给所有身份加上权限, 那就是chmod a+rwx, 减去权限相反。

另外, 除了更改权限之外, 我们还可以更改一个文件的所有者和所属组。 

更改文件所有者:chown 用户 文件 将某个自己的文件给某人, 更改拥有者。

更改文件所属组: chgrp 用户 文件 更改所属组。

        上面两条指令都需要对应用户的同意, 一般有两种方式: 一种是提权, su, 另一种就是线下进行沟通。

        对于权限来说, 我们使用ll看到的每一个位置的权限都是确定的, 所以, 我们可以利用1代表该位置有权限, 0代表该位置没有权限。 所以我们就可以用111, 110表示一个身份的权限, 比如111就是拥有读写, 执行。111就是7, 所以三个身份就可以利用三个八进制位进行表示, 比如777.

        所以, 我们修改权限就可以这样修改了——chmod 777, 意思是给所有身份所有权限。 

        现在, 我们来看这样一个例子:

        现在, 对于_mian_yang这个用户来说, 他的拥有者身份有读权限, 没有写权限;他的所属组身份有读权限, 有写权限。 

        那么这个时候, _mian_yang能对这个文件进行写吗?

        答案是不能, 因为用户在认证身份的时候, 只能认证一个身份, 首先认证拥有者, 然后再认证所属组, 最后再认证其他人。 

umask

为什么我们创建文件出来的时候, 权限是这个样子呢?

首先, 我们需要知道的是, 图中的权限是文件创造出来的最终权限, 他们其实还有一个起始权限——这个起始权限目录文件默认为777, 普通文件默认为666。但是为什么最终创建出来的权限, 目录文件是775, 普通文件是664呢?

这是因为系统中默认有一个umask——权限掩码。 权限掩码就是, 凡是在umask中出现的权限, 不会在最终权限中出现, 这里的计算规则不是默认权限 - 权限掩码, 而是最终权限 = 默认权限 & (~权限掩码)

同时, umask也可以修改, 比如umask 数字, 就是将权限掩码修改为某个数字

目录读写的含义

        目录的读:允许我们查看当前目录中的文件内容

        目录的写:允许我们进行文件的创建, 删除和更改

        目录的可执行: 是否允许我们进入目录。 

粘滞位

        在实际中我们可能有着这种需求: 就是我们想要对数据实现共享, 但是如果我们把目录创建到自己的家目录底下, 别的用户进不去。所以这个目录只能建立到根目录下面, 但是根目录的默认权限是dr-xr-xr-x, 就是三个身份都只能读和可执行, 不能够随意创建目录 。所以就需要使用root账户创建目录。 

        创建好这个文件后, 这个文件我们就可以设置other身份可以读取和写以及执行, 否则就无法共享。 但是如果一个用户在里面创建了文件,因为该目录下有写权限, 就会导致别的人可以随意删除这个文件。所以这个时候为了保护这个文件, 就添加了粘滞位的操作。 这个粘滞位的操作可以保证用户创建的文件只能由用户自己或者root删除。 

        所以, 粘滞位就是是专门给目录设置的一种权限, 一般是共享目录, 大家可以在目录下进行各自的增删查改, 但是只有拥有者和root可以删除这个文件, 其他人不可以。

------------------

以上就是本节的全部内容。

下面是本人的笔记:

  • 126
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 100
    评论
评论 100
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值