解密Linux权限管理:从入门到精通

发布于:2025-06-02 ⋅ 阅读:(32) ⋅ 点赞:(0)

目录

shell命令及其工作原理

用户切换

sudo

权限

是什么?

为什么?

 怎么办?

目录权限怎么理解 ?

缺省权限

1.umask 的目的是什么?

2.为什么要有umask

粘滞位


shell命令及其工作原理

Shell的最简单定义:命令行解释器(command Interpreter)

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

shell的工作原理,相当于一个翻译官的角色,如下图 

用户切换

Linux中的用户:root用户(超级管理员)权限高,普通用户权限低,受管控

Windows中的用户:管理员(admin),普通用户

普通->超级用户: su 命令

权限级别提高

除了su来切换超级管理员,我们还可以用 su - 命令

这两个命令的差异在于,su命令,不会让root重新登录,只是身份的切换,最直观的表现是它不影响我们处在的目录。

而su - 命令则是以root身份重新登录,可以看到登录后处在root的家目录

那此时如何从超级用户恢复普通用户呢?

直接输入exit或者ctrl+d,就能恢复普通用户的身份

 如何从超级用户->普通用户?

因为root的权限是最高的,root想干什么就能干什么,因此直接su + 用户名就能直接进行切换

sudo

如图可见

通过sudo我们短暂提取了root的权限并实现了mv操作

sudo:是用来进行指定的短暂提权的

比如:安装原件,安装到系统中,需要管理员root的权限---其实只安装了一份,允许所有用户使用

那么问题来了,上面的操作,当我们进行提权时,虽然让输入密码,但是输入的是我们自己的密码,那是不是每个人都可以短暂提取root的权限呢?也就是说人人都是root?

那肯定不是,sudo操作也是需要配置的,并不是谁想sudo就能sudo,我们换一个用户试一下,如下图

Linux系统会提供一个类似白名单的东西,在/etc/sudoers里,而在白名单中的用户,可以进行sudo提权

权限

是什么?

权限的本质是:能或者不能做什么事情

为什么?

1. 控制用户的行为,防止错误的发生

2.

权限首先限制的是角色

举个例子,当你进入学校大门,保安并不阻拦你,是因为你具有学生的角色,当你毕业后失去了学生的角色,保安就会阻拦你,前后你并没有发生变化,但是你的角色发生了变化。

权限要求目标必须具备对应的属性

我们没法在leetcode上看电影,这是因为leetcode并不具有视频的属性,因此即便你冲了leetcode的会员,也没有办法在平台上去看电影,因为目标没有对应的属性

权限 = 角色+目标属性

目标属性 包含 权限,而文件权限 只有读,写,执行三个权限

而在Linux中角色分为 拥有者 所属组 other 三个角色

1.这里弄清一下角色和用户的差异,如下图所示

 我们能直接在文件属性中看到拥有者和所属组

2.那么other去哪里了

 Linux系统在用户访问文件时,会让用户与文件的拥有者和所属组进行匹配,如果都不是,那么就属于other角色

3.什么是所属组?为什么要有所属组?

有些公司有赛马制度,即让两个小组,都去完成同一个项目,进行内部竞争,谁先做出的项目并获得认可,那么公司就会推举这个项目。

如果这个公司只有一台服务器,那么两个小组 会分别建立一个目录,来完成自己组的项目

而如果你写了一个项目文件code.c ,如果你的领导要看你的代码,假设没有所属组这个角色,那么,作为文件拥有者的你,只能放开other的权限,那么此时B组的成员也能查看你所写的代码,这个就不太合理,因此增加了一个所属组的角色,完成更精细化的权限管理

更精细化的权限管理,首先要有更精细化的身份角色

 怎么办?

如何修改权限

权限 = 角色 + 目标属性

先来修改目标属性

我们直接用 chmod u/g/o(+/-)r/w/x 对应文件

其中我们可以用 逗号,连接 一次修改多个角色的权限 

如下图所示         

如果我们想一次修改所有角色的权限还可以用a+-来修改

上述文件是我自己的文件,因此我能直接修改其权限, 问题来了

1.我能修改任何人的文件权限吗?

看操作

 答案是不能,用户只能更改自己的文件权限

2.如果没有权限会怎么样?

系统会拒绝让我们进行对应操作

 那么问题又来了,我是test.txt的拥有者和所属组,拥有者不具有读写权限,但是所属组有对应权限啊,为什么我不能进行对文件的读写

3.确定权限信息的时候,系统会先确定用户是谁?拥有者?所属组?other?

用户角色确定,只确定一次,顺序是:拥有者,所属组,other

不会进行二次确认

4.root用户的权限?

root不受权限约束!

 5.如何理解可执行?

可执行权限 != 文件可以执行 

有能力和权限才能执行

如果文件并不是一个可执行程序,即便有可执行权限,也无法执行

如果文件是一个可执行程序,但是没有可执行权限,无法执行

如果文件是一个可执行程序,且有可执行权限,能执行

修改角色

更改拥有者chown

更改所属组chgrp

但是我们发现,我要把我文件的拥有者给别人,系统还不让我们这样做

系统默认不允许我们把文件给别人

万一你往文件里塞了点病毒,然后直接把文件给我,当公司出事的时候, 一看文件是我的,那我不直接完蛋了,这不就是甩锅吗?

因此,想把文件给别人需要高权限。

也就是说需要su或者sudo(切换成root) ,才能更改角色

这样如果出事的话,在日志中可以看到谁使用root权限把文件给我了,如果你说你是误操作,那sudo还需要输密码的,绝对是有意的,这样就保证安全性。

除此之外更改文件的拥有者和所属组可以直接用:连起来

之前我们在学习 权限的时候,说白了rwx权限都是两态的,能或不能,因此我们可以把其当成1或0

 

 

因此我们可以直接用八进制数字来修改权限

目录权限怎么理解 ?

如果我想进入一个目录,需要什么权限?

如果对目录没有x,就无法进入该目录

rwx分别对目录意味着什么?

如果对目录没有r,就无法查看目录里面的文件

 

如果对目录没有w,就无法在指定目录内部新建文件 

因此默认情况下,我们新建一个目录,rwx权限都要有

任何用户,无法进入到其他用户的家目录 

缺省权限

我们新建一个文件和目录

为什么默认权限是我们看到的样子

对于普通文件来讲 :起始权限是666 即110110110 默认不带可执行

对于目录文件来讲:起始权限是777 即111111111 默认携带x

但是我们发现并不是这样的啊,上面两个新建的目录和文件分别是775,664

因为系统默认会存在一个叫做权限掩码的概念:
权限掩码用umask命令查询

第一位和用户有关,因此我们只要考虑后三位就可以了

002 将其写成八进制,即代表 000 000 010

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

1.umask 的目的是什么?

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

2.为什么要有umask

a.默认权限,由OS自主决定,无法在创建前进行修改---系统可配置,可以灵活满足需要的一种表现

b.特殊情况下,配置umask,可以控制文件的默认权限,让我们的代码都是可控的。

我们可以根据我们的需要修改umask

 修改umask后,再创建新目录就发现其权限为000了。

如果你修改umask后,忘记其初始值为多少了,没有关系

umask是内存级的,重新登录系统,umask的值会自动恢复,也就是说umask是在配置文件中写好的


粘滞位

当另一个用户在我的目录里面创建文件,并把其所有权限关掉,我们是无法写入和读取其文件内容的

但是我们可以将其直接删除 

 我们如何看待这一现象呢,你可能感觉有些奇怪,为什么一个文件不让我读不让我写,但是我却可以直接把其删掉,有没有问题呢?

没有问题

一个文件是否能被删除,与该文件本身无关!与文件所处的目录w权限有关!

凭什么你在我的目录里建文件,还把权限都关掉不让我看,我就能把其删掉

正常来说,其他用户是无法进入到我的家目录下创建文件的,除了root,即便有这种情况,我也能把其文件删掉。

那如果两个用户要进行文件级别的协助呢?

那就不能放在任何一个私人账号下,即任何用户的家目录下

Linux系统提供了根目录,用root短暂提权,建立相应的目录和修改相应的权限,我们就能在根目录下进行文件级别的协助

相当于在公共区域下建立共享文件,但是这个文件仍然能被其他人删,因为这个是在公共区域的,删一个文件与文件本身无关,与该文件所处目录权限有关,而该目录是公共目录

那就会想,把公共目录的w权限关掉,这个虽然能解决问题,但是把w关掉,就无法在公共目录里新建文件,公共目录就失去了自身的意义

这样我们的核心需求就出来了

任何一个人都能新建文件,并修改自己文件的读写权限,让别人看或者写,但是不能让非拥有者删除

有需求,Linux系统就引入了粘滞位的概念 权限标志位 t,粘滞位

chmod +t 目标文件即可

可以看到上图tmp中最后一个小t就是粘滞位,文件无法被非文件拥有者所删除

补充一下,粘滞位对root用户没用,root就是超级赛亚人,想干什么就干什么。 


网站公告

今日签到

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