LinuxLinux权限管理————shell运行原理 | Linux权限管理 | 粘滞位 | 权限掩码umask

Posted 张小姐的猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LinuxLinux权限管理————shell运行原理 | Linux权限管理 | 粘滞位 | 权限掩码umask相关的知识,希望对你有一定的参考价值。

🌈欢迎来到Linux专栏~~权限


  • (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort🎓
  • 🌍博客主页:张小姐的猫~江湖背景🌍
  • 快上车🚘,握好方向盘跟我有一起打天下嘞!
  • 送给自己的一句鸡汤🤔:
  • 🔥集中起来的意志可以击穿顽石🔥
  • 🙏作者水平很有限,如果发现错误,可在评论区指正,感谢🙏
  • 🎉🎉欢迎持续关注!🎉🎉

Linux权限知识超详剖析

🌍一. shell命令以及运行原理

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?

  1. “人”不善于直接使用操作系统
  2. 操作成本特别高,人会犯错,带来不安全因素

所以才从技术角度,Shell的最简单定义:🥑命令行解释器(command Interpreter)主要包含

  • 将使用者的命令翻译给核心(kernel)处理。
  • 同时,将核心的处理结果翻译给使用者

shell外壳的意义:

  • 使用户和操作系统交互中间软件层
  • 可以在一定程度,起到保护操作系统的作用

对比windows GUI,我们操作windows不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)

🔥shell 对于Linux,有相同的作用,主要是对我们的指令进行解析解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户

大家可能听得糊里糊涂的,下面我就来讲一个感性的故事来认识下Shell

  • IT男情窦初开向青梅竹马表白
    如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的
    且有让你心动的美眉如花。

你看上了小花却不好意思去表达心意,你找到了你爸(村长),让你爸找媒婆帮你说媒,你和王婆沟通完后,媒婆就去和如花私下转达一番

(●ˇ∀ˇ●)💦shell 可以传递请求命令,让OS执行命令

可是小花回答说:根本不喜欢你,说不是她的猜,她已经有男朋友了
好比下面

  • 梅开二度
    你知道你被如花拒绝后,可还是心系着如花,又一次的找到了媒婆,媒婆看到我对如花已经走火入魔的情况下,媒婆让我滚蛋,媒婆是有权利拒绝的

这里相当于媒婆保护了小花,免受打扰 (●ˇ∀ˇ●)💦shell 可以保护内核

  • 威逼利诱
    对此你不甘心(普信男),还是想如花做你女朋友,于是你动用了你爸爸的权力,媒婆碍于你爸是村长的态势,勉强答应,把事情交给实习生做,反正做不好也不关我媒婆的事儿。

我们在Linux中用的外壳程序是bash对应王婆,而我们上面的shell对应的就是媒婆
王婆只是众多媒婆里的一个,bash同理

🌍 二.Linux权限管理

🌈1.权限相关概念

💦用户分类

  • 🔥超级用户root:最高权限 ~ 可以再linux系统下做任何事情,不受限制
  • 普通用户:权限受限 ~ 在linux下做有限的事情

这两套密码绝对要不一样,否则会产生权限界限不清的状况

ps:超级用户的命令提示符是“#”,普通用户的命令提示符是“$

💦如何用户切换

🔥普通用户切换为root

su -


anyway

su

su切换成root用户以后,pwd一下,发现工作目录不变仍然是普通用户的工作目录;而用su -命令切换以后,工作目录变成root的工作目录

本质区别如下:

  • su只是切换了root身份,但Shell环境仍然是普通用户的Shell
  • su-连用户和Shell环境一起切换成root身份了

🔥root切换为普通用户

su - ljj //举例

众所周知root是万能的,和这位一样——》LeBron James

说明root可以变成任何人,且不需要输密码,在我们的自己的服务器就可以尽情爽

🔥回退我们可以直接输入exit 或者 直接【ctrl +d

🌈2.权限的两要素

权限是啥意思?允许特定的人做某件事情。针对人的:比如不是我们学校的人就进不来我们学校、不是一家人就进不了一家门。针对事物属性:我想去吃一台电脑、我想在面包上玩英雄联盟、看电影。面包能吃,但是电脑不能吃、你可以吃面包,但是不能吃电脑;这里面包括了两个属性。

权限约束的是人,文件本身具有天然的权限属性(读r写w执行x)。所以权限 = 人 + 事物属性

我们在基础指令阶段的ll可以显示更多文件属性


💦人

🥑linux用户类别

  1. 拥有者:文件和文件目录的所有者(owner)
  2. 所属组:文件和文件目录的所有者所在的组的用户(group)
  3. 其他人:其它用户(other)

不需要列出other,因为不是拥有者和所属组的就是other了

ps:所属组就好比团队,比如说我们常用的微信是一开始由很多个团队做,只是由张小龙团队胜出了


比如说:一个部门有两个项目组在竞争性完成一个项目,张三写的绝妙代码,我想让自己能看见,同组人能看见,其他组的看不见。如果领导王五想要来看,我就把他归进我的所属组内,other还是看不见

💦事物属性


🥑属性第一列:标识文件类型

在Linux系统中,不以文件后缀区分文件类型,也就是说文件类型与后缀没有直接关系。
(但不代表不可以使用,在系统层面没意义,可以给自己看)

对了gcc是一个Linux上的软件,它是分后缀的哦,不要和Linux系统搞混了

Linux下一切皆文件,文件类型 ——

d	目录文件
-	普通文件(各种动静态库,可执行程序,源程序)
—————————————————下面只做了解————————————————————————
l	软链接link(类似Windows的快捷方式)
b	块设备文件bar(例如硬盘、光驱等)
p	管道文件pile(通信操作)
c	字符设备文件(例如键盘显示器等串口设备)[后序会站在系统角度重新理解]
s	套接口文件

🥑剩下的9列:
三三为一组分别对应拥有者、所属组、其他人;三个字母分别对应文件属性,rw执行x对应的是-。每个字母都具有两态概念,即是否其具有读权限、是否具有写权限、是否具有可执行权限。

那下面的举例:拥有者可读可写可执行、所属组可读可写可执行、other可读可执行 不可写

drwxrwxr-x 2 ljj ljj 4096 Aug 13 09:07 code

🌍三.权限相关指令

🌈1.文件的权限

💦修改读写执行属性

a.字符表示方法

chmod u+w file.txt

也就是

chmod 用户表示符+/-=权限字符  文件名

用户表示符

u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户

b.8进制数值表示方法

举例

🥑更改一个人的一个权限

🥑更改一个人的多个权限

🥑更改多个人的多个权限

如果要修改不是自己的文件的时候需要sudo临时权限提升或者直接切成root身份

sudo chmod 用户表示符+/-=权限字符  文件名

那么我们没有权限会是什么样子呢?

🥑普通文件被约束权限的状况

🥑那么root受到权限约束吗?

root 竟然不经过拥有者的允许,直接把读写权限都干掉了,修改了我的权限属性

更过分的来了

root作为文件的other,无视一切约束,还是可以为所欲为

💥作总结:权限是用来约束普通人的,root是不受任何限制的


好比海贼王里的天龙人。我们认识到世界的不一样,我们也依然热爱这个世界(奥利给)

💦修改拥有者、所属组

🥑chown指令
❗更改文件拥有者

chown [参数] newUser filename

更改是需要得到别人的允许的,一般直接更改是不行的。

给别人东西,人家不同意咋办?那我们就强迫他同意哈哈哈(借用root之手)

🥑这时我们可以sodu进行临时的权限提升或者直接切成root身份

sudo chown root file.txt  或  su

(要想执行sudo,需提升权限,要求该用户在信任列表中,才可以执行,添加用户到信任列表是要root身份的)
还有可以直接切换成root

可以看见root就是这么为所欲为

🥑chgrp指令

❗更改文件或目录所属组

sudo chgrp newGrp filename 

还有那样root就是为所欲为

🌏四.常见权限问题(面试、细节问题)(狠重要)

🌈1.目录权限

💦 面试题:进入一个目录要什么权限?

  • 可写权限:如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容
  • 可读权限:如果目录没有可写权限, 则无法在目录中创建文件、删除文件(本质是在路径树中新增结点)

这都是显而易见的,那么进入目录需要什么权限?

  • 可执行权限:如果没有可执行权限,则无法cd到目录中
  • 进入一个目录,需要:x
  • 查看目录下的文件列表需要:r
  • 要在目录下创建文件或者目录:w

🌈权限掩码:umask

为何我们创建一个目录或者文件,默认权限是你所看到的样子?
默认权限 = 起始权限 &(^ 权限掩码)

  1. 🥑起始权限

    • 普通文件:666
    • 目录文件:777
  2. 🥑权限掩码
    但是当我们创建的文件和目录,看到的权限往往不是上面的这个值,这是因为还受到权限掩码的影响

凡是在umask中出现的权限,都不应该在最终权限中出现!

超级用户默认掩码值为0022第一个0表示八进制),即000 010 010;普通用户默认掩码值为0002,即000 000 010.
八进制就是0开头

rwxrwxr-x     ?
111111111     起始权限
000000010     umask
——————————————————————
111111101     默认权限
rwxrwxr-x     775

那这时候如何做到的呢?
是做减法吗?❌

默认权限 = 起始权限  &(^ 权限掩码)

在八进制中直接对应位做减法可快速计算(只是机缘巧合)

我们也是可以自定义umask的——

umask  0777 所有人啥权限都没有

🌈粘滞位

我们创建了一个目录other,并把权限设置为完全公开。

在目录里touch了几个拥有者为root的文件,且对other什么权限也没有

那么现在我以普通人的身份来,也就是other身份来看,这些文件对我什么权限都没有,我不能看,不能改,那我就不爽了我把你文件做掉

我竟然就真的做掉了!!

这是因为你目录本身就是对我就是可写的,我可以删自己的也可以删别人的。如果我们去掉目录的写[w]权限,那就确实删不掉了 ——

  • 💥文件被删除不关该文件的属性,而是文件所在的目录是否拥有写w权限

此处的场景🔥大家所有用户都在共同的一个路径下,对该目录具有读写执行权限

那我们不想别删咋办?吧目录的w权限去掉?不现实,因为这样我们拥有者都删不了自己的文件了

噔噔蹬蹬 闪亮登场

💦粘滞位

🥑现在我有这样的需求,当多个用户共享一个目录,需要在该目录下,进行读写创建删除文件。但是自己只能删除自己的,而不能删除别人的(w:可以互删,不满足条件)

chmod o+t dir   


接下来我们来试试还能不能删人家的文件?

ps:🥑

  1. 粘滞位只能对目录设置(一般是对other)
  2. 对于设置了粘滞位的目录,只有文件的拥有者root可以删除,其他人不能删除

我们linux下就有这样一个目录tmp:用于储存临时文件


有时,有多个人或者系统会有很多的临时数据,所有的临时文件都放在系统的*/tmp*目录下。所有的权限需要放开,但是只想让文件的拥有者删除自己的文件,这需要设置粘滞位

📢写在最后

  • 能看到这里的都是棒棒哒🙌!
  • 想必权限也算是Linux中重要🔥的部分了,如果认真看完以上部分,肯定有所收获。
  • 接下来我还会继续写关于📚《vim》等…
  • 💯如有错误可以尽管指出💯
  • 🥇想学吗?我教你啊🥇
  • 🎉🎉觉得博主写的还不错的可以一键三连撒🎉🎉

以上是关于LinuxLinux权限管理————shell运行原理 | Linux权限管理 | 粘滞位 | 权限掩码umask的主要内容,如果未能解决你的问题,请参考以下文章

LinuxLinux下的基本指令与权限

LinuxLinux环境变量的理解 --- 命令行参数shell子进程环境变量本地变量…

自学LinuxLinux用户组权限

LinuxLinux中常用操作命令

LinuxLinux中常用操作命令

LinuxLinux中常用操作命令