LinuxLinux权限管理————shell运行原理 | Linux权限管理 | 粘滞位 | 权限掩码umask
Posted 张小姐的猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LinuxLinux权限管理————shell运行原理 | Linux权限管理 | 粘滞位 | 权限掩码umask相关的知识,希望对你有一定的参考价值。
🌈欢迎来到Linux专栏~~权限
- (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort🎓
- 🌍博客主页:张小姐的猫~江湖背景🌍
- 快上车🚘,握好方向盘跟我有一起打天下嘞!
- 送给自己的一句鸡汤🤔:
- 🔥集中起来的意志可以击穿顽石🔥
- 🙏作者水平很有限,如果发现错误,可在评论区指正,感谢🙏
- 🎉🎉欢迎持续关注!🎉🎉
Linux权限知识超详剖析
🌍一. shell命令以及运行原理
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
- “人”不善于直接使用操作系统
- 操作成本特别高,人会犯错,带来不安全因素
所以才从技术角度,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用户类别
- 拥有者:文件和文件目录的所有者(owner)
- 所属组:文件和文件目录的所有者所在的组的用户(group)
- 其他人:其它用户(other)
不需要列出other,因为不是拥有者和所属组的就是other了
ps:所属组就好比团队,比如说我们常用的微信是一开始由很多个团队做,只是由张小龙团队胜出了
比如说:一个部门有两个项目组在竞争性完成一个项目,张三写的绝妙代码,我想让自己能看见,同组人能看见,其他组的看不见。如果领导王五想要来看,我就把他归进我的所属组内,other还是看不见
💦事物属性
🥑属性第一列:标识文件类型
在Linux系统中,不以文件后缀区分文件类型,也就是说文件类型与后缀没有直接关系。
(但不代表不可以使用,在系统层面没意义,可以给自己看)
对了gcc是一个Linux上的软件,它是分后缀的哦,不要和Linux系统搞混了
Linux下一切皆文件,文件类型 ——
d 目录文件
- 普通文件(各种动静态库,可执行程序,源程序)
—————————————————下面只做了解————————————————————————
l 软链接link(类似Windows的快捷方式)
b 块设备文件bar(例如硬盘、光驱等)
p 管道文件pile(通信操作)
c 字符设备文件(例如键盘显示器等串口设备)[后序会站在系统角度重新理解]
s 套接口文件
🥑剩下的9列:
三三为一组,分别对应拥有者、所属组、其他人;三个字母分别对应文件属性,读r
、写w
、执行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
为何我们创建一个目录或者文件,默认权限是你所看到的样子?
默认权限 = 起始权限 &(^ 权限掩码)
-
🥑起始权限
- 普通文件:
666
- 目录文件:
777
- 普通文件:
-
🥑权限掩码
但是当我们创建的文件和目录,看到的权限往往不是上面的这个值,这是因为还受到权限掩码的影响
凡是在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:🥑
- 粘滞位只能对
目录
设置(一般是对other) - 对于设置了粘滞位的目录,只有
文件的拥有者
或root
可以删除,其他人不能删除
我们linux下就有这样一个目录tmp:用于储存临时文件
有时,有多个人或者系统会有很多的临时数据,所有的临时文件都放在系统的*/tmp*目录下。所有的权限需要放开,但是只想让文件的拥有者删除自己的文件,这需要设置粘滞位
📢写在最后
- 能看到这里的都是棒棒哒🙌!
- 想必权限也算是Linux中重要🔥的部分了,如果认真看完以上部分,肯定有所收获。
- 接下来我还会继续写关于📚《
vim
》等… - 💯如有错误可以尽管指出💯
- 🥇想学吗?我教你啊🥇
- 🎉🎉觉得博主写的还不错的可以
一键三连撒
🎉🎉
以上是关于LinuxLinux权限管理————shell运行原理 | Linux权限管理 | 粘滞位 | 权限掩码umask的主要内容,如果未能解决你的问题,请参考以下文章