Re:Linux系统篇(七)权限篇 · 二:文件属性&&文件权限与两类修改方式精讲


◆ 博主名称: 晓此方-CSDN博客 大家好,欢迎来到晓此方的博客。
⭐️Linux系列个人专栏: 【主题曲】Linux
⭐️ Re系列专栏:我们思考 (Rethink) · 我们重建 (Rebuild) · 我们记录 (Record)


文章目录


概要&序論

这里是正在准备完结C++的此方 本文将系统介绍Linux中的权限相关内容,从文件为什么打不开,到目录的读/写/执行到底意味着什么,再到粘滞位的场景------力求全面且易于理解。好的,我们开始吧。


谈谈权限的意义

权限是什么? 权限是"能干什么和不能干什么的限制规定。 "它是用来控制用户的行为同时防止错误发生 。其首先控制的应当是 ,其次是 。而物,在Linux中又被指向一种特定的统一的事物------文件。
------------------接续上文,我们谈谈,对文件的限制。------------------

1.1文件的属性与三大权限指向对象

当我们ls-l展开文件详细信息的时候,是否有想过,文件前面的那一堆英文字母是什么意思?

bash 复制代码
drwxr-xr-x  2 root root   22 Jun 19  2025 .pip


我们将之分为两类:角色与权限。

1.1.1文件的属性------角色

  • 拥有者 (Owner):该文件(或目录)的创建者,默认拥有最高控制权。
  • 所属组 (Group):一组特定的用户集合,通过共享权限方便团队协作。
  • 其他 (Other):除了拥有者和所属组成员以外,系统里的所有人。

强调一下:角色与人是两码事儿。张三是市长,张三是他这个人,而市长是他扮演的角色,可以理解吗?

为什么没有other?other不需要记录,这里的记录方法是排除法。

为什么要有所属组?我们举例解释

在腾讯,为了保持竞争力,内部往往会有不同的工作室(比如天美、光子)同时开发同类产品。(假设在同一台机器上)

  • 如果是个人权限:光子工作室的张三写了一份《王者荣耀》的策划案,只有他能看。那他的组员李四、王五要协作怎么办?张三只能把权限开放给"所有人(Other)"。
  • 后果 :一旦开放给 Other,隔壁天美工作室的人也能直接过来把策划案拷走,这比赛还怎么打?

"所属组"就是你的"工作室" 所属组 的出现,完美解决了内部高度协作、外部严格隔离的需求。

天美工作室组

  • 组员:姚晓光、程序员 A、策划 B。
  • 权限 :他们对天美的项目代码有 rwx(能看能写能跑)。

光子工作室组

  • 组员:陈宇、程序员 C、策划 D。
  • 权限 :他们对光子的项目代码有 rwx

1.1.2文件的属性------权限

那么前面的权限呢?我们把权限分成rwx三大权限,

  • r (Read / 读):读取内容的权限。
  • w (Write / 写):修改、编辑内容的权限。
  • x (Execute / 执行):运行程序或进入目录的权限。
权限 对文件 (File) 的含义 对目录 (Directory) 的含义
r 可以查看文件内容(如 catvim 可以列出目录下的文件名(如 ls
w 可以修改文件内容 可以在目录内创建、删除、重命名文件
x 可以把文件当做程序运行 最关键! 可以进入该目录(cd),并访问其下的子文件

补充:如何理解可执行------机会不等于能力:比如一个test.c文件,默认是不可执行的,如果我们给他加上可执行,他一样也不可执行,因为它是test.c没有编译也没有链接,没有执行的能力。

每一个权限位都是两态。要么有该权限,要么没有。 同时不能颠倒顺序。

于是我们就可以以九位二进制序列 的形式来简单表述一个文件的权限,比如如下文件的权限就是111 101 101

bash 复制代码
drwxr-xr-x  2 root root   22 Jun 19  2025 .pip

抑或是严谨的说,描述一个文件的权限应当由角色与目标属性共同构成:

复制代码
该文件的权限信息是:拥有者可读可写可修改,所属组可读可执行但不可修改,其他人可读可执行但不可修改。

1.1.3补充内容:file指令查看文件真实类型

  • 指令名称:file
  • 指令重要性:★★★★☆
  • 说明:
    • file 是 Linux 中辨别文件真实类型的命令 ,是处理未知文件时的首选侦探工具
    • 基本用法file 文件名(查看文件格式、编码及架构信息)。
    • 核心价值 :Linux 系统不依赖扩展名,file 通过读取文件头部的"幻数"(Magic Number)来识别文件的本质,防止被虚假的后缀名(如将 .sh 改为 .jpg)误导。
    • 常见输出:能精准区分 ASCII 文本、ELF 二进制可执行文件、目录(directory)、甚至是图片的具体分辨率和色彩深度。
bash 复制代码
[root@VM-0-9-opencloudos ~]# file test
test: empty
[root@VM-0-9-opencloudos ~]# file .bashrc
.bashrc: ASCII text
[root@VM-0-9-opencloudos ~]# 

1.2修改文件的属性其之一------权限

1.2.1文件的权限的修改者

文件权限不能被随意修改,root在zbc用户的家目录下创建一个文件,zbc不能修改它的权限。

bash 复制代码
[zbc@VM-0-9-opencloudos ~]$ chmod 777 TEST.c 
chmod: changing permissions of 'TEST.c': Operation not permitted
[zbc@VM-0-9-opencloudos ~]$ 

然而这一切规则对于root而言都形同虚设。,root可以修改任何用户创建的任何文件。

1.2.2文件权限修改命令chomd

  • 指令名称:chmod
  • 指令重要性:★★★★★
  • 说明:
    • chmod 是Linux中修改文件/目录权限的核心命令 ,权限管理的基础工具
    • 支持两种权限表示方式:符号模式 (如 u+xgo-w)和数字模式 (如 755644)。
    • 只有文件所有者或root用户才能修改文件权限。

1.2.3符号模式

格式:chomd [修改角色] [修改权限] [文件名称]

  • 角色采用小写首字母表示:a(拥有者),g(所属组),o(other)
  • 权限如上,r(读),w(写),x(执行)
bash 复制代码
-rw-r--r-- 1 root root 0 Apr 26 06:27 TEST.c
[root@VM-0-9-opencloudos zbc]# chmod a+x TEST.c
[root@VM-0-9-opencloudos zbc]# ls -l TEST.c
-rwxr-xr-x 1 root root 0 Apr 26 06:27 TEST.c
[root@VM-0-9-opencloudos zbc]# chmod g-x TEST.c
[root@VM-0-9-opencloudos zbc]# ls -l TEST.c
-rwxr--r-x 1 root root 0 Apr 26 06:27 TEST.c
[root@VM-0-9-opencloudos zbc]# chmod o+w TEST.c
[root@VM-0-9-opencloudos zbc]# ls -l TEST.c
-rwxr--rwx 1 root root 0 Apr 26 06:27 TEST.c

1.2.4数字模式

如2.1.2所言,文件的权限可以被认为是一段九位二进制序列 。于是倘若我们将其33一组,转成十进制。于是基于 : 数字 = R ( 4 ) + W ( 2 ) + X ( 1 ) 数字 = R(4) + W(2) + X(1) 数字=R(4)+W(2)+X(1) ,例如假设你要算 rwxr-xr--:

  • 拥有者 (rwx):4 + 2 + 1 = 7
  • 所属组 (r-x): 4 + 0 + 1 = 5
  • 其他人 (r--) : 4 + 0 + 0 = 4

因此,在修改权限时可以以如下形式书写,效果一致。

chmod [十进制权限表示数][文件名称] 这种修改方式做不到"指定某一个具体的人"。

数字 权限位 (Binary) 字符 (rwx) 实际权力描述 常见场景
0 000 --- 毫无权限 少见,通常用于完全封死某个身份。
1 001 --x 仅执行 极少见,仅允许运行,甚至不能读取代码。
2 010 -w- 仅写入 极罕见,类似"盲写",不能看文件只能改。
3 011 -wx 写和执行 目录中常见,允许进入并增删文件但不能列出。
4 100 r-- 只读 常见的配置文件保护状态。
5 101 r-x 读与执行 目录标配,能进目录、能看列表,但不能改。
6 110 rw- 读与写 普通文件标配,能看能改,但不能当作程序跑。
7 111 rwx 全能 最高权限,拥有者对目录/文件的完全控制。
bash 复制代码
[zbc@VM-0-9-opencloudos ~]$ sudo chmod 777 TEST.c
[sudo] password for zbc: 
Sorry, try again.
[sudo] password for zbc: 
[zbc@VM-0-9-opencloudos ~]$ ls -l TEST.c
-rwxrwxrwx 1 root root 0 Apr 26 06:27 TEST.c
[zbc@VM-0-9-opencloudos ~]$ 

1.3修改文件的属性其之二------角色

1.3.1文件角色修改命令chown与chgrp

  • 指令名称:chown
  • 指令重要性:★★★★☆
  • 说明:
    • chown 是Linux中修改文件/目录所属用户的命令 ,权限管理中的重要工具
    • 基本用法:chown 用户名 文件名(修改文件的所有者)。
    • 支持同时修改所有者和所属组:chown 用户名:组名 文件名
    • 只有root用户才能执行chown操作(普通用户不能将自己的文件转让给其他人)。

  • 指令名称:chgrp
  • 指令重要性:★★★☆☆
  • 说明:
    • chgrp 是Linux中修改文件/目录所属组的命令 ,权限管理中的辅助工具
    • 基本用法:chgrp 组名 文件名(修改文件的所属组)。
    • 只有文件所有者或root用户才能修改文件的所属组(且所有者必须属于目标组)。
    • chown 可以同时完成 chgrp 的功能(chown :组名 文件),因此 chgrp 使用频率相对较低。

1.3.2案例参考

bash 复制代码
[zbc@VM-0-9-opencloudos ~]$ chown root test
chown: changing ownership of 'test': Operation not permitted
[zbc@VM-0-9-opencloudos ~]$ sudo chown root test
[sudo] password for zbc: 
[zbc@VM-0-9-opencloudos ~]$ ls -l test
-rwxr-xr-x 1 root zbc 48112 Apr 25 14:05 test
[zbc@VM-0-9-opencloudos ~]$ sudo chgrp root test
[zbc@VM-0-9-opencloudos ~]$ ls -l test
-rwxr-xr-x 1 root root 48112 Apr 25 14:05 test

我们发现,系统是不允许你随便把文件给别人的,因为谁都不知道你的这个文件是什么,所以出于安全考量做出这样的设计。

技巧用法,chown own:grp [文件名]

bash 复制代码
[zbc@VM-0-9-opencloudos ~]$ ls -l test
----rwxrwx 1 zbc zbc 48112 Apr 25 14:05 test
[zbc@VM-0-9-opencloudos ~]$ sudo chown root:root test
[sudo] password for zbc: 
[zbc@VM-0-9-opencloudos ~]$ ls -l test
----rwxrwx 1 root root 48112 Apr 25 14:05 test

1.4 文件权限的匹配逻辑

在 Linux 系统中,当用户尝试访问一个文件时,内核会按照严格的优先级顺序进行身份匹配。

1.4.1 匹配规则:由近及远

系统会依次判断当前用户的身份:

  • 第一优先级: 判定是否为 拥有者 (Owner)
  • 第二优先级: 若不是拥有者,判定是否属于 所属组 (Group)
  • 第三优先级: 若以上两者均不是,则判定为 其他用户 (Others)

1.4.2 核心原则:一次匹配,即刻锁定

这是最容易被忽视的一点:身份判定是一次性的。 只要匹配到了其中一种身份,系统就会立即应用该身份对应的权限,不再向下检索。

1.4.3案例分析

假设有如下文件权限设置:
----rwxrwx 1 zbc zbc 48112 Apr 25 14:05 test

bash 复制代码
[zbc@VM-0-9-opencloudos ~]$ ls -l test
----rwxrwx 1 zbc zbc 48112 Apr 25 14:05 test
[zbc@VM-0-9-opencloudos ~]$ cat "helloworld" > test
-bash: test: Permission denied
[zbc@VM-0-9-opencloudos ~]$ 

当用户 zbc 尝试访问该文件时:

  1. 身份识别: 系统检测到当前用户是 zbc,而该文件的 拥有者 (Owner) 也是 zbc。身份匹配成功!
  2. 权限锁定: 系统立即锁定"拥有者"身份,发现对应的权限位是 ---(即:无读、无写、无执行权限)。
  3. 逻辑短路: 虽然 zbc 同样属于 所属组 (Group) (该组拥有 rwx 权限),但由于第一阶段已经匹配成功,系统不再向后查看组权限。
  4. 最终结果: ```bash

    zbc@VM-0-9-opencloudos \~\]$ cat "helloworld" \> test -bash: test: Permission denied

但是以上一切对root都无意义,root拥有最高权限,包括在文件权限缺失的时候修改文件内容,直接修改不属于自己的文件的所有权。


1.5 重谈目录权限

在 Linux 中,目录本质上是一张"文件名与 Inode 的映射表"。因此,目录的 rwx 含义与普通文件大不相同:

1.5.1执行权限:进入目录

  • 核心含义 :是否允许用户进入 (cd)该目录,以及是否允许穿透该目录访问其子内容。
  • 实机演练:新建用户的家目录权限通常是严格限制的,防止其他用户窥探。
bash 复制代码
#场景:当前用户为 zbc,尝试进入用户 "otheruser" 的家目录
[zbc@VM-0-9-opencloudos ~]$ ls -ld /home/otheruser
drwx------ 3 otheruser otheruser 4096 Apr 26 20:26 /home/otheruser

#尝试进入该目录
[zbc@VM-0-9-opencloudos ~]$ cd /home/otheruser
-bash: cd: /home/otheruser: Permission denied

#结论:没有 x 权限,目录就像一堵上锁的墙,你被挡在外面,无法切换工作目录。

1.5.2读取权限:查看

  • 核心含义:是否允许列出目录里的 文件名。
  • 实机演练:如果有 r 但没有 x,你能看到文件名,但无法得知文件的详细属性(大小、权限、日期等)。
bash 复制代码
# 场景:赋予目录只读权限 (r--), 去掉 x 权限
[zbc@VM-0-9-opencloudos ~]$ chmod 444 my_dir
[zbc@VM-0-9-opencloudos ~]$ ls -l my_dir
ls: cannot access 'my_dir/test.txt': Permission denied
-????????? ? ? ? ?            ? test.txt
# 结果:虽然列出了文件名 "test.txt",但因为没有 x 权限进不去目录内部,
# 系统无法获取该文件的 Inode 详细信息,所以权限、属性位全是问号。

1.5.3写入权限 : 修改目录结构

  • 核心含义:是否允许在该目录下 创建、删除、重命名 文件。
  • 实机演练:这是最危险的权限。只要我有目录的 w 权限,我甚至可以删除我不拥有的文件!
bash 复制代码
# 场景:zbc 拥有目录 test_dir 的全开权限 (rwx),但里面有一个 root 创建的受保护文件
[zbc@VM-0-9-opencloudos ~]$ ls -ld test_dir
drwxrwxrwx 2 zbc zbc 4096 Apr 26 20:26 test_dir
[zbc@VM-0-9-opencloudos ~]$ ls -l test_dir/root_file
-r-------- 1 root root 0 Apr 26 20:26 test_dir/root_file

# 尝试删除这个 root 的文件
[zbc@VM-0-9-opencloudos ~]$ rm test_dir/root_file
rm: remove write-protected regular empty file 'test_dir/root_file'? y

# 结果:删除成功!
# 逻辑:删除文件本质上是修改"目录表"的内容(删掉那一行映射),
# 只要对目录有 w 权限,就能动这张表,而不需要对文件本身有权限。

当然root还是什么都可以干,除了正在运行从程序受保护不能改。


好了,本期内容到此结束,我是此方,我们下期再见。バイバイ!

相关推荐
sxgzzn4 小时前
光伏数智化综合平台:让光伏电站运维更智能、更高效
运维
fengyehongWorld5 小时前
TeraTerm ttl脚本登录wsl
linux·teraterm
乌托邦的逃亡者6 小时前
Linux中如何检测IP冲突
linux·运维·tcp/ip
一曦的后花园6 小时前
linux搭建promethes并对接node-exporter指标
linux·运维·服务器
乌托邦的逃亡者6 小时前
CentOS/Openeuler主机中,为一个网卡设置多个IP地址
linux·运维·网络·tcp/ip·centos
拾贰_C7 小时前
【OpenClaw | openai | QQ】 配置QQ qot机器人
运维·人工智能·ubuntu·面试·prompt
桌面运维家7 小时前
服务器进程异常监控:快速定位与排障实战指南
运维·服务器
@CLoudbays_Martin117 小时前
UniApp是否能够接入SDK游戏盾呢?
服务器·网络·网络协议·tcp/ip·安全
念恒123067 小时前
进程控制---自定义Shell
linux·c语言