Linux权限

小小权限我直接拿下!!!

什么是权限呀?

就比如,我想拿uu加速某个游戏,我就得买会员(vip),这是权限

再比如,我想进小邮的校门,有门禁,需要刷脸(它什么时候认识我一下),这也是权限

 下个定义:权限是通过一定的条件,拦住一部分人,给另一部分人权利来访问某种资源

权限的本质

权限和人(角色)有关,不能因为我叫爱因斯坦就让我进小邮的门,和事物的属性有关(不要尝试在爱奇艺上刷题,也不要尝试在力扣上看电影)

Linux用户

Linux用户分两种:root用户(超级管理员,不受权限约束)和普通用户

他们之间可以进行角色的切换

从普通用户变成root

su

然后输入root用户的密码即可 

丝滑小连招:

su -也可以变成root账户,区别在于,su是身份的切换(路径不切换),su -是进行root账户的重新登录(路径变为根目录) 

那root用户怎么变成普通用户啊?

无脑Ctrl+D

或者直接su+用户名

 这个时候就不用输密码验证了(看看root账户权限多大)

 权限永远是限制普通人的,我可是超级管理员

如果不想直接变成root,只是想以root身份执行某个工作怎么办?

那就可以在前面加上一个sudo,比如想以root账户的身份创建一个文件,那就直接:

sudo touch root.txt

然后会弹出提示让你输入,密码(所在用户的密码哦,不是root的) 

这一系列操作完成后就成功普通用户假root用户威创建文件了,这个操作叫指令提权

但是有个小问题啊,我普通用户以root账户执行操作,为什么要输我自己的密码呢?

首先,默认云服务器肯定是不可以进行指令提权的,但是话又说回来了,权限的本质是进行管控,如果每个人都素质高到不会乱扔垃圾,肯定也就不需要不要随地乱扔垃圾的标语了,虽然不能做到每个人都素质高,但是肯定有一部分人是素质很高的,我们把这部分高素质用户加入白名单,使得他们可以执行一些类似指令提权的操作,且不会破坏平衡

Linux中支持简单的白名单的策略,所以输入用户自己的密码是在查询用户是否在root账户设置的白名单中的过程(root账户能知道谁用过sudo)

Linux角色

后面是文件名不用多说,前面是文件修改时间也已经墨迹过了

主要想说的是,在Linux系统下,总共有三个角色:拥有者、所属组、other

第一个switch(我),就是文件拥有者,第二个switch(还是我)是文件所属组(默认情况下自成一组,很多人的话就共同属于哪个组啦,什么关东组、吴彦组),那。。。other怎么回事?

other是在匹配完拥有者和所属组之后发现这文件超脱三界之外的情况,就是other(不匹配所属组和拥有者)

下面播报一则故事简讯:首先,很久很久以前,有一个程序猿名为墨墨酱,有一个与墨墨酱仅仅有点头之交的朋友燃燃子(她们同属一家公司,属于不同小组),那么请大家猜猜,她们不同的小组有没有可能在干相同的工作呢?

唔,其实一般来说,这种情况小公司不太可能,大公司就可能出现了(也叫内部赛马)

比如墨墨酱和燃燃子所在小组都在开发顺火暖小游戏,哪个组做得好就抢先上市哪个组的

假设有家公司叫一栗集团墨墨酱燃燃子都在这家公司从事程序猿的工作,墨墨酱隶属尹墨组,燃燃子隶属燃气组,但是一栗集团很穷(有传闻说是因为董事长玩小丑牌大败欠债),但是一栗集团又喜欢安排两个组竞争,现在已知尹墨组和燃气组各要招揽一名实习生,尹墨组招收了steam大学毕业的实习生顺火暖暖,燃气组招收了epic大学毕业的实习生小小算命不,由于经费不足,所以两个组只有一台Linux服务器,两个组都在这一台机器上进行开发,一组一个目录,已知顺火暖暖在他们组所在路径下写了一串代码,文件名test.c,墨墨酱作为组长例行查岗时,就问暖暖:你这个项目写咋样了(严肃脸),暖暖:报告墨总督,我的代码已经写完,请检阅。墨墨酱:Okei了,我给你看看你这代码有没有问题,没有问题的话你这实习期一过就转正跟着我干吧,现在我们假设Linux中没有所属组的概念(也就是说暖暖写出的代码默认只有暖暖可以看),由于假设条件:没有所属组,所以暖暖在开权限的时候,只能默认开所有人(但是别忘记,小小算命不也是“所有人中的一员啊!!”),也就是说,不仅墨墨酱可以看暖暖的代码,就连公司其他组的实习生算命不也可以看暖暖的代码,虽然暖暖写的代码不怎么样,但这正是不想让算命不看到的原因啊!暖暖(心机暖)想,墨墨酱看也就算了,怎么算命也能看自己的代码呀!!!但是这毕竟只是假设,Linux中有所属组概念,所以暖暖可以实现只让墨墨酱检阅不让算命背刺的操作。

总结:Linux具有组的概念是为了方便在多人协作的时候更好的进行权限管理

root,普通用户:人

拥有者,所属组,other:角色

前面这个显示的是文件类型(-:普通文件  d:目录文件)

文件的属性权限

文件的属性权限一般有三种,分别是:r(读),w(写),x(可执行权限)

对应权限三三为一组,分别对应着:拥有者、所属组,other

权限=用户角色(具体人)+文件权限属性

拥有者:rwx(第一个字符决定是否具有读权限---是则r否则-、第二个字符决定是否具有写权限---是则w否则-、第三个字符决定是否具有可执行权限---是则x否则-)

快速修改权限

说了这么多,怎样快速修改权限呢?

首先,我们应该明确:谁有资格修改权限

无非就两种人:文件拥有者,root

去掉拥有者r权限的指令:

chmod u-r test.txt

 

给拥有者加上r权限的指令:

chmod u+r test.txt

 

 相应的,更改所属组权限就是:

chmod g-r text.txt

 更改other权限就是:

chmod o-r test.txt

可以采用排列组合的方式去掉或增加一个人的单个或多个权限

想同时操作多个人的话就可以:

chmod u-w,g-w test.txt

想操作所有人(all)就:

chmod a-r test.txt

可能我们对于权限的认知还是没有那么清晰 

下面看看普通用户的权限限制吧:

可以看到,如果给拥有者不开权限的话,即使是拥有者,也没办法对自己的文件进行读写

可是root就不信邪,嘿,你不能读写不代表我不能读写,让我root瞅瞅怎么个事

 

可以看到root确实游离于三界之外了。。。 

他想读就读,想写就写。。。

root不受权限约束,权限存在是为了保护普通用户的文件安全性

那么假设我即使拥有者,也是所属组,我把我是拥有者对应的那部分权限去掉,那我还能不能对文件进行某些操作呢?

可以看到,不太行。。。。

因为Linux系统对用户进行的身份识别只有一次,接下来给出证明

 假设文件拥有者和所属组不在一起,当匹配拥有者不成功时,就会继续匹配所属组

权限=用户角色(具体人)+文件权限属性

如果把文件的拥有者改掉,是不是相当于把该文件给了别人,在现实生活中,把某样东西给别人是不是需要征得别人的同意呢?(别杠,给你五百万你肯定要,给你黑锅敢不敢背),所以在Linux系统中,你虽然是文件的拥有者,但是你把文件给别人也需要征求下别人的意见,,,但是这又很扯了,我给他东西还要问他的意见,给他打招呼,未免有点强人所难,介于这个考虑,在进行这个操作的时候要进行短暂的指令提权(sudo),把文件给别人强制给

sudo chown xxx test.txt
sudo chgrp xxx test.txt

想要同时更改所有者和所属组就可以

chown name1:name2 filename

 

 我用的这个是root账号,就没加sudo

有个小问题:怎么找不到修改other的指令?

因为。。。不需要呀

只要把拥有者和所属组改了,other不就变了吗(摊手)

因为某种权限只可能有有无两种状态,所以是不是可以拿二进制表示?

对应上文件属性的三种权限(r(读),w(写),x(可执行权限)),就可以这样

用二进制表示:110、111、100...

这个二进制数字转为八进制(转成十进制最大是7,即111)就是另一种表示方法,举个例子:

chmod 000 test.txt    //三种角色的所有权限都被取消
chmod 777 test.txt    //三种角色的所有权限都被赋予

还可以:

chmod 660 test.txt    //赋予拥有者和所属组文件的读写权限

 

 文件类型

 要说Linux下的文件类型,不如先看看Windows下的文件类型:Windows是如何区分文件类型的?

是用后缀名对吧

那Linux怎么区分文件类型呢?
首先,它和Windows不同,不通过后缀区分文件类型(没有说Linux不用后缀的意思)(也没有说Windows用后缀不好的意思)(叠甲)

Linux通过第一个属性列区分:

- :普通文件:文本文件、可执行程序、普通文件、库

d:目录文件

 b:块设备文件

c:字符设备文件

p:管道文件

I:链接文件

 块设备文件是什么,我们知道,在Linux设计理念中,一切皆文件,所以一些相关硬件的东西也是可以在目录里找到的,其中,块设备文件最典型的代表就是磁盘

ls /dev/

 

字符设备文件,首先,一个小问题,我们在打印的时候:

printf("%d",123);

这是在打印数字123还是字符‘1’、‘2’、‘3’呢?

 答案当然是:字符啦!!!(是ASCII码对应的‘1’‘2’‘3’字符哦),所以显示器也被叫做字符设备文件,键盘也是

那么我们显示器文件放在哪呢?

放在这里:

ls /dev/pts -l

呐,你看,这些文件都是c开头 

每一个终端其实就相当于一个显示器文件哦,多一个终端就会多一个文件:

可以通过访问文件的方式控制终端

 管道文件又是什么呢?

首先,管道文件以p开头

mkfifo pipe

 管道文件用于进行进程间通信

 

懂了吧

 那链接文件又是啥捏?

请先听我讲个故事:

已知墨墨酱是一位大一新生,由于墨墨酱的家长限制墨墨酱电子产品的使用,所以墨墨酱在上大学之前对电脑不太熟悉,这就导致墨墨酱虽然是00后,但却是个实打实的互联网土著,上大学后,墨墨酱有天在电脑上下载了个steam,过段时间墨墨酱不想再steam启动了,她要把steam给删掉,删除怎么删呢?把软件放到回收站对吧?墨墨酱如此得进行着删除的操作,结果墨墨酱发现她电脑的空间还是越来越少,直到墨墨酱上大二,她才发现她删除的一直都是快捷方式,此时墨墨酱对自己一直如此迷糊的伤心已经被对Windows系统对卸载的复杂设计的气愤给冲淡了,你就不能让我直接把它拖到回收站卸载吗???非要让我删个快捷方式再被嘲笑一下???

首先先来介绍一下快捷方式:

右键单击桌面上的快捷方式--->显示更多选项--->属性 

其中,在目标栏里,我们可以看到,它的路径是这样的:

C:\Users\Lenovo\AppData\Local\Google\Chrome\Application\chrome.exe

 所以我们打开软件打开的是路径下的可执行程序,但是你看,路径多复杂,小白怎么活?

很显然,Windows工程师也这样想,所以他决定别让用户按照这么复杂的流程去执行.exe文件了,这种方式太low太蠢了,所以Windows工程师就设计了一个小图标,这个小图标最终指向可执行程序,而快捷方式也可以被理解成Windows下的链接文件

那Linux有么?肯定也有哇

那Linux下的快捷方式是怎么个事呢?

ln -s /root/ice/my.exe momo.link

成功建立了一个链接文件: 

 以后想要执行就直接:

./momo.link

 看看系统下的链接文件吧:

ls /usr/lib64/ -l

解释一小下:lib64包含系统中的很多库,我们可以看到,这些文件是以l开头的链接文件

我们已知:Linux系统不以文件后缀作为区分文件的类型

然后我灵机一动想进行下面的操作:

mv test.c TAT.txt
gcc TAT.txt

却发现失败了,为什么?

不是说好Linux不以文件后缀作为区分文件的类型么?

但是别偷换概念啊,Linux系统不需要,不代表gcc不需要啊!!

Linux不区分文件类型,但是Linux上面的工具(gcc)可能区分!!

我们在Linux对于文件后缀的态度:可以用呀,你自己也方便不是么

可执行权限

已经理解了读写权限(应该),那么可执行权限又是什么鬼?

名表其意,有可执行权限证明可以执行这个文件

那Linux中能不能执行一个文件取决于可执行权限吗?

举个栗子:

chmod u+r code.c

我们可以看到,code.c绿了对吧?
 

但是执行一下:哎?

怎么回事捏?

 报错了(里面代码没错)

 看来我们需要重新认识一下可执行权限和可执行了

首先文件要执行首先文件需要是一个可执行文件,是可执行文件,有可执行权限才能执行

能执行=具有可执行权限+本身为可执行文件

也就是说,重点不在于可执行,在于权限,具体能否执行还要看是不是一个可执行文件

同样的,是可执行文件但没有可执行权限也不能执行:

 只有都具备才能执行哦:

 普通文件说完了,下面来讲讲目录权限

 首先几个问题:目录是文件吗?有属性吗?有没有文件名?有没有最近修改时间?有没有文件大小?有没有拥有者所属组?有没有权限?有没有类型?

首先,目录是文件,上面的普通文件具有的性质它都有

那我进入目录需要什么权限?

经过实践认证:进入目录需要x权限:

那么r权限可以干什么呢?

r权限决定用户能否查看指定目录内的文件信息,没有就查看不了咯:

w权限决定用户是否能在指定的目录下新建、修改、删除

 还有问题吗?

有!!!文件=内容+属性

目录的内容是什么啊?

目录保存的是该目录里所有文件的内容详情

Linux创建文件的时候,为什么好像有默认权限?又为什么有着那样的目录权限?

可以看到默认的普通文件和目录在新建的时候权限是不一样的

 目录文件天生多了一个x(有迹可循,目录创建出来本身就是要被进入的)

已知:

创建的普通文件,起始权限是:0666,去掉x的

创建的目录文件,起始权限是:0777,包含x的

 Linux存在权限的默认掩码umask层

 它的作用是对最终权限做过滤:在创建文件的时候,要从起始权限中过滤掉在umask中出现的权限

起始权限666转成二进制就是110 110 110

 umask掩码002转成二进制就是000 000 010

于是我们得出最终权限:110 110 100

即:

110 110 100
-rw-rw-r--

其实umask是可以通过指令来修改的:

umask xxxx

umask在不同平台和机器上存在偏差 

 如果为1则原本是1的清零,本来是0的不做处理

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

目录起始权限:777=111 111 111

umask:002=000 000 010

~umask:111 111 101

(~umask)&起始权限=111 111 101=775

111 111 101
drwxrwxr-x

还有问题,请看栗子:

我在同一路径下分别以普通用户和root账户的身份新建文件 

建完文件之后,普通用户不想让任何人碰自己的文件,于是他:

chmod a-rwx normal1.txt

但是这任何人防不住root,因为root可是超级管理员!

 root账户一身反骨,你不让我读,不让我写,我就要读,我就要写

我不仅要读写你的文件,我还要把你的文件删了,你如何应对?

 

普通账户没有任何应对之策(可怜的普通用户被root玩弄于股掌之中)

但是普通用户在困境中奋起,他就在想, 我能不能删你root的文件呢(除你文件)

成功叻!!!

天呐,为什么,平民制裁皇帝

泪目了家人们

 为什么普通用户竟然可以删掉别人的文件(包括root)?这河狸么?

这不河里呀!这海里

首先明确一点:删除一个文件和目标文件有关系吗?
没关系啊!!!(消灭你,与你无关)

那和什么有关系?

别忘了,我们是否能删除,新建或者修改文件,是和所在目录是否具有w权限有关的

因为有写权限,所以可以删除目录内的文件

但是随便删不就乱套了么(这就是新建目录的时候other把写去掉的原因啊)

一般大家都默认设成这个样子:

 所以一般大家不能互相串门

先插播一条知识:在Linux中,绝对路径是从根目录下开始的对吧,但是绝对路径往往过于冗杂,所以还对应着另一个路径:相对路径是在当前路径下的路径,绝对路径更稳定

然后显示器能显示的原理是存在很多个像素点,不同像素点按照算法刷新成不同颜色构建图像

那还有一种情况是:我们在Linux下,想由多个用户建立一个共享文件,来被大家共同访问应该怎么做呢?(多个Linux用户实现多个用户级别的信息共享该怎么办)

1.首先这个文件,一定不能在各自的家目录下创建(都懂吧),在系统的非用户目录下创建

2.只要不在家目录,在哪都行

3.other的所有权限都要放开

 但是这样存在一个问题,因为other的权限都被放开了,所以别人可以轻易的删除我们的文件,那么怎样即能让用户之间自由沟通,还能不被恶意用户干扰呢?

如果把写权限去掉,那其他用户也不能新建文件了

这个时候就需要粘滞位的帮助了,要给对应目录设置粘滞位(粘滞位都是给目录设置的哟)

怎么设置粘滞位呢?

chmod +t 目录名

 当一个目录被设置成“粘滞位”,则该目录下的文件只能由

1、超级管理员删除

2、该目录的所有者删除

3、该文件的所有者删除

其他恶意用户心有余而力不足咯

 

五一去成都,很很期待住

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值