首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Linux操作系统-为什么 root 能“为所欲为”?探寻 Linux 权限体系的上帝账户

Linux操作系统-为什么 root 能“为所欲为”?探寻 Linux 权限体系的上帝账户

作者头像
海棠蚀omo
发布2026-01-12 17:19:37
发布2026-01-12 17:19:37
1570
举报

下面的权限知识我会从几个问题入手来帮助大家更好的去理解权限的相关内容。

一.什么叫做权限

权限是用于控制用户和程序对文件、目录及其他系统资源的访问权限的机制。Linux 是一个多用户操作系统,权限系统确保了不同用户和进程只能访问其被授权的资源,从而保障系统的安全性和稳定性。说白了就是我们去访问linux中的资源,能还是不能的问题。

二.为什么要有权限

Linux权限用于控制用户和程序对文件、目录的访问,确保系统安全、多用户隔离和资源保护。上面也提到了,Linux是一个多用户操作系统,是支持同时有多个人来进行登录访问的。如果没有权限的话,比如你创建了一个文件,写了很多内容,但是因为没有权限的存在,任何人都可以来修改你文件中的内容,甚至把你文件中的内容给删除了。那这种情况下就很危险,所以才要有权限的存在,权限的本质就是更好的进行用户管理。

三.权限 = 人 + 文件属性

用户分为:超级用户root和普通用户,所以我们的权限也要针对特定群体进行相应的变化,这就涉及到“人”这一属性。

而文件属性呢,我们举个例子:我要在视频软件中敲代码,在面包店吃烧烤等等,上面的这些操作我们想一想就知道都不合理。文件属性也是一样,目标主题也就是文件,必须天然具备对应的属性,也就是权限,才能访问。

而文件的属性分为:可读(r),可写(w),可执行(x)。

3.1Linux用户的问题

我们上面提到用户分为:超级用户root和普通用户,那么这两者有什么区别呢?

超级用户root:不受权限的约束,属于Linux系统中的特权级别。

普通用户:受权限的约束

超级用户root不受权限的约束也不是说100%,99%的情况下都不受权限的约束,都是享受特权的,那么那1%呢?

这里就简单举个例子:就比如说你想删除某个文件,但是这个文件正在被别人访问,被别人使用,那么此时即使你是超级用户root,你也是没有办法进行删除的。

那么我们就思考一个问题:超级用户root和普通用户之间能进行身份转换吗?

答案是可以的,但是其中有一个规则,我们下面来看:

此时我们可以看到左侧是超级用户root,右边就是普通用户mon,而两者如果要转换的话要用到su + 用户名的命令来进行。

但是,同样是执行su+用户名的命令,root转mon直接就转换了,不需要密码,而mon转root却需要输入root账户的密码才能进行转换,这映射到我们生活中也是一样,这里就不多说了,懂得都懂。

并且对于普通用户转超级用户,su的使用方法也不止上面的一种,我们来看:

我们直接使用su,后面不加用户名输入密码后也是可以直接转到root的。

还有一个su的用法就是:su -,这个用法和上面两种有些不一样,我们来看:

从上面两幅图我们可以看到如果使用su或者su+用户名这两个操作,即使进行了用户转换,依旧还是在原来的路径下,但是如果我们用:su -的操作的话,我们也可以看到多出来一行提示,并且我们再看此时的路径就变为最初的路径了。

su - 的操作其实就相当于让你重新登陆了一下root账号,所以才会在最初的路径下。

讲到这里,可能有人会有问题:那么普通用户之间能不能相互转化呢?

答案也是可以的,不过是需要输入密码的,这点我们也能理解,毕竟登陆别人的账号需要别人的密码也很正常,这里就不过多演示了,和上面的操作是一样的。

其实对于用户的相互转换,我们每一个人安安稳稳用自己的账号就行,用户之间的转换我们知道即可。

还有一个问题:那我要是普通用户,我要安装一个软件,将其拷贝到指定的目录下,但是OS不让普通账户进行拷贝,也就是说我要安装一个软件只能由管理员来做?

而这个问题的答案肯定是不是的,如果是这样的话管理员不忙死了,这里就引入了普通用户要做提高权限的事情,我们可以通过一个指令来使普通用户能够短暂提权来完成上述的操作。

这个指令就是:sudo,我们来看:

此时图中的test.txt文件是由mon所创建的,那么我们要想利用root来创建一个文件,就可以使用sudo指令:

只需要在对应的指令前面加上sudo即可,并且要完成相关操作,还需要输入当前用户的密码,输入成功后,理想情况下就会创建成功,文件前面的mon mon就会变为root root,但是我们来看:

但是我也说了,这是理想情况下,实际我们在操作时就会报上面这种提示,这个提示的大概意思就是mon不在sudoers这个文件中,这个事件将会被记录。

这里就要引入sudoers这个东西,这个东西其实就相当于Linux中的白名单,只有在这个白名单中的用户才能完成sudo指令的操作,不在白名单中的用户,使用sudo时就会报上面的提示,我们只需要将当前的用户加入到sudoers文件中,就能完成相关操作,不过我们现阶段不需要知道具体是如何操作的,后面涉及到了会讲,了解一下这个知识点即可。

当然,对于前面的操作有人还会有疑问:为什么我要提高权限要输我当前用户的密码呢?为什么不输root的密码呢?

这个问题的就是因为root,也就管理员的密码怎么能让很多人知道呢?

如果一个人要安装软件,我把管理员密码给他了,另一个人也要安装软件,我也给他了,那么到最后,所有人都知道了管理员的密码,都可以通过sudo指令来提高权限,那还要管理员干什么呢?

所以这里肯定不能输管理员的密码,要输当前用户的密码,并且输过一次密码后,后面的一段时间,可能是10分钟,或者15分钟,不同的操作系统有不同的时间规定,是不需要再次输密码的。

3.2Linux角色的问题

角色分为:拥有者角色,所属组角色,other角色。

我们要知道权限是依附于角色的,我们常说一个人有什么什么权限,其实不是他这个人有什么权限,而是他所扮演的角色拥有什么权限,角色是人需要扮演的。

这点理解不了的,想想你们学校的校长,是担任校长的这个人本身有权限,还是因为他是校长才有权限,因为人扮演了角色,而角色拥有权限,所以我们才说这个人有权限,这要一定要弄清楚。

说回正题,我们来看这几个角色在文件中的位置:

上面就标明了这三个角色所处的位置,拥有者想必就不用多说,谁创建的这个文件,谁就是拥有者;所属组就是一个组,跟我们理解的小组差不多,一个人也可以是一个组;而other就是既不是拥有者,也不在所属组里面,就比如上面的mon用户就是other,可以理解为陌生人。

这里可能有人会有疑惑:为什么要有所属组呢?有拥有者和other不就可以了吗?

我们通过下面一个例子来理解所属组的概念:

现在在一个公司里面,有你们两个项目组A和B,你们两个项目组都要开发一种聊天软件,并且完成之后,要淘汰其中一个,此时你们两个组就是竞争状态。

下面张三在A这个项目组中负责的这块,他创建了一个hello.c的文件,此时你的领导,也就是你这个项目组的组长想看看张三写的代码,如果没有所属组的情况下,张三作为拥有者是不能修改的,所以此时只能开放other的权限。

那么问题现在就出来了,other权限一旦开放,不止组长能看,B组的李四也能看了,那怎么能行呢?

所以此时所属组的就发挥作用了,你开放所属组的权限,这样组长就能看,而other却看不了。所属组就是对文件权限进行局部范围的组级别的管理。

3.3文件权限属性的问题

对于文件权限的属性我们主要看上面圈起来的内容,前面总共有10个字符,第一个字符代表的是文件类型,这个我们下面再说。而后面9个字符就是上面三个角色的相关权限。

我们将这9个字符分为三组,也就是三个字符为一组,我们下面只看一组即可:

我们看这三个字符就是看是否可读,是否可写,是否可执行这三个,是的话就是相应的字符,否的话就是-,所以说上面的例子就是可读,可写,但是不可执行。

而三个组的权限从左到右依次是拥有者权限,所属组权限,other权限。

我们拿第一个文件举例就是对于拥有者来说,文件可读可写不可执行,对于所属组来说,文件可读不可写不可执行,对于other来说,文件可读不可写不可执行。我们看文件的权限属性就是这样看的。

4.权限的指令操作

经过上面的说明,有人会有疑惑:那么文件的权限属性能够修改吗?

答案是可以的,我们要借助一些指令来完成相应的操作:

我们要借助chmod这个指令,在这个指令后面加上角色+权限属性,再加上对应的文件即可,从上面我们可以看到上面两次操作使test.txt的拥有者权限发生了改变。

角色要缩写:拥有者:u,所属组:g,other:o。

我们也可以对所属组和other也进行改变:

上面也就完成了对所属组和other权限的修改,并且一次不止能修改一个,还能修改多个:

要对多个角色的文件权限属性进行修改中间要用 ',' 隔开。

并且还能同时对所有角色的文件权限属性作出修改:

角色改为a即可完成对所有角色的文件权限属性作出修改的操作,a就代表all,就代表所有,上面我们就使所有角色都失去了读的权限。

对角色的文件权限属性作出修改这件事只能由文件的拥有者或者root来进行修改,其他用户是不行的。

讲了上面那么多,我们来看会出现的问题:

细节一:

问题:虽然此时我拥有者的权限都没有了,但是我还是所属组啊,为什么不能对文件进行修改呢?

问题的答案就是用户在访问文件的时候,确定自己对于文件的身份角色,只会验证一次!!换句话说:权限只会验证一次。

而上面的情况就是权限认证了一次,认证为拥有者,然会就不会再次验证了,所以拥有者没有权限,即使你还在所属组也是不能对文件进行修改的。

但是啊,这种限制对于root来说是没有的:

你拥有者都不能对文件进行修改,但是我root可以,因为我是超级用户,是有特权的!!

细节二:

问题:关于可执行,可执行到底是什么呢?

我不是给test.txt这个文件可执行的权限了吗?为什么执行不了呢?

这个问题的答案就是文件要被执行要满足两个条件:

1.该文件本身就是一个可执行文件

2.文件本身具有可执行权限

上面的例子无法执行的原因就是虽然给他了可执行的权限,但是这个文件本身不可执行,记事本怎么执行?说白了就是给你机会你不中用啊。

话糙理不糙,理就是这个理,所以一个文件要想执行就要满足上面的两个条件。

5.没有权限会有什么表现

我们说完了对文件权限属性的修改,那么有人会问:能不能修改拥有者,所属组呢?

答案是可以的,但是有条件,我们来看:

要想改变拥有者和所属组,要用到chown和chgrp这两个指令,chown就是修改拥有者的,chgrp就是修改所属组的,但是我们从上面可以看到是两者都不能修改,我不是拥有者吗,为什么没有办法修改?

这里我们可以设想一下我们的生活中:我们要向给别人一个东西,是不是要征得别人的同意,你可能想他这给我的又不是什么有害的东西,只是一个文件啊。

那要是给你一口黑锅呢?你背不背?

那肯定不背啊,所以说才需要征得别人的同意才能修改,那要怎样征得别人同意呢?

在Linux中我们肯定无法做到,又不是实际生活中,我们还能去问别人,Linux中你怎么问?

所以要想修改拥有者或者所属组,只能依靠root的权限,root可以改,拥有root权限的普通用户也可以改,也就是利用sudo指令。

上面我就是利用root的权限将test.txt的拥有者和所属组改为ppd这个用户了。

有人可能会问:那有没有针对other的指令呢?

答案是没有的,也没必要,当你确定了拥有者和所属组后,other不也就确定了吗?

6.三个字问题

经过上面知识的讲解,我们来看下面三个子问题:

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

我们上面讲了都是针对普通文件的,现在我们跳出来看目录。

第一时间看到这个问题我想应该都觉得要进入一个目录应该与r,也就是读有关,那么我们来试验一下:

上面就是创建了一个目录文件lesson,它默认是有r的权限的,上面我们实验将其r权限给去掉。

去掉之后我们发现依旧可以进入到lesson目录中,但是当我们想利用ls指令来查看目录下的文件时,此时显示我们没权限,指令执行不了,这是怎么回事?

我们把r权限给复原再看看:

当我们把r权限复原后再进入到lesson目录中使用ls指令,发现可以显示出目录下的文件。

经过上面的试验,我们可以知道,r权限并不能决定能否进入目录中,但是如果没有r权限,用户是没有权利查看指定目录下的文件属性。

那么r不行,那w呢?

我们再来做一次试验看看:

上面我们把lesson的w权限给去掉,发现依旧可以进入到目录中,但是我们进去之后,发现无法创建文件,对文件进行重命名以及无法删除文件,依据上面的思路,我们觉得可能是因为没有w权限所导致的。下面我们复原w权限看是否能完成上面的操作。

我们再次试验发现有了w的权限后,能够完成上面的三个操作,此时我们又可以得出一个结论:

w权限并不能决定能否进入目录中,但是如果没有w权限,用户是没有权利在该目录下新增,删除文件以及修改文件名的操作。

此时就只剩下x权限了,所以我们不需要试验其实就能知道x权限才能决定是否能进入到目录中,我们来看:

和我们上面想的一样,没有了x权限后,就无法再进入指定目录中。

目录的权限和我们上面讲的普通文件的权限不太一样,但是目录也是一个文件,其实我们也可将其代入普通文件的视角,目录中所有的文件属性就相当于普通文件中我们写入的内容,没有r权限,你就看不了我写的内容,没有w权限,你就不能改或者删除我写的内容。

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

就像创建一个lesson目录为什么默认的就是rwxrwxr-x权限呢?为什么创建一个普通文件默认就是rw-rw-r--权限呢?

这个问题我们要先知道对于目录文件,它的起始权限其实是rwxrwxrwx,用二进制表示就是777;而普通文件的起始权限是rw-rw-rw-,也就是666。

这里的二进制表示其实就是三个为一组,有这个权限就是1,没有就是0,777也就是111 111 111,666就是110 110 110。

可能有人疑惑为什么目录是777,普通文件是666?

这点我们可以这样想,目录创建出来我们肯定要进入目录中,难不成我创建一个目录每次都要更改权限才能进去吗?所以才默认会有x权限,但是普通文件的x权限是可执行,和目录的x权限功能并不一样,可执行又不是必须的,如果有需要加上即可,所以默认没有x权限。

那么为什么会变成上面的rwxrwxr-x 775和rw-rw-r-- 664呢? 这是因为Linux系统中,为了对权限进行细粒度控制,而使用了Linux权限掩码,下面我们就来介绍何为权限掩码。

要看到权限掩码我们要利用umask这个指令,调用这个指令后,我们会看到一个四位数0002,这里我们只看后三位,也就是002,而这个权限掩码的作用就是凡是出现在权限掩码中的权限,最终都应该在起始权限中去掉,也就是:最终权限 = 起始权限 “去掉” umask。

而这个002我们二进制展开来看就是000 000 010,看到这里想必大家就能理解为什么上面的会变成664和775。

没错,就是将other权限中的w权限给去掉了,这点其实也能理解,other也就相当于陌生人,我们怎么能允许陌生人随意更改或者删除自己的东西呢?

最后上面的“去掉”,我们不能简单地就认为是减法,其实“去掉”这个过程就是:最终权限 = 起始权限 & (~umask),这才是正确的过程,~是取反,这个过程我就不演示了,就是位运算。

当然,我们也是能修改权限掩码的:

只需要在其指令后面加上你修改后的权限掩码即可,修改后在创建新的目录或者普通文件就会按照你写的权限掩码进行操作。

还有人的默认权限掩码并不是上面的0002,这是正常现象,我们并不需要担心,权限掩码是什么,程序就会按照相应的原则去操作。

6.3如果一个普通文件权限是---,那我可以删除它吗?

我们来看:

我们上面利用root创建了一个普通文件,并将其所有权限都去掉,但是我们利用普通用户进行删除时,居然能删掉,这是为什么呢?

我们理解这个问题一定要跳出普通文件的局限,将目光放到目录上,我们上面第一个问题结尾也说了,目录中的文件就相当于它的内容,我们要删除目录中的内容,看的并不是普通文件的权限,而是看目录的权限。

该目录中mon是其拥有者,并且拥有w的权限,所以才能删除目录中的文件,即使它是root创建的。

但其实上面这种情况在实际当中是不会出现的,为什么这么说呢?

我们从上图可以看到每个用户的家目录默认是不允许所属组和other进入的,你连别人家都进不去,怎么在别人的家里面创建文件呢?

所以我们在实际中如果想在多用户之间共享文件,就不会在任意用户的家目录下进行,而是在系统级别的路径下进行。

我们来举个例子:

比如说: 你现在要跟你的一个同事进行文件交互,管理员root给了other w的权限,你创建了一个文件,并写了内容,你的同事也能够进入到shared的目录中查看你的文件。

但是在这个过程中,有人看你和你同事天天给这交互这交互那,就好奇地进入了shared目录中,但是他一看,你不让我看,也不叫我写,一气之下直接把你这个文件给删了。

为什么能删上面的第一个问题讲了,删了那不就坏事了吗?这合理吗?

从技术层面讲肯定是合理的,毕竟给other开了w的权限,那他就能删,但是站在我们的角度去看,那就很不合理,我的文件你怎么能随意删呢?

所以针对这种情况我们也有相应的办法,那就是粘滞位!!!

我们来看如何操作:

粘滞位就是t这个字符,使用方法就如上图所示,t就会将x替换。

此时ppd即使有w的权限,也无法删除mon所创建的文件,并且也无法对其进行重命名,这就解决了我们上面的问题。

粘滞位就是给other设置的一种权限管理级别,在指定的t目录下,每个人新建文件,删除的时候,只能自己删自己的,不会因为w权限而删除别人的。

粘滞位的主要使用场景就是上面的文件共享的场景。

如果要删除别人的文件,只能由下面三种来删:

1.超级管理员root删除

2.该目录的所有者删除

3.该文件的所有者删除

前面两种其实在文件交互的场景中就是一种情况,简而言之就是只有root和我自己能删。

最后介绍一下文件的类型:

-:普通文件,源代码,文本,动静态库,可执行等

d:目录

I:链接文件

p:管道文件

c:字符文件

b:块设备文件

上面的一些字母指的是文件属性中最前面的那一个字符,这一个字符就代表了文件的类型。

以上就是为什么 root 能“为所欲为”?探寻 Linux 权限体系的上帝账户的内容。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档