【Linux 系统篇(四)】权限详解(一)


大家好,欢迎来到 huangjin007_ 的博客
个人主页:huangjin007_
🔥 文章收录专栏:Linux 内功修炼手册(系统篇)
总会有一些坚持
能从冰封的土地里
培育出十万朵怒放的蔷薇


Linux 系统篇(四) ------ 权限详解(一)

文章目录

  • [Linux 系统篇(四) ------ 权限详解(一)](#Linux 系统篇(四) —— 权限详解(一))
    • [一、Linux 的用户体系](#一、Linux 的用户体系)
      • [1. 超级用户 vs 普通用户](#1. 超级用户 vs 普通用户)
      • [2. su 命令](#2. su 命令)
      • [3. 临时借用管理员权限:sudo](#3. 临时借用管理员权限:sudo)
        • [3.1 谁可以用 sudo?](#3.1 谁可以用 sudo?)
    • [二、权限的本质:角色 + 目标属性](#二、权限的本质:角色 + 目标属性)
      • [1. 三种角色(访问者分类)](#1. 三种角色(访问者分类))
      • [2. 权限字符串:`ls -l`](#2. 权限字符串:ls -l)
      • [3. 基本权限:r、w、x 的含义](#3. 基本权限:r、w、x 的含义)
    • 三、修改权限和归属
      • [1. chmod:修改文件的访问权限](#1. chmod:修改文件的访问权限)
      • [2. chown:修改文件的拥有者](#2. chown:修改文件的拥有者)
      • [3. chgrp:修改文件的所属组](#3. chgrp:修改文件的所属组)
    • 四、目录权限的三个灵魂问题
      • [问题 1:目录的 r、w、x 到底管什么?](#问题 1:目录的 r、w、x 到底管什么?)
      • [问题 2:能不能只给人"进入目录"的能力?](#问题 2:能不能只给人“进入目录”的能力?)
      • [问题 3:为什么普通用户能删掉别人的文件?](#问题 3:为什么普通用户能删掉别人的文件?)
    • 结语:

一、Linux 的用户体系

  我们常说"权限管理",首先要清楚的是:系统里到底有哪些人?

Linux 的权限,本质上就是不同身份的人,对不同文件(或目录)能做不同的事情。

1. 超级用户 vs 普通用户

Linux 下的用户分为两种:

  • 超级用户(root)
      它对系统拥有绝对控制权,可以读取、修改、删除任何文件,甚至可以关机、重启、卸载软件等,一切操作几乎不受限制。
  • 普通用户
       由 root 创建,普通用户只能在自己有权限的范围内活动,无法随意修改系统关键目录(比如 /etc/usr/bin),否则终端会报错:Permission denied(权限不足)。

怎么看当前是谁?看提示符。

  • 如果命令行前面的符号是 #,说明当前是 root 用户
  • 如果命令行前面的符号是 $,说明当前是 普通用户

2. su 命令

  很多时候我们会需要在普通用户和 root 之间来回切换,就用 su(switch user)。

命令格式:

bash 复制代码
su [用户名]
  • 从 root 切换到普通用户

    因为 root 是最高权限,降级到普通用户时 不需要输入密码

  • 从普通用户切换到 root

    这时系统会提示输入 root 的密码。输入正确才能切换成功。

一个小坑:susu - 有什么区别?

  • su root 只切换用户身份,但环境变量还是原来普通用户的,可能会因为找不到命令而带来麻烦。
  • su - 或者 su - root 不但切换用户,还会加载 root 的环境变量。
    同理,从 root 切换到普通用户时,也可以使用 su - 用户名 来完整加载该用户的环境。

3. 临时借用管理员权限:sudo

  每次要用 root 权限都切到 root 用户,不但麻烦,而且长时间保持 root 状态操作系统也危险。所以 Linux 提供了一个更灵活的工具:sudo

  sudo 的全称是 Super User DO,意思是"以超级用户身份做某事"。

你不必完全变成 root,但可以让某一条命令临时拥有 root 的权限。

比如普通用户安装软件:

bash 复制代码
sudo apt install vim

  输入当前用户的密码(注意不是 root 密码),系统确认该用户有 sudo 权限后,就会以 root 身份执行这条命令。

3.1 谁可以用 sudo?

  不是每个普通用户都能直接用 sudo,必须由管理员事先授权。授权配置文件在 /etc/sudoers

一个典型的授权行如下:

  意思是用户 whb 可以在任何主机上以任何身份执行任何命令,即拥有完全 sudo 权限。

  如果未授权的用户尝试用 sudo,会收到报错:

复制代码
whb is not in the sudoers file.  This incident will be reported.

二、权限的本质:角色 + 目标属性

Linux 权限设计可以用一句话概括:

谁(Who),对什么(What),能做什么(How)?

这就是权限的"人---事物---能力"模型。

1. 三种角色(访问者分类)

对于任何一个文件或目录,Linux 会把可能接触它的人分成三类:

  • 拥有者(Owner,用 u 表示)

      通常是创建文件的那个人。拥有者对该文件有最高的话语权(除了 root 可以无视一切)。

  • 所属组(Group,用 g 表示)

       把文件归属到一个用户组,组里所有成员共享对该文件的同一套权限。比如一个项目组的同事都需要读写某个共享文件,就会把他们放入同一个用户组。

  • 其他人(Others,用 o 表示)

       既不是拥有者,也不在所属组里的其他用户。系统和外界"访客"通常就落在这类。

重要特性:三类角色是互斥的。

  系统在判断权限时,会按拥有者 -> 所属组 -> 其他人的顺序检查,只要匹配到其中一个身份,就直接使用对应的权限,不再往后看。


2. 权限字符串:ls -l

  当我们执行 ls -l 查看文件时,最左侧会看到一串类似 -rw-rw-r-- 的符号,一共 10 个字符。

我们拆解-rw-rw-r--这个字符串:

位序 含义
第 1 位 文件类型 - 表示普通文件
第 2~4 位 拥有者(u)的权限 rw- 读、写、不可执行
第 5~7 位 所属组(g)的权限 rw- 读、写、不可执行
第 8~10 位 其他人(o)的权限 r-- 只读

第 1 位的常见符号:

  • - :普通文件(文本、图片、可执行程序等)
  • d :目录(文件夹)
  • l :软链接(类似 Windows 快捷方式)
  • b :块设备文件(如硬盘、U 盘)
  • c :字符设备文件(如键盘、鼠标、终端)
  • p :管道文件(用于进程间通信)

3. 基本权限:r、w、x 的含义

每个角色都能获得三种基本权限的组合:

  • r(读,Read)
  • 对文件:可以查看文件内容(用 catmore 等)。
  • 对目录:可以列出目录下有哪些文件(用 ls)。
  • w(写,Write)
  • 对文件:可以修改文件内容(用 vimecho > 等)。
  • 对目录:可以在目录下创建、删除、重命名文件(touchrmmv 等)。
  • x(执行,eXecute)
  • 对文件:可以把文件当作程序运行。
  • 对目录:可以"进入"该目录(用 cd)。

如果某个位置是 -,就表示 没有该项权限

八进制数值表示法:

  每一组权限(u/g/o)的 rwx 如果存在看成 1,是 - 就看成 0。

rwx -> 111 = 7

rw- -> 110 = 6

r-x -> 101 = 5

r-- -> 100 = 4

  所以整个文件权限可以简洁地用三个数字表示,如 755、644 等。

例如 -rwxr-xr-- 的数值表示就是 754:

拥有者:rwx = 7

所属组:r-x = 5

其他人:r-- = 4


三、修改权限和归属

1. chmod:修改文件的访问权限

chmod(change mode)就是用来设置文件或目录权限的命令。

格式:

bash 复制代码
chmod [选项] 权限 文件名

谁可以改?

  • 文件拥有者root 可以改权限,其他人不行。

权限的表达方式有两种:字符法数字法

(1)字符法

格式为:[用户符号][操作符][权限字符]

用户符号:

  • u:拥有者
  • g:所属组
  • o:其他人
  • a:所有人(all,相当于 ugo 一起)

操作符:

  • +:增加某个权限
  • -:去掉某个权限
  • =:强制设置为某个权限(会覆盖之前的)
(2)数字法

  用三个八进制数字分别代表 u、g、o 的权限。


2. chown:修改文件的拥有者

chown(change owner)用来更换文件的主人。

格式:

bash 复制代码
chown [选项] 新用户名 文件名

注意:这个操作是管理员的专属权力。

  普通用户不能把文件的所有权交给别人,这是系统安全设计。如果普通用户执行 chown,会提示 Operation not permitted

  若确实需要,必须配合 sudo 提权:

bash 复制代码
sudo chown user1 f1

3. chgrp:修改文件的所属组

chgrp(change group)用来修改文件属于哪个用户组。

格式:

bash 复制代码
chgrp [选项] 组名 文件名

  同样,修改组也可能需要相应权限,通常文件拥有者可以把自己的文件改到一个他所属的组,但跨组改动往往也需要 sudo


四、目录权限的三个灵魂问题

  很多容易把"目录的权限"和"文件的权限"混为一谈。下面三个问题帮你彻底拔掉这个钉子。

问题 1:目录的 r、w、x 到底管什么?

权限 对目录的意义 对应的能力
r 可以读取目录的内容列表 能执行 ls 查看目录下有哪些文件名
w 可以修改目录的内容 能在目录下创建、删除、重命名文件(touchrmmv
x 可以进入目录 cd 进入该目录,作为当前工作目录

  很明显,对于目录来说,x 权限是基础。如果一个目录你没有 x 权限,就算它有 r 权限,你也无法进入,完全拿它没办法。

问题 2:能不能只给人"进入目录"的能力?

  假设我们有一个目录 test_dir,现在只给其他人 x 权限:

bash 复制代码
chmod o=x test_dir

此时其他用户(o)的权限是 --x

会发生什么?

  • 该用户可以 cd test_dir 成功进入目录。
  • 进入后执行 ls 会报错,因为没有 r 权限,看不到文件列表。
  • 但是!如果该用户事先知道目录里某个具体文件的完整路径,比如 test_dir/readme.txt,并且他对那个文件拥有读权限,那么他就可以直接 cat test_dir/readme.txt 读取文件内容。

理解:你朋友家门牌号被遮住了(没有 r),但你记住了路(有 x),依然可以走到门前。只要门本身是开着的(文件有 r 权限),你就能看到里面的内容。

这里还要注意一点:

任何用户,无法进入其他用户的家目录!

问题 3:为什么普通用户能删掉别人的文件?

  假设有两个普通用户 alicebob,他们在同一个目录 /shared 下工作,目录权限是 rwxrwxrwx(777)。

  alice 创建了一个文件 alice.txt,权限是 rwx------(只有 alice 自己能读写执行)。

  现在 bob 去删这个文件:

bash 复制代码
rm /shared/alice.txt

  结果竟然删掉了! 明明 bob 对 alice.txt 没有任何写权限啊?

原因在于 Linux 的一个核心逻辑:

  删除一个文件,本质上并不是修改这个文件的内容,而是在修改它"所在目录"的内容。

  你把目录想象成一个花名册,删除文件只是从名册上划掉一个名字。至于文件本身的属性,并不直接决定能否被删除。

所以,删除文件需要的能力是:

  • 所在目录 拥有 w(写) 权限(能修改名册)
  • 所在目录 拥有 x(执行) 权限(能进入该目录到达名册前)
  • 文件本身的权限,删除时不关心。


结语:

  今天的内容到这里就结束了,希望你能有所收获~

干货整理到手抖,觉得有用的话,赏个三连回回血?__(:ᗤ」ㄥ)_ _

相关推荐
AOwhisky19 小时前
Python 学习笔记(第十一期)——运维自动化(上·后篇):进程级监控与子进程管理——psutil进阶
运维·开发语言·python·学习·云原生·运维开发
杯酒慰风尘19 小时前
chmod 权限计算器使用指南:读懂 755、rwx 与特殊权限
linux
REDcker19 小时前
eBPF 运行时架构:Verifier、JIT、Map 与加载流程
linux·内核·ebpf·bpf
老大白菜19 小时前
Omnigent(omni)使用说明
服务器·数据库·microsoft
程序员-李俞19 小时前
向量引擎接入自研 API 中转网关:鉴权、限流、熔断和审计日志复盘
服务器·人工智能·大模型·api·ai编程·ai api
Zsy_05100320 小时前
【Linux】笔记01:基础命令
linux·运维·服务器
砍材农夫20 小时前
运维|devops|nginx|基本配置拆解
运维·nginx·devops
糖果店的幽灵21 小时前
【langgraph 从入门到精通graphApi 篇】Memory 与长期记忆
运维·服务器·人工智能·langgraph
zhangfeng113321 小时前
免费白嫖方案todesk替代 ,RustDesk — 最接近 ToDesk 体验的开源方案,todesk链接海外电脑服务器要收费,
运维·服务器·开源