Linux权限
Linux权限
权限
1.Linux下用户的分类
Linux下用户分类分为两种:普通用户(adduser新建的用户)、超级管理员(root,如windows下管理员级别的用户身份)
那么用什么来划分这两者?
由权限来划分,root是不受权限的限制,普通用户是受权限的限制
root用户的命令行提示符是“#”
普通用户的是
这两个身份是如何切换的?
普通用户变成root用户:su指令,将普通用户变成root账号
并且这里它会让你输入密码,是输入的是root账号的密码
但是虽然完成了账号的切换,此时他的路径还是处于普通用户阶段
如果你想从root账号下退出来,按热键ctrl + d
或者输入exit
退回成了普通用户
还有一种切换方式su -
它是直接以root身份完成重新登录,它当前的路径也发生了改变变成root用户了,su只是完成身份切换,而退出来也是ctrl+d
如果我现在是root用户,那么我想变成它家目录下的任何一个普通用户,直接su 跟用户名,就可以切换,不用输入密码
root账号下,想变成任意一人,就可以改变,他不受权限的约束。
而普通用户想变成另一个普通用户是需要输入你要变成的那个用户的密码的。
还有有时候如果只是想对某条指令它要以root身份执行,就是将它提权,sudo 后面跟指令,将其提权为root用户的身份
那么在未来一段时间内,这条指令都是以root的权限来被执行,他这里输入的是普通用户的密码,你自己要对 指令提权,不输入root的密码,转而来输入自己的密码,但是会发现无法使用sudo,这里后面再说。目前adduser新建的用户,他不能执行sudo,就相当于一个新人刚报道,然后公司也不可能将重大项目交给他一样,除非是十分信任他,然后将其交给他。
2.什么叫权限
刚刚也提到了权限,那么权限是什么?举一个生活栗子,如腾讯视频这个周星期三的动漫镖人更新了,但是由于我没有vip,就没有权限观看(无权限),但是当我使自己成为vip,那么我就有权限观看了,这就是有权限。权限其实就是看你是否有对应的权限,是否能办相应的事,如果没有权限就不能执行,有权限就可以执行,看是否允许你做。
而权限它认证的是身份,(权限和“人”有关)。并且权限也和事物本身的“属性”有关,比如你想在书纸上玩网游,明显是玩不了的,它事物没有这个属性。
所以权限定和两方面有关,权限:“人”+ “属性”
来看文件属性,一个文件被创建出来它会有基本属性:可读,可写
,并且有些文件可执行
因为事物的权限也受其属性的影响,来查看文件属性,我先创建一个目录文件,和普通文件
再来看看这两个文件的属性
先来看前面十个字符
它的第一列代表文件类型,windows下以文件名后缀来区分文件类型,而Linux则不是
Linux它看文件类型是看第一列字符
d:目录文件 --目录
-:普通文件 --文本、可执行程序、库基本都属于普通文件
b:块设备文件 --磁盘文件
c:字符设备文件 --键盘、显示器文件等
p:管道设备文件 但是一般用到的就是前两个
ls /dev/
查看所有文件
ll /dev/vda
列出vda这个文件的所有属性,
可以发现它是以b开头的,它是块设备文件
字符设备文件,dev/tty,它以c为前缀开头
以mkfifo创建的文件,它以p为开头,它就是管道文件
管道文件用来进行通信的,Linux下以第一个字符来区分它的文件类型。
这其中第一个字符代表类型,那么剩下9个字符中的的rwx -等字符又代表什么?
因为权限跟事物的属性有关,而这里谈及的是文件和目录,文件天然就有读写功能,
这里r:代表可读,w:代表可写,x:代表可执行,那么其中-,则代表对应位置可以允许的功能没有,就是对应的权限位置没有权限
。而权限不仅仅看的是它的属性,还有它的身份,也就是涉及到这个人,那么在Linux下它的"人",又是如何定义的?其实看的是它的身份,不只是局限于某个人,Linux对权限身份进行了划分,划分为三种身份:拥有者,所属组,其它人
拥有者:代表这个文件是谁的
所属组:一个组内的人,它可以共享某些资源。组内人能用,组外人不能用。
其它人:代表没有拥有这个文件的
那么这里这三个身份和用户分类有何关系?
其实每一个人都可以扮演每一个角色身份,它也只是人和具体身份的对应。
那么来看看以下文件的拥有者,所属组,其它人
既不是拥有者也不是所属组的就是其它人了,而在前面列出的10个字符除了第一个字符代表文件类型,剩下的9个字符代表权限属性每三个字符代表一个身份对应的权限,三个字符,每个字符对应一个权限位
,并且完整的是rwx,每个字符所在位置是固定的,它们相应位置可以不没有权限,但是不存在乱序的情况。
如果对应的位置是-,那么代表这个位置不具有这个权限。
3.Linux下没有权限是什么样的
我这里以三个不同身份演示
先右击,
以这样方式实现的身份转换才可以才可以有转换身份前的内容,如果直接登录当前用户,那么这时这个用户啥也没有再切换啥也不能做,然后再以三个用户(lsy、root、zzm)的身份来演示权限
拥有者有读写权限很正常,zzm是其他人,它的权限只有读权限,其它都没有,所有在对这个文件写入时,才会报没有权限,
但是root相对于这个文件也是其他人,它为何能读,也能写,说明啊,root这个用户是不受权限约束的,制定规则的人不受规则的约束。
Linux下没有权限就不能去执行对应的操作,但是root用户除外。
4.权限的修改问题
权限和“人”与“属性”有关,所有权限修改可以改属性,也可以改它的人。
改属性
改属性是chmod指令
更改权限的人一般是两种人,拥有者,root用户,当有一天想更改谁谁谁的权限,改变权限指令为chmod,它后面跟的是身份,然后再是要操作的文件
chmod u/g/o+/- 文件名
,u:拥有者,g:所属组,o:其它人
如我是拥有者,我想给给所有人的权限都去掉,u-rwx,g-rwx,o-rwx
,
这个文件它的拥有者所属组,其它人它们都没有了读写执行的权限
要达到对所有人进行权限修改还可以chmod a+/- test.txt
chmod指令可以对拥有者所属者其他人的权限进行修改。
还有一种方式是以八进制的方式来进行权限的设定
如我要给拥有者加上读权限
可以直接chmod 后面跟八进制数字,三个数字每个数字代表一个身份的权限
改角色
更改人的话可以更改拥有者,所属组指令
更改拥有者chown
把文件给zzm这个用户,但是会发现执行错误,因为你在给别人时,不可能一股脑就给别人把,还要别人是否同意,你才能给别人啊。别人同意了你才能给,这种需要询问
还有一种是直接强势的给
sudo,对这个指令进行提权,由于当前普通用户并没有添加到信任白名单,而sudo也是将这条指令以root的身份来执行,我这里直接切到root下
这个文件对应的拥有者就属于zzm了,更改之后身份发生改变了
更改所属组chgrp
更改照样要征得别人同意才给,他同样有两中给的方式
chgrp + 给的用户 + 文件名
强势给,提权,转到root用户下
给完之后test.txt这个文件就不是lsy的了,它再想执行拥有者和所属组的权限无疑实在做梦咯,此时我后悔了,要将其要回来,chown lsy:lsy test.txt
它可以将其拥有者和所属组一起改变
但是啊,有一个老6,无论怎么改变权限,它都不受影响,他就是root.
5.其它问题
当一个文件它的拥有者和所属组是同一个人时,拥有者没有写权限,而所属组有写权限,那么此时我对这个文件进行写入,写东西写不进去
这是因为在选择权限认证的时候只能选择一个角色进行认证!意思就是我认证的是拥有者那么我只去看拥有者的权限,其它身份的权限直接不去看。当拥有两个身份时,它只认证一个身份的权限
当创建两个普通文件和两个目录时
看到的普通文件它们对应的权限转成八进制为何是664?目录为何是775?
在Linux下默认给普通文件的起始权限其实是666,默认给目录文件的其实权限其实是777
.
那为何和看到的不同?
因为在Linux中存在umask
它设定的权限是002,最开始那个0不算进去
这是啥,它是一个权限掩码,它的意思是:
凡是在umask中出现过 的权限,不会在最终的文件权限中出现!
它其实是将文件的其实权限拉去与他一比,然后凡是在umsk中出现过的都不会在最终的文件中出现。
那它的最终权限这是如何算的
最终权限 = 起始权限&(~umask)
umask会限制一个文件的最终权限。
目录文件的读写执行代表什么?
读权限
对应dir1这个目录,我要进入这个目录,我需要的权限是什么?
我为什么能进入这个dir1目录?
是因为有读权限?
那么我修改它的读权限
但是发现还是可以进去,说明与读权限无关,那么读权限影响的是什么?
我进入dir1之后,想看一下,它告诉我没有这个权限,但是我还可以在这个路径下创建文件。所有读权限影响的是读目录内的内容。
写权限
当我对这个目录改变其写权限时,他还是可以进入,只是不能在这个目录下写内容了
读权限,它是约束的目录下的写功能,它不仅仅约束写创建,它约束一切操作。
所有只剩下执行权限了。所有想进入一个目录,是与可执行权限有关。
所有总结一波:对于目录文件
r:是否允许我们查看指定目录下的文件内容
w:是否允许我们在当前目录下进行创建,更改,删除
x:是否允许我们进入对应的目录
粘滞位
当创建一个用户时,都会在/home目录下创建用户名,/home/***是每个用户的家目录,并且它的拥有者和所属组都是自己,而且还只给拥有者读写执行权限
那么如果当我在家目录下建一个文件其他人根本不可能读到或者看到这个文件。
普通用户自己的家目录权限是700,在自己家目录下创建的文件,别人是看不到的。 但是有时候需要,多个用户需要进行文件数据的共享。
所有此时这个共享文件不能建立在任何一个用户的家目录下,要将其根目录下建立。
在根目录下建立的,每一个用户都是以其他人的身份访问
为shared这个目录其他人提权,使其他人可以写,那么此时lsy用户进入到shared目录下,创建了一个普通文件
此时zzm这个用户也进入到了这个shared目录下,他看见有一个文件,也想向里面写东西
但是发现写不了
因为此时这个文件的权限是lsy的了,zzm很生气,他想到了一个一损具损的办法,删掉这个文件。
这样竟然删掉了,这样很危险哈,我们共享的啊,你一气之下结果删了,这可不合理啊!
在这共享目录下,一个文件能否被删除,并不由这文件本身决定,而是由这个文件所处的目录决定
。由于这个共享目录对于其他人有写权限,其实每一个人都可以在这个目录下进行操作。可以去掉这个目录的写权限了,但是这样所有人都不可以在这个目录下创建文件,那么也就起不到共享的作用了!
所有直接去掉写权限是行不通的,我要实现所有人都可以在这个目录下创建文件,写东西,但是就是不能删除文件不属于自己的文件删不了。此时也就需要引入新的一个权限位:粘滞位
它的x位变成了t,他也是一种可执行权限,只是较为特殊,用户可以在当前目录下新建文件,但是不能删除不属于自己的文件。
还是刚才那种情况
此时zzm要删除test.txt这个文件。
但是此时它却删不了了。因为粘滞位
粘滞位
给目录设置,一般是共享目录,各个用户可以在目录下进行自己文件的增删查改,但是除了文件拥有者和root外其它人是删不了这个文件的,但是root用户就算是其他人,他也还是不受权限约束,t它是一种特殊的x权限!
🆗权限到这里了!
更多推荐
所有评论(0)