资讯动态

【Linux】Linux的权限

发布时间:2026/8/27 8:42:46 来源:尧图企业网站定制
引言在Linux系统中权限机制是整个系统安全体系的核心基石也是Linux区别于Windows的关键特性之一。Linux将一切资源抽象为文件并通过严格的权限规则划分拥有者、所属组以及其他用户的访问能力从根本上防止非法读取、篡改和误删数据。无论是日常文件管理、服务部署还是服务器运维权限配置不当都是绝大多数的安全漏洞、程序报错、访问失败的直接原因。熟练掌握读、写、执行权限的含义理解数字权限与符号权限的转换逻辑是入门Linux运维、后端开发的必备基础。本文将从零梳理Linux的权限机制的完整原理与实操用法。1、用户在Linux中用户分为两种一种是root用户也就是我们常说的超级用户一种是普通用户也就是我们平常操作所用的用户。root用户权限高普通用户权限低受管控。Linux的大部分系统文件都不允许普通文件修改如果我们想对它们进行修改就必须切换为root用户在终端里我们可以直接通过su/su -命令来切换用户命令后面接具体的用户名时就是切换到该用户不接用户名时就默认切换到rooot用户susu -可以看到su和su -都可以切换为root用户它们两的区别就在我红框圈出来的地方使用su切换用户时所处路径会保持切换之前的位置不变使用su -则会进入所切换用户的家目录中一般情况下我们使用su就足够了。在从普通用户切换为超级用户时需要输入超级用户账号的密码从超级用户切换为普通用户就不用输密码。此外在有些情况下我只是需要超级用户的权限进行少量的操作如果反复切换用户会很麻烦这时候我们就可以用一个命令“sudo”来对我们的指令纪念性短暂的提权此命令后面接的命令会被判定为时root用户输入的命令。比如上一篇文章中我们在安装zip等命令时就使用了sudo这个命令。2、权限现在我们来正式进入对权限的学习首先我们要思考的第一个问题是权限是什么简单来说权限的本质就是你能或不能做什么事情就像上面说的你是普通用户你就不能安装原件必须是超级用户才可以。第二个问题是为什么要有权限大家不妨设想一下如果有一天公司里新来了一个实习生因为不会操作误删除了系统中的重要组件是不是会导致很严重的后果。所以要有权限的原因是为了控制用户的行为防止错误的发生。权限首先限制的是角色权限要求目标必须具备对应的属性权限角色目标权限属性。在上篇文章中关于文件属性的部分有一部分我们没有学习是因为它们都是和权限有关的属性这节课我们就来讲解一下它们。在讲解这张图之前我们需要先了解一下Linux系统中角色的概念角色分为三种分别是拥有者、所属组、其他用户。拥有者就是当时创建这个文件的用户所属组就是该用户所属的组别其他用户就是其他用户。上图中红色下划线标注的两个角色分别就是该文件的拥有者和所属组其他用户默认不显示。前面我用红框框出来的位置我们已经知道了它代表着文件的类型后面用绿框框出来的部分我们可以看到由九个字符组成我们将其每三个分为一组它们分别对应的就是拥有者、所属组和其他用户的权限类型。每组的三个字符分别代表该角色的读、写、执行权限横杠 ‘ - ’ 代表该角色无对应权限当前我们可以看到拥有者和所属组拥有读写该文件的权限其他用户只有读的权限那如果我连读都不想让其他用户读呢这时候我们就可以用chmod来更改权限chmod后接 ‘ u ’代表改变拥有者权限加 ‘ g’为所属组加 ‘ o’为其他角色加 ‘ a’为所有角色都更改后面再加减号 ‘ - ’ 代表取消某权限加加号 ‘ ’ 代表添加某权限。可以看到当前其他用户的读权限也被我去掉了我们再来试试将所有人的权限都取消。重点1、用户只能更改自己的文件权限用户只能更改拥有者为自己的文件权限我们来用一个其他文件来试试看。我先进入ubuntu的上级目录home尝试修改lighthouse的权限可以看到系统会提示我们权限等级不够无法修改该文件的权限。2、如果没有权限系统会拒绝让我们访问文件我们之前将test文件的所有权限都取消了那么此时我们还能对该文件进行访问吗我们来试一下。可以看到在取消了权限后哪怕是身为文件拥有者的我们也无法再对文件进行读写操作系统会提示我们权限不足无法访问。3、确定权限信息的时候系统会先确定用户是谁是拥有者所属组还是其他用户重点我们来做个测试先将test文件所属组和其他用户的权限恢复试试看能不能对文件进行访问。可以看到我们仍然没有权限对文件进行读写这时候就有个疑问了虽然我作为拥有者没有权限但是所属组也是我啊或者说我还在所属组里为什么明明所属组有权限我却还是无法进行访问呢这就要归功于Linux系统确定用户所属角色的机制了系统在确定用户是什么角色时只会确定一次优先确定你是什么角色就以什么角色的权限来判定你是否有权限对文件进行访问匹配顺序是拥有者 - 所属组 - 其他用户。意思就是当用户申请访问某个文件时系统就会开始确定你的角色发现你是拥有者就只会按拥有者的权限来判定判定失败了也不会接着向后确定你是不是在所属组里或者是不是其他用户第一次确定你没有权限后就结束直接判定为你没有权限访问该文件。这时候我们再试试将拥有者改成root我们能不能访问test文件。使用chown可以改变文件的拥有者使用chgrp可以改变所属组不过需要注意的是系统默认不允许我们将文件给别人想给别人就必须得是高权限所以我们将用户切换为root再进行操作。可以看到我们将文件的拥有者改为root用户后我们再尝试访问文件时系统就会确定我们为所属组成员就可以正常对文件进行访问了。4、root不受权限约束在Linux系统中root用户拥有比所有权限都更高一级的权限上述我们所说的所有权限对root用户都没有影响我们可以做个测试来验证一下。可以看到即便我们将所有人的权限都取消root依旧可以对文件进行随意访问。5、可执行权限 ≠ 文件可以执行接下来我们来了解一下可执行权限可执行权限决定了我们能否去执行一个文件但是需要注意的是拥有文件的可执行权限并不等于我们就可以执行这个文件一个文件想要被执行首先需要它本身就是一个可执行文件其次才是拥有可执行权限。我们即使给自己加上了可执行权限文件依然无法执行6、八进制数表示权限之前我们说过三种角色的权限组里都有三个字符来表示是否拥有该权限如果我们将拥有权限记作 ‘ 1 ’ 无权限记作 ‘ 0 ’ 我们就可以用三个二进制数来表示三种角色的权限就拿现在test文件的权限来举例拥有者的权限可以记作 ‘ 111 ’所属组的权限记作 ‘ 110 ’其他角色的权限记作 ‘ 100 ’将它们三个转化成八进制数并合在一起我们就得到了一组能表示文件权限内容的八进制数test的八进制数为 ‘ 764 ’。我们在修改权限时也可以通过直接输入八进制数来进行修改。三个问题在完成了上面对于权限基础知识的学习之后我们还有三个问题需要进行探讨。1、目录权限上面我们所有关于权限的讲解都是基于普通文件来进行的那么目录文件的权限与普通文件有什么区别呢我们先来看看一个基础目录都由什么权限构成可以看到目录的权限为775那现在我有两个疑问1、如果想要进入目录需要什么权限2、rwx权限对目录来说分别代表着什么接下来我们来挨个进行学习。要研究第一个问题我们就先来试试分别去掉r、w、x时去掉哪个会导致文件无法进入。可以看到当我们取消掉dtest目录的可执行权限时目录就无法进入了。由此可见想要进入目录需要的是可执行权限。接下来我们再看看第二个问题我们已经知道了x权限对目录来说意味着是否可以进入文件内部我们接着看看rw权限对目录来说意味着什么。去掉r权限当我们去掉r权限进入文件想看看当前目录下有什么文件时我们发现系统报错说我们没有相应的权限这时候我们就知道了r权限对文件来说意味着你能否查看目录里的内容。去掉w权限这回我们去掉w权限后再进入目录查看发现目录里什么都没有这时我们尝试创建一个文件我们发现我们没有权限在目录里创建文件。这可以证明w权限对目录来说意味着是否可以更改目录中的内容。此外我们还有一个拓展内容假如我们是超级用户现在我们看上了你目录里的某个文件我将它的所有人所属组都改成root将其他所有权限也都改成0这时候按我们之前所学的内容来看其他用户是不是无论如何都无法使用这个文件了但是在这个时候如果我们尝试删掉这个文件会怎么样呢这时候我们发现在我们尝试产出这个文件后系统会弹出一条信息问我们是否确定删除该文件这时候我们输入 ‘ y ’我们就成功将这个文件删除了这是为什么呢因为在Linux系统中一个文件是否能被删除与文件本身无关与文件的权限也无关只与文件所处目录的w权限有关也就是说作为目录拥有者有w权限就能删除任意在该目录下的文件管你是谁的文件我都有资格去删除。最后一点Linux中多用户之间是如何互相隔离的呢Linux系统规定任何用户都无法进入其他用户的家目录2、缺省权限相信很多同学在最开始看到文件和目录的权限时就存在一个疑问为什么默认权限时我们现在看到的这样为什么它不是别的其实在Linux系统中对于普通文件来说起始权限为666默认不带可执行权限对于目录文件来讲起始权限为777默认携带可执行权限。可是在我们上面的讲解中好像却不是这样文件默认权限为664目录默认权限为775这是为什么呢因为系统默认会存在一个叫做权限掩码的概念在命令行输入umask我们就可以看到当前的权限掩码可以看到我们当前的权限掩码为0002第一个零我们暂时忽略最终权限 起始权限 ~umask就是起始权限按位与上umask的反码。所以现在大家理解664和775是怎么来的了吧。那么umask的目的是什么呢为什么要有umask呢使用umask的目的就是希望所有在umask中出现的权限在最终权限中都不出现。至于为什么要有umask首先默认权限由操作系统本身决定在创建文件之前是无法进行认为修改的那如果我就想取消一些权限或增加一些权限就都得人为地手动修改在大型项目中就很麻烦umask就应运而生了。umask的存在其实是系统可配置、可以灵活满足需要的一种表现在特殊情况下配置umask可以控制文件的默认权限让我们的代码都是可控的。当我们尝试将umask改为0000再创建新文件时新文件的权限就变成666了。所以在使用中我们可以灵活运用umask来达成一些特殊的效果当然如果你改的太多忘记自己之前改过umask也不用担心每次重新启动机器umask都会恢复为默认值0002。3、粘滞位之前我们讲过在Linux系统中任何用户都无法进入其他用户的家目录那如果我现在就需要多个用户之间进行合作怎么办我们就只能将目录创建在家目录以外的地方。但这样也会带来一个弊端首先如果我们想所有合作的用户都可以在里面自由的创建自己的工作文件我们就必须得开放其他用户的w权限但是一旦我们开放了这个权限就意味着任何人都可以对我们的目录进行删除操作如果有别有用心的人将我们辛苦做好的文件删掉了怎么办Linux系统针对这种情况也设置了应对之法系统中设置了一个特殊的权限标志位叫做粘滞位在共享类文件里粘滞位的存在可以让非文件的拥有者无法删除文件但是所有人还是可以在当前目录下自由的新建文件。如何添加这个粘滞位呢只要在命令行输入chmod t就可以将其他用户的x权限变成特殊的t权限这个位置就被称为粘滞位。如下图所示。其实当我们进入根目录我们也可以看到Linux系统内其实默认给我们配置好了一个带粘滞位的共享文件名为 “tmp”。总结本文围绕Linux权限机制展开讲解从基础的读写执行权限、数字权限配置再到目录权限、缺省权限和粘滞位的讲解细致地带大家将Linux系统的内容学完了希望大家都能掌握我们一起进步。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价