文章目录
概要&序論
这里是此方, 本文将系统介绍Linux中的权限相关内容,从文件为什么打不开,到目录的读/写/执行到底意味着什么,再到粘滞位的场景——力求全面且易于理解。好的,我们开始吧。(关注CSDN获取最新内容)
https://blog.csdn.net/Z2314246476?type=blog
谈谈权限的意义权限是什么? 权限是“能干什么和不能干什么的限制规定。”它是用来控制用户的行为同时防止错误发生。其首先控制的应当是人,其次是物。而物,在Linux中又被指向一种特定的统一的事物——文件。
——————接续上文,我们谈谈,对文件的限制。—————— 1.1文件的属性与三大权限指向对象
当我们ls-l展开文件详细信息的时候,是否有想过,文件前面的那一堆英文字母是什么意思?
drwxr-xr-x 2 root root 22 Jun 19 2025 .pip
我们将之分为两类:角色与权限。
1.1.1文件的属性——角色
- 拥有者 (Owner)
- 所属组 (Group)
- 其他 (Other)
强调一下:角色与人是两码事儿。张三是市长,张三是他这个人,而市长是他扮演的角色,可以理解吗? 为什么没有other?other不需要记录,这里的记录方法是排除法。
为什么要有所属组?我们举例解释:在腾讯,为了保持竞争力,内部往往会有不同的工作室(比如天美、光子)同时开发同类产品。(假设在同一台机器上)
- 如果是个人权限:光子工作室的张三写了一份《王者荣耀》的策划案,只有他能看。那他的组员李四、王五要协作怎么办?张三只能把权限开放给“所有人(Other)”。
- 后果:一旦开放给 Other,隔壁天美工作室的人也能直接过来把策划案拷走,这比赛还怎么打?
“所属组”就是你的“工作室” 所属组 的出现,完美解决了内部高度协作、外部严格隔离的需求。
天美工作室组:
- 组员
- 权限:他们对天美的项目代码有
rwx(能看能写能跑)。
光子工作室组:
1.1.2文件的属性——权限
那么前面的权限呢?我们把权限分成rwx三大权限,
- w (Write / 写):修改、编辑内容的权限。
- x (Execute / 执行):运行程序或进入目录的权限。
补充:如何理解可执行——机会不等于能力:比如一个test.c文件,默认是不可执行的,如果我们给他加上可执行,他一样也不可执行,因为它是test.c没有编译也没有链接,没有执行的能力。
每一个权限位都是两态。要么有该权限,要么没有。 同时不能颠倒顺序。
于是我们就可以以九位二进制序列的形式来简单表述一个文件的权限,比如如下文件的权限就是111 101 101
drwxr-xr-x 2 root root 22 Jun 19 2025 .pip
抑或是严谨的说,描述一个文件的权限应当由角色与目标属性共同构成:
该文件的权限信息是:拥有者可读可写可修改,所属组可读可执行但不可修改,其他人可读可执行但不可修改。
1.1.3补充内容:file指令查看文件真实类型
- 指令名称
- 指令重要性
- 说明:
- file 是 Linux 中辨别文件真实类型的命令,是处理未知文件时的首选侦探工具。
- 基本用法:
file 文件名(查看文件格式、编码及架构信息)。 - 核心价值:Linux 系统不依赖扩展名,
file 通过读取文件头部的“幻数”(Magic Number)来识别文件的本质,防止被虚假的后缀名(如将 .sh 改为 .jpg)误导。 - 常见输出:能精准区分 ASCII 文本、ELF 二进制可执行文件、目录(directory)、甚至是图片的具体分辨率和色彩深度。
[root@VM-0-9-opencloudos ~]# file testtest: empty[root@VM-0-9-opencloudos ~]# file .bashrc.bashrc: ASCII text[root@VM-0-9-opencloudos ~]#
1.2修改文件的属性其之一——权限
1.2.1文件的权限的修改者
文件权限不能被随意修改,root在zbc用户的家目录下创建一个文件,zbc不能修改它的权限。
[zbc@VM-0-9-opencloudos ~]
然而这一切规则对于root而言都形同虚设。,root可以修改任何用户创建的任何文件。
1.2.2文件权限修改命令chomd
- 指令名称
- 指令重要性
- 说明:
- chmod 是Linux中修改文件/目录权限的核心命令,权限管理的基础工具。
- 支持两种权限表示方式:符号模式(如
u+x、go-w)和数字模式(如 755、644)。
1.2.3符号模式
格式:chomd [修改角色] [修改权限] [文件名称]
-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一组,转成十进制。于是基于:
,例如假设你要算 rwxr-xr–:
- 拥有者 (rwx)
- 所属组 (r-x)
- 其他人 (r–)
因此,在修改权限时可以以如下形式书写,效果一致。 chmod [十进制权限表示数][文件名称] 这种修改方式做不到“指定某一个具体的人”。
| | | | |
|---|
| 0 | 000 | --- | 毫无权限 | |
| 1 | 001 | --x | 仅执行 | |
| 2 | 010 | -w- | 仅写入 | |
| 3 | 011 | -wx | 写和执行 | |
| 4 | 100 | r-- | 只读 | |
| 5 | 101 | r-x | 读与执行 | 目录标配 |
| 6 | 110 | rw- | 读与写 | 普通文件标配 |
| 7 | 111 | rwx | 全能 | 最高权限 |
[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 ~] chown root testchown: changing ownership of 'test': Operation not permitted[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 ~] ls -l test-rwxr-xr-x 1 root root 48112 Apr 25 14:05 test
我们发现,系统是不允许你随便把文件给别人的,因为谁都不知道你的这个文件是什么,所以出于安全考量做出这样的设计。
技巧用法,chown own:grp [文件名]
[zbc@VM-0-9-opencloudos ~] sudo chown root:root test[sudo] password for zbc: [zbc@VM-0-9-opencloudos ~] ls -l test----rwxrwx 1 zbc zbc 48112 Apr 25 14:05 test[zbc@VM-0-9-opencloudos ~]
当用户 zbc 尝试访问该文件时:
- 身份识别: 系统检测到当前用户是
zbc,而该文件的 拥有者 (Owner) 也是 zbc。身份匹配成功! - 权限锁定: 系统立即锁定“拥有者”身份,发现对应的权限位是
---(即:无读、无写、无执行权限)。 - 逻辑短路: 虽然
zbc 同样属于 所属组 (Group)(该组拥有 rwx 权限),但由于第一阶段已经匹配成功,系统不再向后查看组权限。 - 最终结果: ```bash [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 ~] chmod 444 my_dir[zbc@VM-0-9-opencloudos ~] ls -ld test_dirdrwxrwxrwx 2 zbc zbc 4096 Apr 26 20:26 test_dir[zbc@VM-0-9-opencloudos ~] rm test_dir/root_filerm: remove write-protected regular empty file 'test_dir/root_file'? y# 结果:删除成功!# 逻辑:删除文件本质上是修改“目录表”的内容(删掉那一行映射),# 只要对目录有 w 权限,就能动这张表,而不需要对文件本身有权限。