首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Linux】Linux 权限管理入门指南

【Linux】Linux 权限管理入门指南

作者头像
用户11872857
发布2025-12-17 15:50:50
发布2025-12-17 15:50:50
3760
举报

前言

📖 本文聚焦 Linux 权限管理,从 Shell 命令原理,到用户、文件权限等核心内容,带你入门~

📚 Linux 入门篇

-【 Linux 历史溯源与指令入门 】

-【 Linux 指令进阶 】


目录

一、shell命令以及运行原理

1.1 shell是啥

1.2 Shell 命令的本质

1.3 Shell 存在的意义

二、Linux用户划分

三、Linux用户切换和指令提权

3.1 su命令

3.2 su -命令

3.3 sudo指令

四、文件访问者

五、文件类型

六、Linux文件权限管理

6.1 基本权限

6.2 文件权限值的表示方法

6.3 权限的修改

6.4 一些关于权限使用的案例

6.5 关于文件的起始权限问题

6.6 目录权限

6.7 共享文件问题

6.8 粘滞位


一、shell命令以及运行原理

1.1 shell是啥
代码语言:txt
复制
严格来说,**Linux 的核心是内核(kernel)**,但普通用户无法直接与内核交互。这时候,Shell 就登场了。Shell 是内核的 **“外壳” 程序**,作为命令行解释器(command Interpreter),它**主要承担两大任务**:

  • 将用户输入的命令翻译给内核处理;
  • 把内核的处理结果再翻译回给用户。
代码语言:txt
复制
类比 Windows 系统,我们操作 Windows 并非直接与内核交互,而是通过图形界面(如双击 D 盘盘符进入磁盘)。在 Linux 中,Shell 有着相同的作用,它解析我们的指令并传递给内核,再将内核运行的结果解析后反馈给用户。
代码语言:txt
复制
为了更形象理解,我们可以把 Shell 比作 “媒婆”。假设你(用户张三)对操作系统内核(村头的小花)有操作需求,却不方便直接 “表白”(交互),就可以通过 Shell(媒婆王婆,比如我们常用的 bash)来传达你的意思,由 Shell 把你的指令转给内核,再把内核的回应带回来。

shell 与 bash/sh的关系: 1. 概念范畴:shell 是对“命令行解释器”的统称,不特指某一款工具,相当于“水果”这类大类概念。 2. 具体实现:sh(Bourne Shell)和 bash(Bourne-Again Shell)都是 shell 的具体类型,属于“大类下的具体成员”。 3. 核心关联:sh 是最早的经典 shell 标准,奠定了基础功能;bash 是 sh 的增强版,完全兼容 sh 的语法,同时新增了更多实用功能(如命令补全、历史记录管理等),是目前最主流的 shell。 4. 日常称呼:无论实际使用的是 bash、sh 还是其他 shell(如 zsh),日常交流中都可以统称为“shell”,比如“用 shell 执行命令”。

1.2 Shell 命令的本质

指令的本质,是编译好的程序或脚本,它们会存放在系统的特定路径下。输入指令的过程,本质就是输入字符串。比如在 bash 命令行中,我们输入 ls 这样的命令,其实就是输入了一串字符,而这串字符对应着系统中特定的程序或脚本。

1.3 Shell 存在的意义

1、进行命令行的解释 2、保护OS,对于用户的非法请求,直接拦截

二、Linux用户划分

Linux下有两种用户:超级用户(root)、普通用户。

  • 超级用户】:可以在linux系统下做任何事情,不受权限约束
  • 普通用户】:在linux下做有限的事情,受权限约束
  • 命令提示符】:其中超级用户的命令行提示符是“#”,普通用户的命令行提示符是“$”

三、Linux用户切换和指令提权

3.1 su命令

语法:su [用户名] 功能:切换用户身份(获取目标用户的权限),但保留原用户核心环境变量(仅工作目录切换到目标用户家目录) 事项:

  • root 用户切换普通用户su [普通用户] 无需密码,切换后获得目标普通用户的权限(受该用户权限限制),工作目录到其家目录,但核心环境变量保留 root 配置。
  • 普通用户切换 root 用户susu root 需输入 root 密码,切换后获得 root 的最高权限(不受常规权限限制),工作目录到/root,但核心环境变量保留原普通用户配置。
  • 普通用户切换普通用户su [普通用户] 需输入目标用户密码,切换后获得该普通用户的权限(受其权限限制),工作目录到其家目录,核心环境变量保留原用户配置。
3.2 su -命令

语法:su - [用户名] 功能:切换用户身份(获取目标用户的权限),并加载其完整环境(环境变量、工作目录等,完全模拟目标用户登录) 事项:

  • root 用户切换普通用户su - [普通用户]无需密码,切换后获得目标普通用户的权限,进入其家目录,加载其完整环境变量(权限和环境完全匹配目标用户)。
  • 普通用户切换 root 用户su -su - root需输入 root 密码,切换后获得 root 的最高权限,进入/root目录,加载 root 的完整环境变量(权限和环境完全匹配 root)。
  • 普通用户切换普通用户su - [普通用户]需输入目标用户密码,切换后获得该普通用户的权限,进入其家目录,加载其完整环境变量(权限和环境完全匹配目标用户)。

上述指令本质上都属于 su 命令的范畴,其中 -su 命令的一个功能性选项,我这样拆分呈现,能更清晰地体现不同用法的差异~

在 Linux 环境中,exit 命令或者按下 Ctrl + D 组合键,主要作用是退出当前的用户会话,可以理解为 “返回” 到上一级操作环境或者退出登录状态。

  • 比如,当你通过 susu - 切换到其他用户后,执行 exit 或者按 Ctrl + D,就会退出当前切换后的用户,回到之前的用户环境;如果是从远程登录(如 ssh 登录)的会话中,执行它们则会退出远程连接,回到本地终端环境。
3.3 sudo指令

功能:普通用户临时获取高权限执行特权操作,无需切换到 root 账号 语法:sudo [需高权限的命令] 事项:

  • 密码验证:输入当前普通用户的密码(而非 root 密码),验证通过后临时提权执行命令
  • 安全与效率:减少切换 root 的操作成本,同时通过授权机制提升安全性
  • 使用前提:默认仅 root 能直接用 sudo;普通用户需由超级管理员在/etc/sudoers文件中配置授权(列入可使用 sudo 的白名单)

上面说的是我没在sudo的白名单内

四、文件访问者

  1. 文件和文件目录的所有者u(User),相当于文件 / 目录的 “创建者、拥有者”,对其有最直接的权限管理能力(类比物品的主人,能决定物品的使用规则)。
  2. 文件和文件目录的所有者所在组的用户(所属组)g(Group),指与所有者同属一个用户组的成员,可共享部分针对该文件 / 目录的权限(类似一个团队里的成员,能按团队规则使用团队内的资源)。
  3. 其它用户(其他人)o(Others),既不是所有者,也不属于所有者所在组的用户,对该文件 / 目录的权限受严格限制(类比外部人员,对非自身及非所属群体的资源,权限由所有者或系统统一规定)。

root 用户和普通用户,都能当上面说的所有者、所属组用户或者其他用户里的任意一种。说白了,root 和普通用户,跟这三种文件访问身份之间,就是用户角色和文件访问身份的关系,也就是不同类型的用户(root 或者普通用户),会以这三种身份里的一种,去和文件的权限规则打交道。

五、文件类型

  • 目录文件(d):即文件夹,用于存放文件和子目录的特殊文件。
  • 普通文件(-):文本、可执行程序、库等基本都属于普通文件。
  • 软链接文件(l):类似 Windows 的快捷方式。
  • 块设备文件(b):例如硬盘、光驱等设备文件。
  • 管道文件(p):用来进行进程间通信的文件。
  • 字符设备文件(c):例如屏幕等串口设备文件。
  • 套接口文件(s):主要用于网络通信,也可用于同一台主机上不同进程间的通信。

目前我们主要学习目录文件普通文件,别的只做了解

【文件属性】:

注意:连接数先不管,后面会学到

【文件名后缀】:

在Linux系统下,文件名后缀没有直接意义,当然,不代表不用,有可能Linux下的别的软件需要用到文件名后缀,就比如gcc这个编译器:

Linux 里文件名后缀本身不是系统强制用来区分文件类型的关键,但像gcc这样的特定软件,会通过后缀来判断文件是否是它能处理的类型(比如gcc.c为 C 源文件)。所以虽然系统不强制,但为了让这些软件能正常工作,实际使用中还是会用符合软件预期的后缀(比如写 C 代码用**.c**后缀)

六、Linux文件权限管理

什么是权限?

权限是指是否允许主体(如用户)对对象(如文件)执行特定操作的规则,和主体身份、对象属性都有关。当然权限并不能限制root用户,root用户拥有最高权限

6.1 基本权限

  • 读权限(**r**):对文件而言,可读取文件内容;对目录来说,能浏览该目录下的文件和子目录信息(比如用 ls 命令列出目录内容)。
  • 写权限(**w**):对文件而言,可修改文件内容;对目录来说,可在目录内创建、删除或移动文件(及子目录)。
  • 执行权限(**x**):对文件而言,可将文件作为程序运行;对目录来说,可使用 cd 命令进入该目录。
  • 无权限表示:“-” 表示不具有对应的读、写或执行权限。
6.2 文件权限值的表示方法

【字符表示】:

r--

只读

-w-

仅可写

--x

仅可执行

rw-

可读可写

-wx

可写和可执行

r-x

可读可执行

rwx

可读可写可执行


无权限

【8进制数值表示】:

r

4

100

w

2

010

x

1

001

rw

6

110

rx

5

101

wx

3

011

rwx

7

111


0

000

二进制中三位分别对应读、写、执行权限,1 代表有对应权限(真)、0 代表无对应权限(假);八进制中每一位分别对应所有者、所属组、其他用户这三个身份。

【示例】:

6.3 权限的修改

6.3.1 chmod命令

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

  • R:递归修改目录文件的权限(目前没用过,后面用过了来补充)

说明:只有文件的拥有者和 root 才可以改变文件的权限。

【chmod 命令权限值的格式】:

  • +:向权限范围增加权限代号所表示的权限。
  • -:向权限范围取消权限代号所表示的权限。
  • =:向权限范围赋予权限代号所表示的权限。
  • 用户符号
    • u:拥有者。
    • g:拥有者同组用户。
    • o:其它用户。
    • a:所有用户。

【示例】:

  • 执行 chmod u+x test.c:给 test.c 文件的所有者添加执行权限。
  • 执行 chmod a=rwx test.c:将 test.c 文件的所有者、所属组、其他用户权限都设为可读、可写、可执行。
  • 执行 chmod 777 test.txt:把 test.txt 文件的所有者、所属组、其他用户权限都设为可读、可写、可执行。

6.3.2 chown指令

功能:修改文件的拥有者undefined 语法:chown 参数 用户名 文件名 常用选项:

  • -R:递归修改目录及其下所有文件的拥有者(目前没用过,后面用过了再来补充)

说明:普通用户不能将文件随便给别人,一般通过sudo提权强制给别人文件。

【示例】:

普通用户不能将文件随便给别人:

因为你想给别人还不一定想要那,root可以强制给:

6.3.3 chgrp指令

功能:修改文件或目录的所属组。 语法chgrp [参数] 用户组名 文件名常用选项

  • -R:递归修改目录及其下所有文件、子目录的所属组(后面用到再补充)

说明:只有文件的所有者、root 才可以改变文件的所属组(普通用户需通过 sudo 提权后操作)。

【示例】:

root将div文件的所属组给了zyj

6.4 一些关于权限使用的案例

【案例1】:root不受任何权限约束

对于div目录root属于其他人,其他人没任何权限,但是root可以进去div目录,代表他无视了执行权限的约束

【案例2】:文件的拥有者没有读写执行权限

在权限判断时,系统会优先检查是否为文件所有者,再依次判断所属组和其他用户;即便用户同时是所有者和所属组成员,也仅以所有者权限为准。若所有者自身没有读写执行权限,那么即便身为所有者,也无法对文件执行对应操作。

6.5 关于文件的起始权限问题

先了解个知识,默认给普通文件的起始权限是666,目录文件的起始权限是777

但是从下面这幅图得知,新创建的普通文件目录文件相对应的权限分别是664、775

这里大家就会疑惑为啥不一样,这个时候就引进了权限掩码这个概念

6.5.1 权限掩码

umask 命令 功能:查看或修改文件权限掩码,影响新建文件和目录的默认权限格式:umask 权限值 说明:将默认的存取权限减去 umask 设定的权限掩码后,得到文件或目录的预设权限。超级用户(root)默认掩码值为 0022,普通用户默认为 0002

新建文件默认最大权限为 0666,新建目录默认最大权限为 0777。但实际创建的文件和目录权限并非上述值,因为会受到 umask 影响。假设默认最大权限为 mask,则实际创建的文件权限为:mask & (~umask)& 为按位与运算,~ 为按位取反运算)。

【计算示例】:

普通用户默认umask0002(八进制),转换为二进制为000 000 010。对该二进制进行按位取反操作,得到111 111 101

实际创建文件或目录时,会将文件默认最大权限(文件为0666,目录为0777)与取反后的umask值进行按位与运算,最终得到的结果就是新创建文件或目录的实际权限。比如对于目录,0777(二进制111 111 111)和111 111 101按位与,结果为111 111 101,即八进制775,这就是普通用户新建目录的实际默认权限。

从图中圈出的二进制位变化可以清晰看到,umask 二进制中为 1 的对应位置,会使得默认最大权限(文件 666 对应二进制 110 110 110、目录 777 对应二进制 111 111 111)在这些位置的权限被 “删除”。

【问题】:如何通过修改默认权限掩码,让新创建的目录文件只有执行权限

那就是要去掉三种权限的前两个位置的权限,对应的二进制掩码是110,八进制就是6,删除3种身份的所有读写权限的八进制掩码就是0666

6.6 目录权限

上面基本都是基于普通文件的权限进行介绍的,接下来讲解下目录文件的权限问题

我们从这个新创建的div文件进行探讨,刚开始的权限的111 111 101

1、去掉读权限

图中观察得知,没有查看div目录下文件的权限了,但是可以进入这个目录

2、去掉写权限

不能进行文件的创建

不能进行文件的删除

不能移动

3、去掉可执行权限

不能进入目录

Linux 目录权限中,可执行权限(**x**) 决定能否在目录下执行命令、进入目录(cd);若没有 x 权限,即便有读权限(r),也无法进入目录及执行相关操作。而若只有 x 权限但无 r 权限,虽能进入目录、执行命令(如 cd),但因缺乏读权限,无法读取目录下文件(如执行 ls 也无法列出文件)。

6.7 共享文件问题

由于普通用户自己的家目录权限是700,所以我在我的家目录下创建的文件,别人都看不到

因此,我们所创建的共享文件,不能再任何一个人的家目录下

那么我们想建立一个多用户共享的文件到底该在哪里创建呢?

我们可以在根目录下用root账号创建一个文件,并将所有权限打开,这样别的用户就可以进行任何操作了

上述是两个普通用户,目前处在共享文件中

我用第一个用户创建了一个文件,第二个用户也能看到

我用zyj用户给文件写了点东西,因为ljh用户有读的权限,所以也能查看文件内容

zyj关掉了ljh的读权限,ljh读不了文件了

ljh一气之下删掉了那个文件,是不是感觉有点奇怪,但是确实可以,因为共享目录的w权限其他人也拥有,自然也能删除该目录的子文件,那么我们该如何解决恶意删除问题呢?

有些人可能想去掉共享文件其他人的w权限,但是这样就不能创建文件了,那么共享文件自然就没有意义了,所以接下来将引入一个新的名词粘滞位

6.8 粘滞位

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由

一、超级管理员删除

二、该目录的所有者删除

三、该文件的所有者删除

这下zyj创建的文件ljh就不能删除了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、shell命令以及运行原理
    • 1.1 shell是啥
    • 1.2 Shell 命令的本质
    • 1.3 Shell 存在的意义
  • 二、Linux用户划分
  • 三、Linux用户切换和指令提权
    • 3.1 su命令
    • 3.2 su -命令
    • 3.3 sudo指令
  • 四、文件访问者
  • 五、文件类型
  • 六、Linux文件权限管理
    • 6.1 基本权限
    • 6.2 文件权限值的表示方法
    • 6.3 权限的修改
    • 6.4 一些关于权限使用的案例
    • 6.5 关于文件的起始权限问题
    • 6.6 目录权限
    • 6.7 共享文件问题
    • 6.8 粘滞位
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档