代码改变世界

实用指南:【把Linux“聊”明白】权限的本质与管理全解

2025-12-13 15:14  tlnshuju  阅读(3)  评论(0)    收藏  举报

在这里插入图片描述

权限的本质与管理全解

前言:学习 Linux 时,最常遇到的问题之一就是“权限不足”。本文从基础到进阶,讲解 Linux 权限的组成、设置与管理,让你真正理解 rwx 权限的意义。
专栏【把Linux“聊”明白】



一、基本概念

首先,我们要知道,Linux下有两种用户:超级用户(root)、普通用户。

  • 超级用户:可以在linux系统下做任何事情,不受限制
  • 普通用户:在linux下做有限的事情。
  • “$”就是超级用户的命令提示符是“#”,普通用户的命令提示符

命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则应用su user。
要从普通用户user切换到root用户则利用su root(root允许省略),此时环境会提示输入root用户的口令。
实例:

在这里插入图片描述

在这里我们再介绍一个su -,用法是一样的,有一点不同:

su:只切换用户身份,但保持原用户的工作环境(环境变量、工作目录等)。
su - 或 su -l:切换用户身份,并同时切换到该用户的完整登录环境。

实例:

在这里插入图片描述

说明(基础都知道):
从超级用户->普通用户,权限降低;
从普通用户->超级用户,权限提高;
提高有什么用,简单来说,由于很多文件不允许普通用户操作。

二、Linux权限管理

2.1 “权限”详解

首先,大家要知道权限是什么?

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

其次,为什么要有权限?

在日常生活中,大家都听过,“谁谁谁没有权限做什么操作……”
为了控制用户的行为,防止错误的发生。就是权限就
,它不具备玩游戏的“属性”呀)。就是这里也很好理解,权限首先限制的是角色(谁有我的权限),权限还要求目标必须具备对应的属性(也就是,我想在LeetCode上玩游戏,但
所以,权限=角色+目标权限属性(目标有什么权限)
通俗一点,哪个角色有目标的什么权限。
资料,那文件有什么权限呢–>就是在Linux下,一切皆档案,面对的都读、写、执行

2.2 权限=角色+目标权限属性

  1. 看现象:
    下面,我们来看一下我在一个目录下列出该目录下于是文件和目录的详细信息:

在这里插入图片描述

内容,文件=内容+属性。就是这里显示的就是档案或者目录的属性,因为文件不仅仅
那我们来详解一下这些属性都代表什么意思:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  1. 角色
    前面我们说到:权限=角色+目标权限属性,那在Linux中角色有什么呢,在上图我们看到,有所有者,所属组,那对于每一个角色都要一一列举嘛,显然不是,除了这两个其它的角色都称为“其它”,所以在Linux中:
  • 文件访问者的分类(角色)有以下三种:

文件和文件目录的所有者:u—User(所有者)
文件和文件目录的所有者所在的组的用户:g—Group(所属组)
其它用户:o—Others(其它)

对于所属组,我们来方便介绍一下,我们可以用一个公司的部门来做一个形象的比喻:

概念比喻说明
文件所有者项目负责人该文件的“主人”,拥有最高的控制权。
所属组项目组/部门这个文档所关联的团队,这个团队里的所有成员都享有为这个组设定的权限。
其他用户公司其他部门不属于这个项目组的其他所有人。

Others。就是但是,我们在上面的截图中为什么不见Others呢,很简便,Others不需要记录,除了所有者和所属组其它的都

  1. 基本权限
    那这些权限具体是什么呢?
    在这里插入图片描述

读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
写(w/2):Write对文件而言,具有修改材料内容的权限;对目录来说具有删除移动目录内记录的权限
执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
“-”表示不具有该项权限

  1. 文件类型(提到了就说一下)
    接下来,我们吧把角色和目标权限属性(基本权限)和起来看一下文档权限值的具体表示方法。
    在此之前,说到这了。看一下Linux中文件类型都有哪些吧:
    文件类型:

d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串⼝设备)
s:套接口文件

  1. 权限具体
    在这里插入图片描述
    在这里插入图片描述
    可以看出suxi(所有者)对test.cpp有读写权限,没有可执行权限,当然,所属组要是suxi,就不说了,然后,其它角色只有读权限。
    这还是比较好理解的。
    那下面我们来看一下如何改变权限。

三、记录访问权限的相关设置技巧

3.1 chmod(最常用)

功能:设置文件的访问权限
格式chmod [参数] 权限 文件名
常用选项

  • -R -> 递归修改目录文件的权限
  • 说明:只有文件的拥有者和root才允许改变档案的权限

chmod命令权限值的格式

用户表示符+/-权限字符

  • +: 向权限范围增加权限代号所表示的权限
  • -: 向权限范围取消权限代号所表示的权限
  • =: 向权限范围赋予权限代号所表示的权限

用户符号:

  • u: 拥有者
  • g: 拥有者同组用户
  • o: 其它用户
  • a: 所有用户

实例

在这里插入图片描述

3.2 文件权限值的表示方法

  1. 字符表示方法(前面说过)
  2. 进制数值表示方法(重点说一下)

在这里插入图片描述
说,对于任意一个角色,最大的数字组合(权限)为就是其他位类似,那也就111,最小为000。此时,转为8进制即为最大7,最小0;

所以大家也可以通过三位8进制数字在改变权限,
实例
在这里插入图片描述

我们上面改变了文件的权限属性,如果我们要改变权限的所属角色,怎么办?看下面。

3.3 chown

功能:修改档案的拥有者
格式chown [参数] 用户名 文件名
实例
在这里插入图片描述
这里,我们再说一个提高权限的方法,也是最常用的:sudo
把我们用户放在一个类似于白名单的文件中。就是sudo是用来进行指令的短暂提权的。它允许一个被授权的普通用户以另一个用户(通常是 root 超级管理员)的安全权限来运行命令,而无需知道 root 的密码,也无需长时间保持在 root 权限状态。但是,它需要我们被授权,也就
采用前需在 /etc/sudoers 资料中授权,所以,就需要改文件信息,使用vim。这个我后面在讲解vim编辑器的时候会有所说明。
现在就先用su吧,这里就先了解一下。看实例:
在这里插入图片描述

3.4 chgrp

功能:修改文件或目录的所属组
格式chgrp [参数] 用户组名 文件名
常用选项-R 递归修改文件或目录的所属组
实例
在这里插入图片描述

提醒:su之后退回到普通用户Ctrl+d就行,或者exit。

3.5 细节问题

  1. 一个普通用户能够改任何人的文件权限吗?
    不可以,普通用户只可以改变自己的文件权限。(能改的话就乱套了)

  2. 倘若大家没有权限会怎么办,前面已经遇到了。
    系统会拒绝让我们访问
    在这里插入图片描述

  3. 看现象:
    在这里插入图片描述
    即在确认权限信息时,系统确认的顺序是所有者、所属组、其它;在Centos下,用户角色只确定一次。

  4. root超级用户不受权限限制。

  5. 可执行权限 != 文件可执行
    你给test.cpp执行的权限它也执行不了。文本源码(如 .c/.cpp/.txt)即使设置了 x,没有编译成二进制,也无法“直接运行”。

3.6 umask

功能

  • 查看或修改文件掩码

  • 对于新建材料默认权限=0666

  • 对于新建目录默认权限=0777
    在这里插入图片描述

  • 但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是:mask& ~umask

  • 说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。最前面这个0一般都忽略。
    在这里插入图片描述
    可见,umask 目的是:凡是在umask中出现的权限,都不应该在最终权限中出现。
    那为什么要有umask呢?(简单了解)

  1. 默认权限,有OS自主决定,无法在创建前进行修改 — 系统可配置,可以灵活满足需要的一种表现;
  2. 特殊情况下,安装umask,可能控制文件的默认权限,让我们的代码都是可控的。

通过所以,我们是能够改变umask的值。
实例:
在这里插入图片描述

四、目录的权限

对于普通档案的权限来说,读、写、执行,很好理解。那rmx对于目录来说,意味着什么?

  • 可执行权限:假设目录没有可执行权限,则无法cd到目录中;
  • 可读权限:如果目录没有可读权限,则无法用ls等命令查看目录中的文件内容;
  • 可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件。
    在这里插入图片描述

所以前面我们说,对于新建目录默认权限=0777,不难理解。
在这里,我们也行看一下用户suxi所处的目录信息:
在这里插入图片描述
这样也就很好的理解了Linux下多用户是如何"隔离"的。
但是如果两个用户之间要进行资料级别的协作呢?那么文件就不能放在任何一个私人账号下,有权限的限制。
有了目录的权限的理解,我们在来看个问题
换句话来讲,就是只要用户具有目录的写权限,用户就可以删除目录中的文件,而不论这个用户是否有这个文件的写权限。
这好像不太科学啊,我张三创建的⼀个文件,凭什么被你李四可以删掉?我们用下面的过程印证一下。

在这里插入图片描述

为了解决这个不科学的难题,Linux引入了粘滞位的概念。

五、粘滞位

在这里插入图片描述
在这里插入图片描述
这样就很好的处理了多人进行记录级别的协作时不可以删除不属于自己的文件了。
总结
当⼀个目录被设置为"粘滞位"(用chmod+t),则该目录下的文件只能由

  1. 超级管理员删除
  2. 该目录的所有者删除
  3. 该记录的所有者删除

六、关于权限的总结

  • 目录的可执行权限是表示你可否在目录下执行命令。
  • 要是目录没有-x权限,则无法对目录执行任何命令,甚至无法cd进入目录,即使目录仍然有-r读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
  • 通过而如果目录具有-x权限,但没有-r权限,则用户能够执行命令,允许cd进入目录。但由于没有目录的读权限
  • 所以在目录下,即使允许执行ls命令,但仍然没有权限读出目录下的文档。

在这里插入图片描述


七、总结

Linux 安全与多用户协作的核心所在。就是权限体系
理解它,不仅能让你避免“Permission denied”的尴尬,也能让你在系统管理中更加游刃有余。


如果本文对您有启发:
点赞 - 让更多人看到这篇硬核技术解析 !
收藏 - 实战代码随时复现
关注 - 获取Linux系列深度更新
您的每一个[三连]都是我们持续创作的动力!

请添加图片描述怎么样了