初识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权限,我不让它跑,普通的文本文件,都没有办法完成编译,谈什么可执行的权限呢?
然后这里简单看一下就即可,我们不做过多的了解。
感谢阅读!
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。