Linux—Linux中的权限管理

Linux中的权限管理

  • 前言
  • 目录
  • 一、shell命令以及运行原理
  • 二、Linux中的权限概念
    • 1、如何实现用户账号的切换
    • 2、如何仅提升当前指令的权限
    • 3、如何将普通用户添加到信任列表
  • 三、Linux中的权限管理
    • 1、文件访问者的分类(人)
    • 2、文件类型和访问权限(事物属性)
    • 3、文件权限值的表现方法
    • 4、文件访问权限的相关设置方法
      • 1)如何改变文件访问权限
      • 2)如何改变文件的拥有者
      • 3)如何改变文件的所属组
      • 4)如何修改文件的掩码
  • 四、目录权限
  • 五、粘位键
  • 六、关于权限总结


前言

在Linux系统中,权限管理是系统安全和资源管控的基石。无论是日常文件操作、服务部署,还是多用户协作,错误的权限设置轻则导致"Permission Denied"报错,重则引发数据泄露或系统崩溃。

本文将从权限本质出发,通过大量实例带你掌握:

  • 权限三要素r/w/x 对文件和目录的不同含义
  • 数字与符号表示法:为什么 chmod 755chmod u+rwx 更常用?
  • 特殊权限:SUID、SGID、Sticky Bit 的实战应用场景
  • ACL高级控制:如何实现精细化权限分配?
  • SELinux:超越传统权限的强制访问控制

无论你是:

  • sudo 权限困扰的新手
  • 需要部署Web服务的运维工程师
  • 面临团队协作开发的程序员

都将在这里找到可立即落地的解决方案。文中包含18个高频场景示例5个避坑指南,助你彻底摆脱权限管理的盲区。

“知其然更要知其所以然”——我们不仅讲解命令用法,更会通过内核视角分析权限校验的底层逻辑。现在,让我们从第一个 ls -l 的输出解读开始这段探索之旅!


为什么需要深度掌握权限?

  • 当你的PHP项目突然无法写入日志文件时…
  • 当团队成员误删了重要数据却无法追溯时…
  • 当黑客利用配置错误提权入侵服务器时…

这些问题的答案,都藏在权限管理的细节中。


目录

一、shell命令以及运行原理

我们都知道Windows以图形化界面为交互方式,而Linux以命令行界面为交互方式。Windows和Linux的交互方式虽然不同,但本质上是一样的,图形化界面和命令行界面都是为了让用户进行相关操作,而图形化界面和命令行界面就是我们所说的“外壳程序”。
在这里插入图片描述
Linux严格意义上说是一个操作系统,我们称之为“核心(kernel)”,但我们一般用户不能直接使用kernel,而是通过kernel的“外壳程序”,也就是所谓的Shell,来与kernel沟通。

Shell最简单的定义就是“命令行解释器”:
1)将使用者的命令翻译给核心(kernel)处理。
2)将核心的处理结果翻译给使用者。

对比Windows中的图形化界面(GUI),我们操作Windows并不是直接操作Windows内核,而是通过图形接口,点击,从而完成我们的操作。Shell对于Linux具有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核,反馈结果再通过内核运行出结果,通过Shell解析给用户。

Shell运行原理:

  1. 创建子进程,让子进程进行命令行解释。
  2. 子进程出现任何问题,都不影响父进程Shell。

对比到Windows当中就是,我们每运行一个程序就是创建了一个子进程,例如,登录微信、QQ。而这些子进程当中任何一个进程出现问题,都不会影响父进程,例如,当你的QQ出现卡死情况(程序异常)或你的QQ被关掉(程序终止),但其他子程序仍然可以运行。
在这里插入图片描述

注意: Shell只是所有外壳程序的统称,例如在centos 7当中的外壳程序名叫bash。

二、Linux中的权限概念

在Linux下有两种用户,分别是超级用户(root)和普通用户。超级用户可以在Linux下做任何事情,几乎不受限制,而普通用户一般只能在自己的工作目录下(/home/xxx)工作,以及在系统上做有限的工作。
换句话来说,所有的权限的概念都是用来限制普通用户的,而超级用户几乎不受限制。

超级用户的命令提示符是“#”。
在这里插入图片描述

普通用户的命令提示符是“$”
在这里插入图片描述

1、如何实现用户账号的切换

可能有时你的权限不够,需要从普通用户切换到超级用户,进而完成某些操作。
语法: su 用户名
功能: 用户切换。
从普通账号切换为root账号:
在这里插入图片描述
从root账号切换为普通账号:
在这里插入图片描述
注意事项:

  1. 从普通账号切换为root账号时,指令当中的root可省略,因为root账号只有一个。
  2. 该指令也可以从一个普通用户切换为另一个普通用户,输入待切换用户的账号密码即可。
  3. 切换用户后,若想切回上次的用户,可通过Ctrl+D实现。
  4. 如果root和用户的密码设置成同一个可能会造成认证失败情况

2、如何仅提升当前指令的权限

但可能某些情况下,你只想提升当前指令的权限,那么不必切换到超级用户。

语法: sudo 指令
功能: 提升当前指令的权限。
例如,我现在要以一名普通用户的身份,修改另一个普通用户的账号密码。
在这里插入图片描述
当你输入完你的密码后,可能会出现以下提示:
在这里插入图片描述
该提示说你没有被超级用户(root)添加到信用列表当中,所以该条指令的权限得不到提升(你想想嘛,怎么可能让一个普通用户随意更改另一个普通用户的密码嘛),只有当你被超级用户添加到信任列表后,你才拥有提升当前指令权限的能力。

3、如何将普通用户添加到信任列表

那么首先你得先切换到超级用户,只有超级用户才有权力将普通用户添加到信任列表。
在这里插入图片描述
在这里插入图片描述
添加完毕后,该用户就可以使用sudo指令,也就是拥有提升当前指令权限的能力了。

三、Linux中的权限管理

1、文件访问者的分类(人)

对于用户来说,权限可以将用户分为三大类

  • 文件和文件目录的所有者(文件拥有者)。
  • 文件拥有者所在的组的用户(文件所属组)。
  • 其他用户(other)。
    注意:

对于某一文件而言,其拥有者、所属组和other就是由超级用户(root)和普通用户所扮演。
在Linux当中,所有用户都要隶属于某一个组,哪怕这个组只有你一个人(此时该组就以你的用户名为组名)。

那么为什么会有所属组这个概念呢? 下面举个例子。
在某个公司当中有两个小组团队(A组、B组)在同一个Linux服务器上进行着同一款项目的开发(赛马模式),而你就是A组当中的一员。
在这里插入图片描述
如果没有所属组的概念,那么当你创建了一个文件后,要么就是只有你自己(拥有者)能看到,要么就是其他人(other)也都能看到。而你所希望的是你自己和你的小组成员能看到,剩下的人看不到。
于是就有了所属组这个概念,这时你就可以将文件设置为拥有者和所属组可见,而other不可见。所以所属组的存在是为了更灵活的进行权限配置,满足团队协作。

我们可以通过指令ll来查看某一文件或文件目录的拥有者和所属组。

在这里插入图片描述

注意:注: 除了文件拥有者和文件所属组之外的都叫other。

2、文件类型和访问权限(事物属性)

权限涉及到某个具体的事物来说,我们还需要讨论事物本身的属性。对于文件来说,我们应该讨论其文件类型,以及是否具有可读、可写和可执行的属性。

使用指令ll,我们可以看到前面有一串字符,这串字符实际上就代表着该文件的类型和属性。
在这里插入图片描述
这串字符由10个字符组成的。其中第一个字符所代表的就是该文件的文件类型。
在这里插入图片描述
不同的字符代表不同的文件类型。

  1. -:代表普通文件。
  2. d:代表目录。
  3. l:代表链接文件(类似于Windows当中的快捷方式)。
  4. b:代表块设备文件(例如硬盘、光驱等)。
  5. p:管道文件。
  6. c:字符设备文件。
  7. s:套接口文件。

注意: 在Linux当中,文件类型与文件后缀无关。
在这里插入图片描述
每一组的三个字符的第一个字符代表该文件是否具有可读属性,第二个代表是否具有可写属性,第三个代表是否具有可执行属性。
在这里插入图片描述
若是具有可读属性,则第一个位置的字符为r;若是具有可写属性,则第二个位置的字符为w;若是具有可执行属性,则第三个位置的字符为x。若某一位置为字符 - ,则说明不具有对应位置的属性。

现在我们来阐述一下该文件的类型以及权限。
在这里插入图片描述
tset.txt目录是一个普通目录,该目录的拥有者和所属组对其都是可读可写可执行的,但该文件的other对其只有读的权力和可执行的权力。

3、文件权限值的表现方法

  1. 字符表示方法
    ll指令打印文件权限值时的表示方法就是字符表示法。例如
字符表示法说明
f - -仅可读
- w -仅可写
- - x仅可执行
f w -可读可写
f - x可读可执行
- w x可写可执行
f w x可读可写可执行
- - -无权限
  1. 八进制数值表示法
    字符表示法中的每一个字符所在位置所表示的结果只有两种可能,要么为真,要么为假,因此我们可以将这三个字符换为三个二进制位,进而换为一个八进制位进行表示。例如
字符表示法二进制八进制数值表示法说明
r–1004仅可读
-w-0102仅可写
–x0011仅可执行
rw-1106可读可写
r-x1015可读可执行
-wx0113可写可执行
rwx1117可读可写可执行
0000无权限

4、文件访问权限的相关设置方法

1)如何改变文件访问权限

语法: chmod 选项 权限 文件名或目录名
功能: 设置文件的访问权限。
常用选项: -R 递归修改目录文件的权限。

chmod指令权限值的格式:
格式一: 用户符号 +/-/= 权限字符

  1. +:向权限范围增加权限代号所表示的权限。
  2. -:向权限范围取消权限代号所表示的权限。
  3. =:向权限范围赋予权限代号所表示的权限。
    用户符号:
  • u:拥有者。
  • g:所属组。
  • o:other。
  • a:所有用户。
    在这里插入图片描述
    若要同时设置不同类用户的访问权限,则需用逗号隔开。
    在这里插入图片描述
    格式二: 三位八进制数字
    将对应的八进制数转换为二进制,进而设置对应权限值。
    在这里插入图片描述

2)如何改变文件的拥有者

语法: chown 选项 用户名 文件名或目录名
功能: 修改文件的拥有者。
常用选项: -R 递归修改目录文件的拥有者。
在这里插入图片描述

注意: 修改文件的拥有者需要root用户进行操作,若是普通用户则需要进行权限提升。

也可以使用chown指令同时修改文件的拥有者和所属组,将拥有者和所属组的用户名用冒号隔开即可。
在这里插入图片描述

3)如何改变文件的所属组

语法: chgrp 选项 用户名 文件名或目录名
功能: 修改文件的所属组。
常用选项: -R 递归修改目录文件的所属组。
在这里插入图片描述
注意: 修改文件的所属组也需要进行权限提升。

4)如何修改文件的掩码

我们查看新建的文件和目录,它们都有自己默认的权限。
实际上,新建文件的默认权限为0666新建目录的默认权限为0777。其中第一位的0与特殊权限有关,我们这里不必深究,而后面三位就是权限的八进制数值表示方法,我们将其翻译为字符表示方法。
在这里插入图片描述
但实际上你会发现,你所创建出来的文件和目录的权限值往往不是我们所翻译出来的值,原因就是创建文件和目录的时候还要受到umask的影响,假设默认权限是mask,则实际创建出来的文件权限是:mask&(~umask)

语法: umask 权限值
功能: 查看或修改文件掩码。

我们可以通过指令umas 查看文件默认掩码。
在这里插入图片描述
因此我们实际创建出来的文件和目录的权限值还需要进行进一步换算才能得出。首先我们将掩码的的后三位八进制换算为二进制,然后对其进行按位取反。
在这里插入图片描述
然后将之前的新建文件的默认权限值和新建目录的默认权限值分别与其进行按位与操作,得到的就是我们创建出来的文件和目录的权限值。
在这里插入图片描述
因此我们也可以通过修改umask来设置文件的访问权限。
在这里插入图片描述

四、目录权限

对于文件来说,其可读可写可执行的属性我们都知道分别代表着什么对应的操作,那对于目录来说可读可写可执行又分别代表着什么呢?

  1. 可读权限: 如果用户没有该目录的可读权限,则无法通过ls指令查看目录中的文件内容。
  2. 可写权限: 如果用户没有该目录的可写权限,则无法通过一系列指令在目录中创建文件或删除文件。
  3. 可执行权限: 如果用户没有该目录的可执行权限,则无法通过cd指令进入到目录当中。

于是,问题来了~~换句话来讲,就是只要⽤⼾具有⽬录的写权限,⽤⼾就可以删除⽬录中的⽂件,⽽不论
这个⽤⼾是否有这个⽂件的写权限.
这好像不太科学啊,我张三创建的⼀个⽂件,凭什么被你李四可以删掉?我们⽤下⾯的过程印证⼀下.
在这里插入图片描述
为了解决这个不科学的问题,Linux引⼊了粘滞位的概念.

五、粘位键

在这里插入图片描述
当⼀个⽬录被设置为"粘滞位"(⽤chmod+t),则该⽬录下的⽂件只能由

  1. 超级管理员删除
  2. 该⽬录的所有者删除
  3. 该⽂件的所有者删除

六、关于权限总结

  1. ⽬录的可执⾏权限是表⽰你可否在⽬录下执⾏命令。
  2. 如果⽬录没有-x权限,则⽆法对⽬录执⾏任何命令,甚⾄⽆法cd进⼊⽬,即使⽬录仍然有-r读权限(这个地⽅很容易犯错,认为有读权限就可以进⼊⽬录读取⽬录下的⽂件)
  3. ⽽如果⽬录具有-x权限,但没有-r权限,则⽤⼾可以执⾏命令,可以cd进⼊⽬录。但由于没有⽬录的读权限
  4. 所以在⽬录下,即使可以执⾏ls命令,但仍然没有权限读出⽬录下的⽂档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89741.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决在nuxt2框架中引入swiper报错:window is not defined

前言:最近帮助公司更新官网,我们公司为了加快首页加载速度采用了Nuxt框架,但是官网首页需要一个轮播图,但是安装之后,运行项目就开始报错:window is not defined,后来查阅了资找到了报错的原因以…

牛客NC14661 简单的数据结构(deque双端队列)

题目描述 栗酱有一天在网上冲浪的时候发现了一道很有意思的数据结构题。 这个数据结构形如一个“长条形”的容器,一开始该容器是空的,有以下七种操作: 111 aaa:从前面插入一个元素 aaa 222:从前面删除一个元素 333 a…

【AI大模型:架构实战】32、DeepSpeed大模型训练全解析:从技术原理到千亿参数实战优化指南

DeepSpeed作为微软开源的分布式训练框架,已成为大模型工业化训练的核心工具。它通过系统级创新突破了单卡显存限制,将千亿参数模型的训练成本降低75%以上,同时提升训练速度3-8倍。 本文整合2025年最新实践,从核心技术原理(如ZeRO优化、3D并行)到千亿参数模型实战流程,全…

GraphQL与REST在微服务接口设计中的对比分析与实践

问题背景介绍 在微服务架构中,服务之间的接口设计成为系统灵活性、可维护性和性能的关键。传统的REST API因其简单、成熟的生态而得到广泛应用,但在复杂业务场景下会面临接口粒度、版本兼容、数据冗余等挑战。GraphQL作为Facebook开源的查询语言&#xf…

Git分支管理与Stash技巧:从基础到高级工作流详解

引言Git作为现代软件开发的核心工具,其分支管理能力是支撑团队协作开发的基石。本文将系统讲解Git分支的创建、合并、冲突解决等基础操作,深入剖析分支底层原理,并介绍stash暂存技巧和业界主流的分支管理策略,帮助开发者构建高效的…

windows wsl ubuntu 如何安装 maven

命令 sudo apt update sudo apt install maven验证安装是否成功: $ mvn -versionApache Maven 3.6.3 Maven home: /usr/share/maven Java version: 1.8.0_402, vendor: Private Build, runtime: /usr/lib/jvm/java-8-openjdk-amd64/jre Default locale: en, platf…

Swift6.1 - 可选类型处理

目录1、nil2、可选绑定3、提供后备值4、强制解包5、隐式解包可选在可能缺失值的情况下,请使用 可选。可选代表两种可能性:要么 存在一个指定类型的值,并可以解包可选以访问该值;要么 根本就没有值。举一个可能缺失值的例子&#x…

【数据结构】关于链表的面试题

一、单链表逆置1、法一思路:通过两个辅助指针 p和 q,在遍历链表时逐个反转指针方向。p初始化为 第一个有效节点,用于遍历原链表;q初始化为 NULL,用于临时保存 p 的下一个节点。plist->next 被置为 NULL,…

LVS(Linux virual server)

LVS(Linux virual server) 系统性能扩展方式 Scale UP:增强单台服务器性能,适合单体应用,但有硬件限制。 Scale Out:增加服务器数量,适合分布式和集群系统,可灵活扩展。 集群&#x…

在 ASP.NET Core 和 JavaScript 中配置 WebSocket

在本文中,我们将了解 WebSocket,并逐步讲解如何在客户端配置 WebSocket 并与服务器通信。首先,让我们先来了解一下“ WebSocket ”。什么是 WebSocketWebSocket 是一种协议,它提供了一种通过持久连接在客户端和服务器之间交换数据…

车载刷写框架 --- 关于私有节点刷写失败未报引起的反思

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

ABP VNext + GitHub Actions:CI/CD 全流程自动化

🌟 ABP VNext GitHub Actions:CI/CD 全流程自动化 📚 目录🌟 ABP VNext GitHub Actions:CI/CD 全流程自动化🤩 TL;DR🔄 全局流程概览1️⃣ 准备工作与项目结构1.1 🛠️ 工具链与 S…

Elasticsearch 重命名索引

作者:来自 Elastic Alex Salgado 学习如何使用四种实用方法在 Elasticsearch 中重命名索引。 想获得 Elastic 认证?看看下一期 Elasticsearch Engineer 培训什么时候开始! Elasticsearch 拥有丰富的新功能,帮助你根据使用场景构建…

高通8255 Android Virtio Virtio-SPI 配置方法

目录 一:VirtIO和Passthrough的区别 二:配置逻辑 三:配置方法 步骤一:QNX SPI资源配置 & 测试 配置 测试 步骤二:BE配置 &测试 配置 测试 步骤三:Hypervisor配置 配置 测试 步骤四&…

从零手写红黑树(C++实现详解)

目录 一、红黑树概述 二、红黑树节点设计 (1)枚举红黑 (2)红黑树的节点设计 三、红黑树核心实现:Insert 1.首先将节点遍历到对应位置创建对应节点并插入到二叉搜索树对应的位置 2.本文重点的重点 (1)parent为黑时直接插入即…

【黄山派-SF32LB52】—硬件原理图学习笔记

目录 一、硬件介绍 二、芯片主控 1.模组介绍 2.原理图介绍 3.模组供电电路 三、电源转换部分 1.OVP过压保护电路 2.CHG充电电路 3.系统电源桥接电路 4.LDO电路 四、Debug电路 1.一键下载电路 五、QSPI屏幕 六、SD卡 七、AUDIO音频 八、GPIO电路 1.按键部分…

从五次方程到计算机:数学抽象如何塑造现代计算

引言 数学的发展往往始于一个具体的问题,而后在寻求解答的过程中,催生出深刻的抽象理论。从五次方程的求解到抽象代数,再到范畴论和λ演算,最终影响图灵机和现代计算机的设计,这一历程展现了数学如何从实际问题演变为通…

剧本杀小程序开发:科技赋能,重塑推理娱乐新形态

在科技飞速发展的今天,各个行业都在积极探索与科技的融合,以实现创新发展。剧本杀行业也不例外,剧本杀小程序的开发,正是科技赋能传统娱乐的生动体现,它重塑了推理娱乐的新形态,为玩家带来了前所未有的游戏…

机器学习sklearn入门:归一化和标准化

bg:归一化(Normalization)通常指将数据按比例缩放至某个特定范围,但具体范围并不一定是固定的 0到1。标准化是将数据转换成均值为0,标准差为1的分布。使用场景:用归一化:需要严格限定范围&#…

【Project】kafka+flume+davinci广告点击实时分析系统

一、项目需求分析 某电商平台需实现广告实时点击分析系统,核心需求为实时统计以下内容的Top10: 各个广告的点击量各个省份的广告点击量各个城市的广告点击量 通过实时掌握广告投放效果,为广告投放策略调整和大规模投入提供依据,以…