【Linux仓库】权限的量子纠缠:用户/组/other如何编织Linux访问控制网?

发布于:2025-05-24 ⋅ 阅读:(15) ⋅ 点赞:(0)

🌟 各位看官好,我是

🌍 Linux == Linux is not Unix !

🚀 今天来学习权限的相关知识,权限 = 用户 + 文件权限属性!!!

👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多人哦!

目录

shell外壳

Linux权限

用户

提权指令

权限理解

角色

修改角色

文件属性

修改权限操作

file指令

修改目录权限

​编辑

umask

粘滞位


shell外壳

Linux严格意义上说的是⼀个 操作系统,我们称之为“核⼼(kernel) “ ,但我们⼀般⽤⼾,不能直接使⽤kernel。⽽是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通

如何理解?为什么不能直接使⽤kernel?
从技术⻆度,Shell的最简单定义:命令⾏解释器(command Interpreter)主要包含:
  • 将使⽤者的命令翻译给核心(kernel)处理。
  • 同时,将核⼼的处理结果翻译给使⽤者。
对⽐windows GUI,我们操作windows 不是直接操作windows内核,⽽是通过图形接⼝,点击,从
⽽完成我们的操作(进⼊D盘的操作,我们通常是双击D盘盘符.或者运⾏起来⼀个应用程序)。
shell 对于Linux,有相同的作⽤,主要是对我们的指令进⾏解析,解析指令给Linux内核。反馈结果在通过内核运⾏出结果,通过 shell解析给⽤⼾

Linux权限

用户

Linux下有两种用户: 超级用户(root)、普通用户
超级 用户 :可以再linux系统下做任何事情,不受限制
• 普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通⽤⼾的命令提⽰符是“$”。

root用户有且仅有一个,那么该如何创建普通用户呢?

如何知道当前用户是root用户还是普通用户呢?

指令 :whoami --> 查看当前用户

sudo提权指令

sudo指令能让我在不成为root情况下,执行root有的权限,那我还要root来干什么呢?

sudo并不是每个人都可以执行的,只有该用户受系统信任,即成为白名单用户,才能使用sudo指令。那该如何成为白名单用户呢?

权限理解

在现实生活中,一个人具不具备权限是由人和事物属性组成,即 权限 = 人 + 事物属性

而 人 在生活中又由两方面组成 ,即 人 = 真实的你 + 扮演角色。

什么意思呢?

假设你是某公司的总董,名字叫做张三。在平日的上下班途中,他人对你毕恭毕敬,见你一声都要喊声老板好!而他人对你喊老板的原因并不是因为你是张三,而是因为你是老板的原因才对你打招呼。因此,从这里可以看出,角色在我们的生活中占有重大地位。

那么在Linux当中,权限 = 用户 + 文件权限属性!!!

我们说过Linux一切皆文件:

文件权限 = 角色 + 文件属性。

文件权限理解:具不具备某种能力,可不可以做,也需要有对应“权限”。该文件是由谁创建的,他人是否可以进行修改,这不就是角色吗?而事物属性不就是文件属性?

决定了我们对文件权限的讨论是从角色和文件属性方面进行!!!

角色

似乎角色从浅层理解只分为:自己、其他人。但是在生活中,公司开会,制作PPT等等都需要有决策人、协作者、其他人。这决定了角色的扮演并不是那么简单。

因此在计算机当中角色分为:拥有者、所属组、其他人

⽂件和⽂件⽬录的所有者:u(user)
⽂件和⽂件⽬录的所有者所在的组的⽤⼾:g(group)
其它⽤⼾:o(other)
修改角色
1. chown
功能: 修改⽂件的拥有者
格式:chown [参数] ⽤⼾名 ⽂件名
2. chgrp
功能: 修改⽂件或⽬录的所属组
格式:chgrp [参数] ⽤⼾组名 ⽂件名
常⽤选项:-R 递归修改⽂件或⽬录的所属组

文件属性

Windows中是用文件后缀区分文件类型的;

Linux中是用文件的属性列区分文件类型的。

修改权限操作
chmod
功能: 设置⽂件的访问权限
格式:chmod [参数] 权限 ⽂件名
常⽤选项:
        • R -> 递归修改⽬录⽂件的权限
        • 说明:只有 ⽂件的拥有者和root才可以改变⽂件的权限
chmod命令权限值的格式:
        • ⽤⼾表⽰符+/-=权限字符
                ◦ +:向权限范围增加权限代号所表⽰的权限
                ◦ -:向权限范围取消权限代号所表⽰的权限
                ◦ =:向权限范围赋予权限代号所表⽰的权限
⽤⼾符号:
◦ u:拥有者
◦ g:拥有者同组⽤
◦ o:其它⽤⼾
◦ a:所有⽤⼾
三位8进制数字

同时方法一也可以一次性修改多个角色权限


file指令
功能说明:辨识⽂件类型。
语法: file [ 选项 ] ⽂件或⽬录 ...

修改目录权限
可读权限(r) : 如果⽬录没有可读权限, 则⽆法⽤ls等命令 查看⽬录中的⽂件内容 .
可写权限(w) : 如果⽬录没有可写权限, 则 ⽆法在⽬录中创建⽂件, 也⽆法在⽬录中删除⽂件.
可执⾏权限(x) : 如果⽬录没有可执⾏权限, 则 ⽆法cd到⽬录中 .

umask

创建普通文件时的默认权限一直都是 rw- r-- r--,而目录文件的默认权限一直都是 rwx r-x r-x。(注意:我的起始权限和你的起始权限可能不一样,这是由umask决定的,但每次创建新文件时一定都是相同的)。

为什么开始各角色的默认权限是这样子的呢?这与umask有关

文件权限 = 起始权限 + umask

普通文件的起始权限应该是rw- rw- rw-;

目录文件的起始权限应该是rwx rwx rwx。

umask
功能:
查看或修改⽂件掩码
但实际上你所创建的⽂件和⽬录,看到的权限往往不是上⾯这个值。原因就是创建⽂件或⽬录的
时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的⽂件权限是: mask &
~umask

普通文件最终权限: rw- r-- r--

目录文件最终权限:  rwx r-x r-x

完全用这一点并不能说明权限与umask具有关联,我们反向证明只要修改umask的值,从而达到我们想要的结果时,则可以文件或目录确实受到umask的影响。


粘滞位

超级用户root在egoist用户的路径下新建了一个文件,将该文件的other的w权限删了,那么other便不能删除该文件,但是在egoist用户下竟然能删除该文件,这是为什么呢?

可以看到家目录的每个普通用户的other权限都是默认没有的,因此普通用户之间是没法相互串门的,只有root能随意进出,因为它是超级用户无视权限。 

为了让用户之间能够相互串门,我们在根目录下新建了shared目录,并将other的r和x权限打开, 让用户可以进入该目录并查看该目录的内容,但是用户在根目录下肯定也要有新建文件的能力,否则这个shared目录依旧只能有root来增删改。正因如此,root不得不将other的w权限加上,但有了w权限后,用户之间会出现互删的问题!!!

为了解决这种问题,我们引入了粘滞位。 

当⼀个⽬录被设置为"粘滞位"(⽤chmod +t),则该⽬录下的⽂件只能由
1. 超级管理员删除
2. 该⽬录的所有者删除
3. 该⽂件的所有者删除

 


网站公告

今日签到

点亮在社区的每一天
去签到