Linux:权限

发布时间:2026/5/20 5:32:40

Linux:权限 1. 权限的概念1.1 基础概念Linux 系统中的权限是对文件、目录等系统资源设定的访问规则核心是限定不同用户对资源的操作范围。系统将访问者分为所有者、所属组、其他用户三类主体同时为每类主体分配读、写、执行三种基础操作权限只有拥有对应权限的用户才能对资源执行查看、修改、运行等操作以此规范用户对系统资源的使用行为。1.2 为什么要有权限因为Linux是一个多用户共同使用的操作系统因此之所以要有权限是因为以下几点1. 保障系统安全限制普通用户对系统核心文件、其他用户私有数据的访问避免误操作或恶意修改导致系统崩溃、数据丢失同时防止未授权用户窃取、篡改重要信息。2. 实现资源隔离区分不同用户的个人数据和公共资源让每个用户的文件、配置等信息互不干扰保证个人数据的私密性也让系统资源的使用更有序。3. 适配多用户协作通过所属组权限的设置能为团队内的用户组分配统一的资源访问权限既满足团队协作中对共享资源的使用需求又能限制组外用户的访问兼顾协作效率与数据安全。4. 规范系统管理明确 root 超级用户与普通用户的权限边界普通用户无法随意修改系统关键配置只有管理员能进行系统级操作保证系统运行的稳定性和规范性。2. Linux中的用户体系Linux 核心分为超级用户和普通用户两大类同时通过用户组实现用户的分组管理。超级用户root系统的最高权限用户UID用户 ID固定为 0拥有操作系统的全部权限不受文件权限、系统配置等规则的限制可以执行所有系统操作包括修改核心配置、管理所有用户和硬件资源是系统的管理员。日常操作中不建议长期使用 root 用户避免误操作导致系统损坏。超级用户的命令提示符是“#”。普通用户由 root 用户创建的常规用户UID 从 1000 开始不同系统略有差异权限受到严格限制只能操作自己的文件、目录以及公共的可读可执行资源无法修改系统核心配置或访问其他用户的私有数据主要用于日常登录、办公、开发等场景。普通用户的命令提示符是“$”。用户组是用户的集合用于批量管理权限。一个用户可以属于一个主组也可以加入多个附加组。系统通过用户组简化权限配置例如将同团队的用户加入同一用户组为该组分配文件权限即可让组内所有用户拥有相同的访问权限无需为每个用户单独配置权限。3. Linux 中的角色Linux 中的 “角色” 本质是用户身份与用户组身份权限的分配最终作用于这些角色三者形成完整的权限管理体系核心角色划分权限管理围绕三个核心角色展开文件 / 目录的所有者、所属组、其他用户。所有者是文件的创建者所属组是所有者所属的用户组其他用户则是系统中除前两者外的所有用户。就比如这里的第一个 chen 代表这个文件的所有者是chen 同时chen这个用户在 chen 这个用户组里面。角色与权限的绑定系统会根据用户的身份匹配对应的权限优先判断用户是否为文件所有者若不是则判断是否属于文件所属组最后判定为其他用户分别应用对应的读r、写w、执行x权限。这种角色划分方式让权限管理既精准针对个人又高效针对群体。角色的切换普通用户可以通过 su 或 sudo 命令切换角色 sudo 允许普通用户临时执行高权限命令需 root 授权 su 可以切换到 root 或其他用户实现不同角色的权限切换兼顾安全性与操作灵活性。其中root可以随意切换到其他普通用户但是普通用户和普通用户之间在切换的时候需要输入目标用户账号的密码并且普通用户切换成root的时候也需要输入密码。4. 基础指令4.1 su 指令命令su [用户名]功能切换用户。例如要从 root 用户切换到普通用户 user则使用 su user。要从普通用户 user 切换到 root 用户则使用 su rootroot 可以省略此时系统会提示输入 root 用户的口令。但是要注意这个用法大家会发现一开始登陆了chen这个用户之后这个用户的路径是 /home/chen 当使用 su 命令切换成root时发现路径还是 /home/chen 按道理来说切换成 root 用户路径应该变成 /root 啊。这就是因为 su 指令仅仅只能做到切换用户是在同一次登录当中切换成了另一个用户而已。而 su - 这个指令是以重新登陆的方式进行切换用户所以路径会发生改变同时大家也会发现输入 su - 之后会有一个 last login 就是最新登录的意思。4.2 sudo 指令定义sudo 是 super user do以超级用户身份执行命令的缩写核心是让当前用户临时获得其他用户默认 root的权限执行指定命令。执行时验证的是当前用户自身的密码而非目标用户的密码且权限受 / etc / sudoers 配置文件严格限制。总结来说就是短期内给普通用户提升权限让其能完成一些操作。像这里我们在使用普通用户去 touch 一个新文件 hello.txt 的时候创建人名称写的就是 chen 而我们想要使用 sudo 以 root 身份去创建一个文件的时候系统首先会让我们输入密码并且这句话 [sudo] password for chen 意味着我们要输入当前所登陆的普通用户的密码。很多人会误以为竟然只需要输入我自己的账号密码那不就意味着我可以随意变成 root 为所欲为了吗。这时/ etc / sudoers 配置文件 就发力了。因为你的超级用户 root 并没有将 chen 这个用户配置到 / etc / sudoers 文件当中那么 chen 这个账户就不具有能使用 sudo 指令的权限。之所以还需要你输入当前用户的密码是因为要确认当前操作终端的人就是这个用户账号的合法持有者。二次确认操作防止他人盗用你的登录终端后随意执行高权限命令。5. Linux权限管理5.1 文件类型d: 文件夹-: 普通文件l: 软链接类似Windows的快捷方式b: 块设备文件例如硬盘、光驱等p: 管道文件c: 字符设备文件例如屏幕等串口设备s: 套接口文件5.2 访问权限读r/4Read对文件而言具有读取文件内容的权限对目录来说具有浏览该目录信息的权限写w/2Write对文件而言具有修改文件内容的权限对目录来说具有删除移动目录内文件的权限执行x/1execute对文件而言具有执行文件的权限对目录来说具有进入目录的权限结合文件类型我们这时就可以看懂 ls -al 指令展示出来的大部分内容了。首先我们说过文件属性开头的第一个符号代表文件类型d 就代表文件夹 - 就代表普通文件。然后以第一行中的 rwxrwxr-x为例我们每三个为一组这就代表了权限范围从左往右分为三组 rwx rwx r-x 这分别代表拥有者权限、所属组权限、other权限。比如rwx就代表可读、可访问、可执行r-x就代表可读、不可写、可执行。并且这个组合的顺序一定是 是否可读 是否可写 是否可执行。大家来看这样一个例子这是一个普通用户 chen 我们将 hello.txt 这个文件的拥有者权限的 读写权限 全部去掉然后我们使用 cat 指令去打开 hello.txt 这个时候会发现chen没有权限去打开这个文件。以拥有者的权限角度去看确实因为我的读的权限被去除了。但是大家要发现此时的所属组也是 chen chen 单独成组也是可以的那chen虽然不是拥有者但它属于chen这个所属组啊所属组的读取权限又没有被去除为什么还是不能读取文件呢这是因为用户访问文件的时候确定自己相对于文件的身份角色就只会验证一次。所以这里的逻辑是首先是 chen 这个用户要执行打开文件的操作于是拿着 chen 这个名称去依次比对。chen 是拥有者吗是的。那么进入拥有者权限中去查看权限结束。此时就不会再去下一个权限也就是所属组权限去比对了。5.3 chmod 指令功能设置文件的访问权限格式chmod [参数] 权限 文件名常用选项R - 递归修改目录文件的权限说明只有文件的拥有者和root才可以改变文件的权限chmod命令权限值的格式用户表示符/-权限字符: 向权限范围增加权限代号所表示的权限- : 向权限范围取消权限代号所表示的权限 : 向权限范围赋予权限代号所表示的权限用户符号u拥有者g拥有者同组用o其它用户a所有用户这里的 chmod u-w code.c 就代表着要将 code.c 这个文件中的拥有者权限中的 w 可写权限给去除。所以当执行完之后大家可以看到 code.c 文件中的拥有者权限从 r w - 变成了 r - -同样的要加入权限可以这样写或者还可以这样组合使用5.4 chown 和 chgrp 指令chown功能: 修改文件的拥有者格式: chown [参数] 用户名 文件名chgrp功能: 修改文件或目录的所属组格式: chgrp [参数] 用户组名 文件名常用选项:-R 递归修改文件或目录的所属组对于这两个指令都需要一定的权限才能去进行修改比如超级用户 root 可以随意修改文件的拥有者和所属组。如果是普通用户想要修改的话只能借助 sudo 指令。5.3 文件权限值的表示方法字符表示方法8进制数值表示方法所谓的字符表示方法就是我们前面提到的 读 r 、写 w 、执行 x。那么对于这三种权限每种都有两种状态可以、不可以。那么我们将 可以的视为 1 将不可以的 视为 0。并且三种权限就代表三个比特位。因为数字是 0~7 所以就代表八进制。像我们平时正常使用的大多就是十进制所用的数字就是 0~9还有时间上使用的是六进制使用的数字就是 0~5 。因此我们还可以这样去修改文件属性:这里我们使用的命令是 chmod 760 数字7在二进制的三个比特位下就代表 111 所以是可读、可写、可执行。数字 6 在二进制的三个比特位下就代表 110 所以是可读、可写、不可执行。数字 0 在二进制的三个比特位下就是 000 所以代表 不可读、不可写、不可执行。6. 关于权限的三个问题1. 如果要进入一个目录需要什么权限答案需要 x 可执行权限。大家可以从这段代码当中看到当我将 3_24 这个目录的 x 执行权限去除之后我想要转入 3_24 这个文件就是不被允许的了。2. 为什么我们新建的目录或文件的权限的初始值是我们所看到的样子比如在这里我们新建一个目录的时候用八进制表示法表示权限就是 775 。新建一个文件的时候权限就是 664 。首先要理解一个结论对于一个普通文件权限默认是 666 。对于一个普通目录权限默认是 777 。因为我们之前说过Linux下一切皆为文件。而普通目录和普通文件的缺陷就在于 可执行权限 x 上因为初始创建一个目录最重要的作用就是进入这个目录所以会有 x 权限。这就是为什么普通目录的初始权限都比普通目录多 1 。那之所以在显示器上呈现出来的是 775 和 664 。是因为在Linux系统中为了对权限进行更加细致的控制所以有一个权限掩码的概念。它是 Linux 中用于默认限制新文件 / 目录权限的配置值它会从系统预设的基础权限中 “减去” 自身对应的权限从而决定新建对象的最终权限。所以以一个普通文件举例我们在显示器上所看到的 664 的权限叫做最终权限那么这个最终权限的结果是通过这样的计算得到的最终权限 起始权限 “减去” 权限掩码我们输入 umask 可以查看权限掩码对于超级用户来说权限掩码就是 0022 。对于普通用户来说权限掩码就是 0002 。我们只需要看后三位。对于上图中 world.txt 文件来说这是一个普通文件起始权限是 666 因为权限掩码是002所以用起始权限 “减去” 权限掩码得到 664 。这就是显示在屏幕上的最终权限。我们在上面所说的 “减去” 都是加了引号的说明真实情况下并不是真的单纯减去在这里这么说只是方便大家理解实际上是这样的最终权限 起始权限 ~权限掩码也就是说要先将权限掩码按位取反再和起始权限进行按位与操作。要注意这里是 起始权限 ~umask 即 110 110 110 111 111 101 任何数和 1 按位与得到的结果都是它本身任何数和 0 按位与得到的结果都是 0 。于是就有了上面的答案。3. 如果一个文件或目录的权限是不可读、不可写、不可执行那可以删除吗大家看这个例子在一个目录 dira 下有一个文件 hello.txt 它的权限是 000 即不管是哪个用户权限都是不可读、不可写、不可执行。那能把它删除吗答案是要看情况。在这里我们将这个文件顺利的删掉了。那么我删掉这个目录里的文件到底依靠的是什么权限呢我们回退到上级目录发现 dira 这个目录的权限对于chen这个用户或者 chen 这个拥有组都是打开的。这个时候我们就要思考一个问题目录里面存的都是什么当然都是文件了。那我想要修改目录里面的文件肯定就是依靠目录的是否可写的权限也就是说这个目录对于 chen 这个用户来说权限是 rwx 即可读、可写、可执行。那么就意味着chen 这个用户可以任意的删除dira这个目录当中的所有文件哪怕这个目录中的有一个文件的拥有者、所属组不是 chen 或者该文件对于 other 来说没有写的权限chen依然可以将这个文件删除。因为chen实际上是在对dira这个目录进行操作啊。7. 粘滞位粘滞位是 Linux 系统中的一种特殊权限设置主要针对公共可写目录如/tmp核心作用是限制目录内文件的删除 / 重命名权限只有文件的所有者、目录的所有者以及 root 用户才能删除或重命名目录中的文件普通用户无法删除其他用户的文件避免了公共目录下的文件被误删或恶意删除。在权限表示上粘滞位会用t标识对应其他用户的执行位若原本有执行权限显示为t无则显示T设置命令通常为chmod t 目录名。服务器的/shared目录是所有开发人员的公共共享目录所有人都有rwx权限可在其中创建文件、查看文件。如果不设置粘滞位开发人员 A 创建的脚本文件开发人员 B 可以随意删除、重命名容易造成数据丢失或工作失误。设置粘滞位后执行chmod t /shared此时只有 A、root 能删除自己的文件B 无法删除 A 的文件既保留了公共目录的文件共享功能又保障了文件的安全性。使用指令 chomd t /shared 之后原先的 x 权限就会变为 t 。在超级用户的根目录下会默认存在一个tmp的共享目录它就是粘滞位限制的一个目录。本文到此结束感谢各位读者的阅读如果有讲解的不到位或者错误的地方欢迎各位读者批评或指正。

相关新闻