Linux篇——权限
在生活中我们知道,一个人能够从事的工作或任务,不是取决于你是谁,而是取决于你的身份是什么,就比如同一个人,如果他是校长,那就可以说放假就放假,如果是学生,就没有这个决定的权力。在Linux中,我们同样也要权限的概念,接下来我们来看看Linux中的权限。
一、Linux下的用户权限与用户转换
Linux下有两种用户:超级用户(root)和普通用户,root用户可以在Linux系统下做任何事,无限制,像我们之前的文章中所演示的操作都是在超级用户下进行的。而普通用户就相对来说有些限制。那如何进行普通用户与超级用户以及不同普通用户之间的转换呢?我们有以下命令:su 用户名(如果想切换到超级用户用户名就是root),然后会让你输入该用户下的密码,输入正确的密码后我们就能切换成功了。但之前我们说过,超级用户做事情无限制,所以当我们是超级用户时想切换到其他普通用户时候,不用输密码,直接切换成功(体现了超级用户的高权限性)。
二、普通用户的命令提权
假设我们先以普通用户的身份登录账号并创建一个目录,展开具体信息发现这个目录确实是由我这个用户创建的,但我现在要是想以root的身份创建一个目录的话,只能先切换到root用户然后再创建,但有点太麻烦了,这里我们有命令的提权,也就是说,我可以在我的普通用户下以root的身份去执行某一条命令。语法为sudo+命令,然后他会让你输入你普通用户的密码,输入后即可执行。tt
这么看来,root这个身份看起来就很鸡肋了,因为只要会用提权,任何普通用户都可以随意以root的身份执行命令,然而,当你刚创建一个普通用户想提权时,发现报错了,是因为在Linux中有一个类似于白名单的目录,只有这里的用户才能提权,你可以向root申请,让他把你加入进去,就可以提权了,这么一看root确实是很权威的。
三、有关于文件的权限
对于一些文件,不同的人对其有不同的权限,比如我们看电影有时需要会员,只有你账号是会员才可以有权观看,在Linux中,对于文件,分三种人,拥有者,所属组,other 。现在我有以下几个目录或文件
展开详细信息后,第一列的root所在的位置显示的是拥有者,第二个列的位置是所属组。other就是既不是拥有者也不是所属组。other因为可以是任何人所以不需要记住,只需要记住拥有者和所属组即可。那为啥还有一个所属组的概念呢?这是为了更细精度的权限管理,比如我的所拥有的文件想对某一个人开放但又不想让other看见,就可以把他放进所属组然后把组的权限放开。
四、文件的属性
有时候并不是说开放了某一权限我们就能干所有事情,比如,我无法在视频网站上打游戏。所以权限不只是取决于你的身份,还取决于事物的属性,也就是权限=人+事物属性。文件的属性我们可以归分为读(r)写(w)执行(x)(还要其他,这三个常见),也就是说,如果这个文件没有读属性,不管你是什么身份都无法实现r的功能。我们观察一下文件的信息。
其中后面的信息我们之前都有提及,来看一下最前面的字符串,我们发现每一个字符串都有十个字符,我们竖着看,第一列的第一个字符表示的是文件的类型,剩下的就是权限属性。剩下的九个字符,每三个为一组,第一组对应着拥有者对这个文件拥有的权限,第二组是所属组,第三组是other。你能对文件进行什么操作 取决于你的身份是否对应了这个权限。如果我们想实现改角色之外的权限,一是改角色,二是修改文件权限的属性。关于后者我们有方法。
首先,如果我们想修改某个文件,那么我们的身份肯定是这个文件的拥有者,语法为 chmod u+r/w/x 文件名称 代表我对该文件的拥有者身份增加了某种权限。(u代表user)去掉权限+编程-就行了,所属组是g,other是o。如果想统一加减权限可以用a+-rwx。
但是,一个程序想执行,第一,他需要有可执行的权限,第二,他本身也是一个可执行程序。二者缺一不可,并不是说给一个文件赋予可执行权限就能执行,因此图中绿色的file1不可执行。此外我们发现一个现象:如果我们把拥有者的权限全撤去,给所属组r和w的权限,但当我们进行写的时候发现无权限(此时的用户和拥有者和所属组是一样的),是因为我们在进行访问时,会对我们进行身份识别然后对应相应的权限,但这个过程只有一次,顺序通常是:拥有者——所属组——other,也就是说刚才那个情况,我被识别为拥有者了也就没有所属组的权限了即使是相同的名字也不会再识别,只有当你不是拥有者的时候才会向下识别。
但对于root用户来说,你所做的操作可以无视权限,也就是说即使文件的什么权限也没有,如果我们是超级用户,仍然可以实现rwx功能。
除了我们可以改变权限外,身份的所属我们也能改变,也就是改变拥有者和所属组的名字(只有当前登录用户是root时才可以修改,或者我们用命令提权sudo)语法为:chown 要修改成的用户名 文件名(修改拥有者),修改所属组就是chgrp。
五、目录的权限
目录的相关权限与文件的大致相同,都有读、写、可执行的权限,但其相同的权限有不同的作用。
对于目录而言,r权限限制着我们能否看到目录内的文件和其他目录,但不妨碍我们正常进入目录中,如果r关闭以后,我们还是能进入目录,只不过无法使用ls指令展开信息了。w权限也不妨碍我们进入目录,只是限制我们能否在目录内新建或删除文件或目录以及更改文件名(这里要与文件的权限区分开,不要认为这个目录没有w权限,目录里的文件就不可以写入东西了,能否写东西取决于该文件的权限而与目录权限没关系),x权限就直接限制我们能否进入当前目录了。
但现在我们想想,我们每当创建一个文件和目录时,发现其默认的权限并不都是开放的,而且文件和目录的默认权限也不一样,这里我们介绍一个新的修改权限方式,我们发现:三个身份的权限都是按照rwx排序的,如果我们令有权限为1,无权限为0,那么每一个身份的权限范围都是000-111(这里为8进制就是0-7),所以我们就可以一次性修改三个身份的权限:chmod abc 文件名(abc为0-7的数字每个位置分别代表不同身份)
我们初始的权限是文件666,目录777,但我们发现创建时的权限并不是这样,是因为权限掩码的存在,查看权限掩码的指令是umask(此时这里显示的是8进制)(也可以修改),
那么最终权限就是初始权限&(~权限掩码)(按位取反和按位与),这里需要把所有八进制数全改成二进制再进行运算。
六、粘滞位
我们发现,当我们以普通用户新建一个目录时,在目录里我们以root的身份新建一个文件,此时对于普通用户,我们只有r的权限不能写,但是我们可以删除,这里不要理解成因为你是root的文件我就不能删你,是因为这是你在我的目录里创建文件,我是拥有者,有最大的权力。
而且在实际中,我们每个人的账号都不想公开,也不想随意被别人篡改数据,因此我们每个人的账号目录都是只有拥有者有rwx权限,其他两个身份的权限全部关闭。
为了引进标题,我们假设一种情况,假设现在有我和另一位普通用户,我们想创建一个共享的目录或文件,可以实现数据共享,因为账号目录的私密性,所以就不能在我们两个的目录里创建,只能在根目录下,但是,如果现在有一个other,他也在根目录下,他发现我们两个在共享该文件但他不被共享,他确实没有权利写入,但他可以删除,这样我们的努力就都白费了,为了避免这种情况,我们有粘滞位。
粘滞位也算是一个权限位,语法为chmod o+t 文件名 (需要以root身份执行或提权)此时other的权限又rwx变成了rwt,此时这个文件就无法删除了(除非文件或目录拥有者是自己或者是root)。