【Linux】权限

发布于:2025-09-02 ⋅ 阅读:(20) ⋅ 点赞:(0)

在这里插入图片描述

个人主页<—请点击
Linux专栏<—请点击

一、Linux权限

1.1 什么叫做权限

权限的本质是一套规则系统,它明确定义了“谁”在“什么条件下”可以对“什么资源”进行“哪些操作”,也就是能不能访问资源的问题。

1.2 为什么需要有权限

Linux是多用户操作系统,Linux同时会有大量人员进行登录访问,其中用户分为普通用户和超级用户root,有权限能更好的进行用户管理。

1.3 Linux下用户问题和角色问题

Linux下,权限=人+文件属性,权限是针对特定群体的,在Linux下用户分为普通用户root,不论是普通用户还是root用户,目标群体必须天然具备对应的属性才能访问对应文件(可读r,可写w,可执行x)。

1.3.1 Linux用户问题

超级用户root:基本不受权限约束,属于Linux系统中的特权级别;普通用户:受权限约束

切换用户指令:su [用户名],超级用户可以直接切换到普通用户:

在这里插入图片描述
如上图,root用户可以直接切换到普通用户,这就是root账号的特权表现之一。而普通账户切换成root账户就没有那么容易了。
在这里插入图片描述
如上图,普通用户切换成root用户需要我们输入root账户的密码。其中root可以省略,su默认切换到root用户。

普通用户切换成root用户除了上面的指令还有一个指令su -
在这里插入图片描述
如上图,使用su -进行切换后会弹出一条登录信息,su -的作用是让目标用户以重新登录的方式切换。
在这里插入图片描述

注意:普通用户userA想切换到普通用户userB,他需要输入userB账户的密码。

普通用户短暂提权的方法

假设普通用户想要安装软件并拷贝到系统目录下,但是它不让普通用户进行拷贝,必须要有root权限,那必须要root用户来吗?那每个人都要root用户来,那root用户不得忙死。不是这样的,普通用户也可以。

普通用户也可以短暂获得root权限,就是使用sudo指令! 普通用户创建文件,默认是以自己的身份创建的。
在这里插入图片描述
现在我就想以root的身份进行创建文件,那么sudo
在这里插入图片描述
诶,怎么没有反应,它报出一条信息:用户wuhu不在sudoers文件中,此次事件将被报告。普通用户想要获得root权限,也是需要条件的,如果所有的普通用户都可以进行提权获得root权限,它还分什么普通用户和超级用户root

普通用户想要提权,必须是root的白名单/etc/sudoers上的用户,/etc/sudoersLinux系统中控制sudo权限核心配置文件只有被列在该文件中的用户或用户组才能使用sudo命令获取临时root权限,它必须经过root授权!
在这里插入图片描述
这个文件只有root用户有权限更改。现在我们切换成root用户,并将普通用户添加到白名单上。
在这里插入图片描述
如上图,切换到root账户后,打开/etc/sudoers文件并在对应部分添加wuhu ALL=(ALL) ALL。建议使用vim指令进行修改,vim指令后期博客会讲解。

添加成为root白名单上的账户后,就可以进行短暂提权操作了。
在这里插入图片描述

1.3.2 Linux角色问题

我们的权限是依附于角色的,没有角色之分,权限的设定也就没有意义。在Linux下,角色分为拥有者角色、所属组角色和other角色拥有者就等同于房主(你自己),所属组就等同于你的家人,other就等同于陌生人。

拥有者和other角色都容易理解,为什么要有所属组呢?那是为了对文件权限进行局部范围组级别的管理,方便地给一组用户分配相同的权限,而不需要逐个用户设置。比如,一个“开发组”可以对项目代码文件有读写权限,而其他人只有读权限。

在这里插入图片描述
以上图中txt文件为例,文件的拥有者是root,所属组是root,不是拥有者角色和所属组角色就是other角色,所以wuhu对于该文件来说就是other角色。

1.4 文件权限属性问题

Linux下常见的权限有三个,只读r、只写w、可执行x,接下来下图中会显示文件信息对应位置对应的分别是什么。
在这里插入图片描述
其中文件类型

  • -表示普通文件源代码、文本、动静态库、可执行文件等
  • d表示目录文件
  • l表示链接文件
  • p表示管道文件
  • c表示字符文件
  • b表示块设备文件

剩下的权限部分,三个为一组表示对应角色所对应的权限。可读就是r否则就是-,可写就是w否则就是-,可执行就是x否则就是- 它们三个的顺序是固定的。

1.4.1 如何正确表达一个文件的权限

在这里插入图片描述
以上图test.exe文件为例,该文件是一个普通文件,拥有者是wuhu,所属组是wuhu,拥有者的权限是可读可写可执行,所属组的权限是可读可写可执行,other的权限是可读不可写可执行。

2.1 权限的指令操作

权限=人+文件属性,我们首先对文件属性进行更改。
在这里插入图片描述
如上图,我创建了一个文件,并向其中写入了一行文字,接下来我要修改文件属性。想要修改文件属性只能是超级用户root或者是文件的拥有者。

chmod命令,作用:用来更改文件的权限。三类权限对象:uUser - 所有者、gGroup - 所属组、oOthers - 其他人、aAll - 所有人

chmod的两种使用方法:符号模式数字模式

  • 方法一:符号模式

通过符号+、-、=来增加、删除或直接指定权限。+增加权限,-移除权限,=直接设定权限(覆盖之前的权限)。

如下图,是对文件权限修改的操作。
在这里插入图片描述

  • 方法二:数字模式

直接使用一个三位数的数字来代表完整的权限。这种方法更快捷,但需要简单计算。将r、w、x 视为二进制位,有权限则为1,无则为0。例如rwx7r--4

语法:chmod [ABC] 文件名
在这里插入图片描述

2.2 没有权限的表现

上面讲了如何更改文件的权限,我们再来看没有权限会有什么表现

现在我打开了两个普通用户,并登录在了同一个路径下。
在这里插入图片描述
接下来,下图中zbc将以other的身份对文件进行访问。
在这里插入图片描述
接下来,下图中wuhu将以拥有者的身份对文件进行访问。
在这里插入图片描述
拥有者的读写权限被去除之后,身为拥有者角色的wuhu就不能对文件进行读写操作了,这倒是符合我们的预期,但是! 大家不要忽略了一个问题,wuhu还是所属组呀!所属组是有读写权限的呀,但现在既定事实就是不能进行读写操作!

这是为什么? 注意用户在访问文件的时候,系统只会对你相对于文件的身份角色验证一次! 举个例子,如果你是文件的拥有者,检查到此结束,你将以拥有者的角色访问文件,否则,系统继续检查你是不是文件的所属组,如果是,检查到此结束,你将以所属组的角色访问文件,否则,你将以other的角色访问文件。

那么如何验证呢? 很简单,现在wuhu是文件的拥有者,他可以执行chown操作将文件的拥有者改成其他人。比如将文件的拥有者更改成普通用户zbc

在这里插入图片描述
如上图所示,我是文件的拥有者,我想把文件的拥有者改成zbc但是被拒绝了,这是为什么? 这是因为普通用户无权更改文件的拥有者,就算你是文件的拥有者也不行!

这也很合理,你想一下如果有个人把事情搞砸了,弄出一口黑锅,如果没有上面的规则,他转手就将文件给别人了,那这不就乱套了吗。所以更改文件的拥有者需要root权限。

那么我们就短暂提权,将文件给zbc

在这里插入图片描述

现在文件的拥有者是zbcwuhu属于所属组角色了,我们再使用wuhu对文件进行读写操作。扩充:chgrp更改文件的所属组。同时更改文件的拥有者和所属组:chown 拥有者:所属组 文件名
在这里插入图片描述
这样就验证了用户在访问文件的时候,系统只会对你相对于文件的身份角色验证一次!

接下来,root将对文件进行访问。
在这里插入图片描述
上面没有问题,符合我们的预期。

直到有一天,wuhu身为文件的拥有者,他不想再让root用户读写了,于是他就将otherrw权限去除了。
在这里插入图片描述
超级用户root属于Linux系统中的特权级别,他完全不受任何文件权限的约束! 文件权限就像是一个国家的法律,它对所有普通用户都具有约束力。但root用户是国王/皇帝,凌驾于法律之上,法律无法约束他。

关于可执行

在这里插入图片描述
如上图,我是文件的拥有者,我给文件加上了可执行,紧接着我就执行该文件,但是运行失败了,这是为什么?

注意:当文件本身是一个能够执行的文件且具有可执行权限时,这个文件才能运行。 给文件可执行权限x,并不是让该文件能够执行,而是该文件要执行时,系统允许文件执行。如果没有可执行权限,当文件想要执行时系统直接就拒绝了。

3.1 三个子问题

3.1.1 进入一个目录文件需要什么权限?

现在我在当前目录下,创建了一个新的目录,我对于该目录而言是拥有者角色。
在这里插入图片描述

接下来,为了搞清楚问题的答案是什么,我们可以一次次尝试,首先就是去除r权限。
在这里插入图片描述
所以r权限决定了用户是否有权利查看指定目录下的文件属性

紧接着,我们恢复r权限,去除w权限。
在这里插入图片描述
所以w权限决定了特定用户是否有权利在该目录下新增文件、删除文件和修改文件名

紧接着,我们恢复w权限并去除x权限。
在这里插入图片描述
所以想要进入一个目录文件需要的是x权限

3.1.2 为什么新建的目录和普通文件的权限是我们所看到的样子?

在这里插入图片描述
如上图所示,目录文件是775,普通文件是664,为什么是这样而不是其他的呢?

那是因为Linux存在权限掩码umask,对于普通文件而言,起始权限是666,对于目录文件而言,起始权限是777

在这里插入图片描述
如上图就是权限掩码,我们只关注标注的部分。

文件的最终权限等于起始权限“去掉”umask,计算公式是最终权限 = 起始权限 & (~umask)
在这里插入图片描述
如上就是普通文件和目录文件最终权限的计算过程。

只要更改掉umask,再次创建的文件默认权限就会更改。
在这里插入图片描述
如上图,新建立的目录文件和普通文件的权限都改变了,将umask更改为000,也进一步验证了目录文件的起始权限是777,普通文件的起始权限是666

在这里插入图片描述
也不必担心,随意更改导致umask的默认值遗忘的情况,在命令行上更改属于临时更改,当你退出登录之后,再次重新登录时umask就又会恢复成默认值。

3.1.3 权限---的文件能够删除吗?及 粘滞位问题

现在普通用户wuhu,在他创建的目录下。
在这里插入图片描述
有一天超级用户root也跑到了他的目录下,并创建了一个文件。
在这里插入图片描述
wuhu比较好奇,root在搞什么,于是就开始研究这个文件。
在这里插入图片描述
如上图,wuhu想看这个文件看不了,想写这个文件写不了,于是wuhu急了,不让读写,我把它删掉!
在这里插入图片描述
就这样wuhu很愉快的把root在他的目录下创建的文件删除了,请问这合理吗?

1、权限的合理性file目录是wuhu创建的,他是拥有者,具有w权限,所以可以删除文件,即使是root创建的。
在这里插入图片描述
2、想象一下,你在你的家里玩着手机唱着歌儿,突然有个陌生人闯进了你的家里,并在你的家里放了他的箱子,并告诉你不能动他的东西,此时你当然有权利把他的东西丢出去了,这是你家。这是合理的

结论:删除文件的权限由目录决定,与文件本身无关。对目录有写权限的用户可以删除其中的任何文件,包括属于root且权限为---的文件。除非该目录被设置了粘滞位。

关于粘滞位

如果我们想让多用户之间共享文件该怎样做呢? 首先不能在一个普通用户的目录下进行。
在这里插入图片描述
上图已经将的很清楚了,所以共享文件一定不会在普通用户的家目录下。那在哪里呢? 它需要在系统级别的路径下
在这里插入图片描述
现在有三个普通用户进行角色扮演,分别是wuhu、zbc、othroot在根目录下创建了share目录用于共享文件。
在这里插入图片描述
今天wuhuzbc两个普通用户开始共享文件,wuhu创建了一个文件,并在其中写了一些内容邀请zbc来看。
在这里插入图片描述
后来,wuhu不想分享内容了于是就把权限关闭了。后来第三方oth来了,他想看看wuhuzbc在搞什么东西。
在这里插入图片描述
oth访问文件别拒绝,于是一气之下就把wuhu所创建的文件删除了!那么这合理吗?

从权限的角度看,oth拥有目录的w权限,于是可以删除wuhu所创建的文件,这很合理,但是从场景来看,这可是共享文件的公共场合,你oth没有经过文件拥有者的允许就将文件删了!这太不合理了!

那么这个问题该如何处理呢? 如何既可以共享文件,又可以不让除了超级用户root和文件拥有者之外的人删除文件呢? 第一不能让root去除other角色的w权限,因为wuhu也是other,去除之后wuhu就不能共享文件了。那该怎么办呢?

这时候就可以提出粘滞位了,粘滞位是一种特殊的权限,t就是粘滞位的符号标志。 给目录设置了粘滞位之后,规则变为:即使一个目录对所有人可写o+w,用户也只能删除或重命名该目录下【自己拥有】的文件或子目录,而不能删除或重命名【其他用户】的文件。

紧接着为了解决这个问题,root用户对share目录加上了粘滞位权限。
在这里插入图片描述
紧接着wuhu在极度舒适的情况下与zbc进行了又一波文件分享,之后就将权限关闭了,后来oth又来了,他又想看看他们在搞什么东西。
在这里插入图片描述
如上图,oth看到他们又不让访问文件,于是oth又生气了,你这wuhu是不长记性呀,看我给你删掉!
在这里插入图片描述
总结:加上了粘滞位权限的目录,其中的文件只能由超级用户root、目录的拥有者、文件的拥有者删除

一个经典的例子: /tmp目录在几乎所有的Linux系统上,/tmp目录都是一个临时目录,允许所有用户在里面创建文件
在这里插入图片描述

总结:
以上就是本期博客分享的全部内容啦!如果觉得文章还不错的话可以三连支持一下,你的支持就是我前进最大的动力!
技术的探索永无止境! 道阻且长,行则将至!后续我会给大家带来更多优质博客内容,欢迎关注我的CSDN账号,我们一同成长!
(~ ̄▽ ̄)~


网站公告

今日签到

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