0


【Linux庖丁解牛】—权限!

1、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

2、Linux中的用户及用户切换

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

*超级用户:可以再linux系统下做任何事情,不受限制 *

*普通用户:在linux下做有限的事情。 *

超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

命令:su [用户名]

功能:切换用户。

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

su可以切换到超级用户,su -也可以切换到超级用户,它们之间的区别是:

su 仅仅只是切换用户,并不会改变当前工作目录,而su -会切换用户并重新登入shell(会改变当前的工作目录)

3、sudo指令

sudo是用来进行指令的短暂提权的!(第一次提权需要输入自己的密码)

比如:安装软件,安装到系统中,需要管理员root权限。其实只安装了一份,允许大家同时使用!

不过,我们新安装的Linux机器使用普通管理员的身份直接使用sudo进行提权一般都会报错 !

Linux中有一个类似于白名单(被信任的人)的东西,只有出现在白名单的用户才能使用sudo进行提权!不然人人都会是root!

只有管理员root将指定用户添加到白名单后,该用户才能进行sudo提权:

4、角色与目标属性

权限的本质是:能或者不能做什么事情!

权限的意义是控制用户的行为,防止错误的发生。权限首先限制的是角色(人),权限要求目标具备对应的属性。(权限=角色+目标属性

Linux中包含三种角色:拥有者,所属组,other。 rw对应的权限是读写,x对应的权限是可执行!

怎么不见other呢?other就是除拥有者,所属组之外的角色。

为什么需要所属组呢?更精细化的身份角色是为了更精细化的权限管理。

因此我们可以这样描述上面的文件权限信息:

该文件的拥有者是root,有读写和执行的权限。所属组是root,有读和执行的权限,但没有写的权限。other有读和执行的权限,但没有写的权限。

5、修改权限

5.1修改文件属性(chmod)

操作演示:

重点部分:

1、用户只能更改自己的文件权限

2、没有对应的权限,系统会拒绝我们的访问

3、确定权限信息的时候,系统会先确定用户是谁?拥有者,所属组,other。用户角色只确定一次,顺序是:拥有者,所属组,other。

4、root不受权限约束。

5、一个文件有可执行权限并不等于该文件可执行。

>其实修改文件属实还有另一种方法

我们会发现在9个权限位中,任何一个权限位都是两态的(即可或不可)。那这就可以用二进制的01序列来表示。如:

5.2修改文件角色(chown/chgrp)

如果我们是普通用户,系统默认不允许我们把文件给别人!

想给别人,必须高权限 !

如果我们想要修改所属组,使用chgrp即可 ,我们也可以使用chown来同时修改拥有者和所属组:

6、rwx对目录意味着什么

如果我想要进入一个目录,我需要什么权限?下面来做一个实验。

通过以上实验,我们会发现,想要进入一个目录,我们必须具备对应的x权限!

对于一个目录,其里面的文件和目录就是它的内容,所以:

如果没有r权限,我们就没有办法查看目录里面的文件。

如果没有w权限,我们就没有办法在目录里面删除或新建文件。

所以,我们新建一个目录,系统默认其都会有rwx权限。

7、Linux中多用户之间的相互“隔离”

通过上面用户目录的权限,我们可以得出结论:任何一个用户都无法进入其他用户的家目录。从而实现了多用户之间的隔离!

8、Linux中的缺省权限

对于普通文件来讲,它的起始权限是666实际是(664)。(默认不带可执行)

对于目录来讲,它的起始权限是777实际是(775)。(默认携带x)

为什么默认权限是我们看到的样子呢?

因为系统默认会存在一个叫权限掩码的概念!

最终权限= 起始权限&(~umask)

umask的目的是希望凡是在umask中出现的权限都不会在最终权限中出现。

为什么要有umask呢?

a、默认权限由os自主决定,无法在创建前进行修改 ——系统可配置,可以灵活满足需求的一种表现。

b、在特殊情况下,配置umask,可以控制文件的默认权限,让我们的代码是可控的!

**umask也是可配置的: **

9、粘滞位

一个文件是否可以被删除,与文件本身无关!与文件所处的目录w权限有关!举个栗子:

上面user2目录的拥有者和所属组都是user2,也就是说user2的目录竟然出现在用户user1里面。并且user1对其没有rwx的所有权限,但是我可以把这个文件删除!

究其原因,也就是在我的目录里面的所有文件我都有删除和新建的权限(即使这个文件我不能读,不能写),因为我对于这个目录有w权限!

下面抛出一个问题:如果两个用户要进行文件级别的写作呢?

比如user1负责进行数据的统计,而user2负责拿到user1的数据统计结果进行数据分析。

通过上面的实验,我们可以知道这个协作的文件不能放在任何一个私人账号。因为多用户之间有隔离,通常情况下,我连你的家目录都进入不了,更不用谈访问你的文件。但是我其实可以通过root或者sudo提权进入你的家目录,但我们通常不考虑这种情况。

所以我们就可以在共享类文件当中进行协作,所有人都可以在这个目录当中新建自己的文件,对不同的角色开放不同的权限!Linux中就有一个自带的这种临时共享文件tmp!

但这势必也会引起一个巨大的问题,因为这个共享目录对所有人的权限都是rwx,那也就意味着所有人都可以随便删除别人的文件(因为上面也实验过,删除一个文件与文件本身无关,与文件所处目录的w权限有关)

此时,我们的需求之间就有了矛盾:我们即想要共享文件,又想要自己新建的文件不被别人删除。

而所有技术的出现都是建立在需求之上的!

为了解决这个不科学的问题,Linux引入了粘滞位的概念:

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

*一、超级管理员删除 *

*二、该目录的所有者删除 *

三、该文件的所有者删除

Linux默认自带的共享文件就可以完美解决以上的问题,所以我们一般不需要自己建立共享目录。

标签: linux

本文转载自: https://blog.csdn.net/2301_80221228/article/details/143823185
版权归原作者 秋风起,再归来~ 所有, 如有侵权,请联系我们删除。

“【Linux庖丁解牛】—权限!”的评论:

还没有评论