初识Linux · 权限

_lazy. 2024-10-18 17:37:01 阅读 50

目录

前言:

1 预备知识

2 权限

2.1 文件的基本权限

2.2 修改权限的第一种做法

2.3 修改权限的第二种做法

2.4 权限的对比

2.5 文件类型


前言:

继上文我们将常用的指令介绍的七七八八了,本文着重探索Linux文件中的权限部分,上文介绍的许多指令都是和文件挂钩的,并且有一句话说得好,Linux中一切皆文件,所以我们本文,先介绍完文件权限的预备知识,再着重介绍一下文件的权限等问题。


1 预备知识

我们输入了指令之后,有没有好奇过指令是如何运转的?难道是我们输入了指令,操作系统知道了,那么它就去操作了?显然是不现实的。

上面的叫做命令行解释器,叫做外壳程序,还有外壳程序是图形化界面。

那么什么是外壳程序呢?可以理解为shell程序,就是我们输入的一个一个的指令,但是为什么不能直接操作OS呢?

因为用户不善于直接和OS交互,并且我们要对OS做一些越界的处理,那OS会同意吗?当然不会,毕竟要保护OS的安全,所以外壳程序在一定程度上也保护了OS的安全。

这是不直接与OS交互的两个点。

那么如果申请了某种越界的行为,OS可不能坏了自己的口碑啊,所以会创建子进程,去实现这个error指令,然后报错了就是子进程的问题,反正不是操作系统的问题。

所以现在我们就知道了,OS和用户之间隔了一层外壳程序,俗称Shell,那么现在就可以引入权限的概念,当我们对文件执行了部分操作,但是权限不够,外壳程序就会驳回该指令,简称报错。


2 权限

我们了解Linux的权限的时候,我们首先思考,什么是权限呢?

比如平常的小区,要刷卡才能进吧,是因为你是张三还是李四吗?实际是因为你是这里的业主。平常的公司打卡,是因为你是你自己吗?是因为你是这里的员工。

所以权限,和你是不是你自己没有关系,和你的身份关联是比较大的。

那么什么是权限的本质呢?

我们知道权限的使用和用户的身份有关系,那么为什么凭借这个身份就可以实现某种操作呢?因为该事物具有某种属性,比如门禁,具有你有卡,我就开门的属性,以此看来,我们不妨将权限简单的总结一下:

权限 = 用户的身份 + 事物的属性。

现在引入Linux的概念。

在Linux中用户可以简单分为root用户和普通用户

root用户一般具有的权限是超级管理员,普通用户不言而喻。现在我们学一个简单的操作,如何从root 用户转为普通用户?很简单,用到指令su即可,添加普通用户使用adduser就可以了:

su + 用户名转为普通用户,root直接转过去就不用输入普通用户的密码,su转为root用户,此时输入root的密码即可。

好了,现在以普通用户来看一下文件

我们现在已经知道的是new.txt是文件名,Aug 20 17:00是文件的创建时间或者是最近的修改时间,0是文件内容的大小,-代表这是普通文件,d代表这是目录,那么前面两个lazy 和 _lazy是啥呢?那一串rw-又是啥呢?

2.1 文件的基本权限

我们先来了解rwx,我们知道,文件一般具有的权限是读文件,r,写文件,w,还有一个是可执行权限,x

所以rw-代表可以读写,但是没有可执行权限。那有一个就可以了,为什么有多个呢?

我们现在引入,拥有者,所属组,other的概念

拥有者很好理解,是谁创建的这个目录或者文件,那么该文件就是谁的,那么什么是所属组呢?

在大公司里面,一个作业往往交给许多人做,那么他们天然就是一个组,这是所属组,other就很好理解了,other就是其他人嘛,除了拥有者和所属组的其他人都是other。

那么这下就对应了,rw-rw-r--分别对应拥有者,所属组,other,这是他们分别对应的权限,分别对该文件的权限。

我们基于权限有了简单的理解,那么是否可以尝试修改一下权限呢?

当然是可以的。

2.2 修改权限的第一种做法

修改权限使用到的指令是chmod,拥有者是u,所属组是group,other是o,为了方便观察,我们这里先将拥有者改一下即可:

可以单用,也可以连着用,但是不免会觉得有些麻烦,此时我们不妨将权限存在看为1,不存在看为0,所以rw-rw-r--对应的数字就是110110100,转换为八进制就是664,所以我们想要修改,也可以直接:

这是修改权限的第一套做法。我们可以通过u+对应的权限来修改user的权限,也可以通过数字来修改。看个人喜好,都是不错的选择。

当然了,还有一个十分牛逼的指令:

a的操作是all,全部的意思。 

2.3 修改权限的第二种做法

那么修改权限的第二种做法呢就比较离奇了,也不能这么说,可以说这种做法是一种比较残忍的做法,以该文件举例:

目前文件权限是664,那么other,比如lazy的权限是r--,我希望lazy的权限变成rw-,但是同时又不希望修改其他other的权限,那怎么办呢?那不简单吗!我们直接让lazy变成user或group不就可以了吗:

但是呢,我们会发现是不被允许的,因为权限不够,所以我们需要短暂提权:

这里使用了sudo,表示执行这个指令的时候,我们就是root,但是实际身份还是_lazy,这就是短暂提权。这里先推荐su到root再操作,sudo存在白名单的说法,在vim会有介绍。

这里我们就可以发现lazy变成了user了,同样的,其他都是可以修改的,但是如果是普通用户都需要简单提权。

也可以同时修改两个,那么修改group是chgrp.

欸?为什么没有修改other的呢?这是因为修改了user 和 group就间接修改了other,所以不需要再次修改了。

现在我们就掌握了权限的基本理解和权限的基本修改。

2.4 权限的对比

我们既然可以修改相关的权限,那么就应该了解权限如果存在或者是如果不存在造成的影响是什么?

可以看到所有权限被禁止后,我们作为拥有者来说,甚至不能打印出这个文件的任何内容,那么我们从权限对比的角度,首先抛出一个问题:

我们要进入到一个目录,我们应该具备什么权限?

我们不妨一个一个的尝试,首先是r:

发现我们可以成功进入到该目录,但是呢,我们ls不了该目录了?这是因为文件 = 文件属性 + 文件内容,我们禁止了r,read,所以我们读不了文件的内容。

再是w:

发现可以成功进入到Linux的目录里面。

但是呢,新建文件是不被允许的,因为write属性被禁止了。

那么可以在里面删除文件,修改文件吗?

现在Linux文件夹中有一个new.txt文件。

可以发现删除文件是不被允许的,因为不能写。

同理,权限没有w了之后:

不能移动位置不能重命名,这就是w的权限

那么还有一个x了,不用想,x的权限就是判断能不能进入到该目录:

好了,权限的基本对比我们了解部分了,现在你应该好奇,为什么文件或者目录创建的时候默认是664和775?而不是其他权限,这是因为有权限掩码的存在。

默认的权限掩码是0002,第一个0我们先不管,原本默认的文件应该是666,目录应该是777,但是掩码存在的权限新建的目录文件不能有,所以需要减去掩码,但是这里不是真正的减法,这是是和掩码取反之后与了一下,得:

最终权限 = 默认权限 & (~umask)。

为了过滤权限而存在掩码。

我们反转到目录的w权限那里去,我们现在引入一种情况,你和root吵起来了,root一气之下给你创建的文件删了,那你气不过,想删除root创建的文件,可以吗?

来我们尝试一下:

啊?居然删除了?是不是有点不可置信,这可是root创建的文件啊,我们一介草民,怎么能给人删除了呢?于是你觉得有些蹊跷,决定让两个普通账户试试:

当我们在根目录创建的时候,这么说吧,只要权限不设置,来条狗都给你删除咯。

所以我们需要粘滞位,当我们需要两个人或者多个人共享目录的时候,并且不希望被人修改,我们应该加上粘滞位,-t:

这就删除不了了。

2.5 文件类型

我们写了一个程序,打印了Hello world 。

Linux中一切皆文件,是如何识别文件的呢?Windows是通过后缀识别的,Linux可不是,不信你看:

按照我们在Windows的惯性,改了文件后缀,那么可执行程序一定是跑不了了,但是这里不一样,这里无论怎么改后缀,都是可以跑的。

但是呢,Linux是不看文件后缀,可gcc要看啊:

不是所有文件gcc都可以编译的,那么我们可以引入话题了:

可执行权限和可执行程序一样吗?

当然是不一样的,在我完成编译程序之后,这个程序可以跑,但是我取消它的x权限,我不让它跑,普通的文本文件,都没有办法完成编译,谈什么可执行的权限呢?

然后这里简单看一下就即可,我们不做过多的了解。


感谢阅读!



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。