【Linux】趣味讲解“权限“的那些事(重点讲解文件权限,内含su、sudo、chmod、chown、umask等指令)

news2024/11/17 21:57:08

文章目录

  • 前言
  • 1. Linux下用户的分类
    • 1.1 su 指令
      • 1.1.1 使用su指令切换到其它的用户上
      • 1.1.2 使用su指令切换到root上
      • 1.1.3 su指令的总结
    • 1.2 sudo指令(对某条指令进行提权)
      • 1.2.1 sudo指令的语法
      • 1.2.2 由sudo指令引发的思考问题
  • 2. 什么叫做权限
    • 2.2 文件权限
      • 2.2.1 文件类型
      • 2.2.2 文件权限的解读
  • 3. 修改权限
    • 3.1 chmod指令
  • 4. 权限三个直击灵魂的问题

前言

在我们初步了解了Linux的基础指令之后,我们就得开始学习在Linux下有什么事我们能够做到的,又有哪些事是我们没有办法做到的。这个就是我在本文重要给大家讲解的——权限。

另外在本文的讲解中会包含关于权限的一些指令,不过大家不用担心,我会结合具体的例子让大家把这些指令结合其应用场景给理解清楚的。好了,让我们开始本文的学吧!!!💖💖💖
哈哈哈

1. Linux下用户的分类

相信各位读者在学习Linux时,不是用的虚拟机就是云服务器。但是这两个有个共同的现象,那就是每次登录时都得输入密码。这个过程就是在验证你的身份,这种感觉在使用的云服务器的读者更加的明显。使用云服务器的读者在登陆之前甚至还要你输入登录的用户名,你还可以登录到root账户上。

我们平常登录的Linux系统的用户都叫做普通用户,在Linux中有个具有凌驾于一切规则之上的用户,root —— “超级用户

所以在Linux操作系统中,用户被分两类,一类是root,另一类则是普通用户。

普通用户和root有什么区别呢?
普通用户与root的区别:root基本不受权限的约束,普通用户是受到权限的约束的。

1.1 su 指令

那我们能否做到在我们的虚拟机或者云服务器上,实现用户之间的切换?
答案时肯定可以的,使用su指令。

用户
这个是我云服务器上面的用户名。接下来的演示,我就会以上面的用户作为例子,大家在阅读本文时,注意用户名的切换!

1.1.1 使用su指令切换到其它的用户上

用户的切换(我要切换到king这个用户中):
用户切换
注意这里的Password填的是切换目标用户的密码!!!(这个应该很好理解吧)

如果我们切换到别人的用户下,突然想回到自己的用户了,我们该怎做?

第一种方法:输入exit指令
第二种方法:按住键盘上的CRTL + D
退回到之前的用户

1.1.2 使用su指令切换到root上

上面的例子都是普通用户之间的切换,那普通用户与root用户之间怎么切换呢?

在命令行上输入su或者su -指令。

图片
这里的Password输入的是root的密码。

su -指令

1.1.3 su指令的总结

当我们想要切换到其它的普通用户下:
我们可以这样写:su [username] ([username]就是你想要切换的用户名)

当我们想要切换到root用户下:
我们可以写成 :su 或者 su -

回到主线:
所以通过su指令,我们也明白了一个道理:Linux中的所有用户,都需要密码,无论是root还是普通用户。即便是多个普通用户也是需要设置密码的。

这里我给大家在设置密码时一个小建议,一定要将root用户与普通用户的密码设置的不一样。

1.2 sudo指令(对某条指令进行提权)

在这里可能有的读者就在想,我切换到root下如果发生了误操作,把某个重要的文件给删除了,这样就麻烦了。而且如果我只是执行一条指令时需要用到root的权限,我也要切换到root用户下吗?有没有更加方便的方法?
这个时候sudo指令就闪亮登场了!

refuse
这里我用一个普通用户的身份进入其它用户的家目录下,这个权限是我们作为普通用户是没有的。这个道理也很好理解的,假设其他用户是一个你互不相识的人的,你想进行别人的家中,别人肯定是不允许的。如果你真的进去了,那不相当于私闯民宅了!

但是如果你此时拿着警察给的搜查令的话,那你就可以进入到别人家里面了。

语法
分析:这里你用sudo指令对cd king赋予了root权限。此时的你,就像是拿着搜查令,大摇大摆的进入别人的家中了。

1.2.1 sudo指令的语法

sudo指令的语法:sudo [command](command就是你想要提权的那条指令)
作用:对单条指令提升权限

1.2.2 由sudo指令引发的思考问题

有的读者可能会这么想,如果普通用户对每条指令都用了sudo指令,代价就是输入自己的密码。那这样岂不是人人都是root用户了吗?

理论上是这样的。但是在Linux中还会对普通用户做一个界定。目前我们用adduser创建的用户,是没有颁发执行sudo权限的,换句话说,系统不信任你。除非未来将普通用户,添加到系统的信任白名单里面,这样普通用户就能使用sudo指令了。而这个白名单是在/etc/sudoers目录下,当然不同的系统会有差异!

这里展示一个使用sudo指令失败的例子:
失败

2. 什么叫做权限

什么叫做权限?这是个发自灵魂深处的拷问。

结合我们现实生活的感悟,权限就是一件事是否允许你去做

比如:你现在是一名腾讯视频的普通用户。你想看一部vip的电影,很遗憾你看不了。因为这个vip电影是只有vip用户才能看的,你身为普通用户是没有这个权限的。
再举个例子:你现在是一个学生,这一天你闲来无事,你先去校长办公室去看看校长是否在打王者荣耀。对不起,你肯定是连门都进不去的,因为你不是校长,你没有校长这个权限!

有一天我有一个奇怪的想法:我要把写完笔记的书给吃掉,我要在王者峡谷里自习!
这显然是不可能。因为这不满足事物的"属性",笔记的"属性"就是读、写,游戏的"属性"就是娱乐。如果我们做出了不满足事物属性的事,这个行为肯定也是不被允许的!

为此我们就可以对权限的特点做出两点总结:

  1. 权限认证的身份(权限与"人"有关)
  2. 权限也和事物的"属性"有关

想必大家听到这里,已经对权限有了初步的了解了。那么在Linux操作系统下,权限又体现在那些地方呢?
本文会以文件权限,带着大家深入了解"权限"这个概念。顺便解决大家在前期学习Linux时遇到的一些不懂得问题。

2.2 文件权限

文件
可以看到的是,在我们用指令查看但其那目录下所有文件的具体信息(文件名 + 文件属性)时,会出来一大堆的信息,这些信息代表什么含义呢?接下来,我就跟大家仔细地聊一聊。

我们可以把那一大堆信息,分为以下几部分:
文件具体信息

2.2.1 文件类型

首先,我们先来看红色框框出来的那部分。这个就表示文件的类型。

符号文件类型
-普通文件(可以是文本、可执行程序、库文件等等都属于普通文件,这一点跟Windows系统有很大的区别)
d目录文件
b块设备文件(磁盘文件、光驱文件等)
c字符设备文件 (键盘、显示器等)
p管道文件 (用于通信)
l软链接文件

这里需要给大家指明一个细节:Linux系统中文件名后缀没有直接意义。(当然这并不代表文件名后缀没用)

在Linux系统中,其有这一套认识文件类型的体系,而依靠文件名后缀来确定文件类型,这种方法不在此体系中。换句话说,即使你目录名为dir1.c,在Linux眼中它仍然是一个目录。但是我们又要问自己一个问题,文件名后缀真的没用吗?
文件名后缀肯定是有用的。大家可以用gcc来编译一个test.txt的文件,它是会报错的!

从这个现象中,我们就可以感知到:虽然后缀名对于Linux来说没有什么直接的意义,但是这并不代表基于Linux系统上的各种软件来说是没用的!gcc就是一个典型的例子!

所以,在Linux中如何看待文件名后缀,取决于用户。

2.2.2 文件权限的解读

再来看一下,绿色框框出来的那一部分。大家会发现有一个共同的地方,这里来来回回只出现了四种字符"r、w、x、-"。
那这些字符分别代表什么含义呢?这就关系到我们对于文件权限的解读了。

讲解之前,先插播一点知识。在学习C语言的文件操作中,想必大家一定用过fopen函数,里面有一个参数就是让你设置打开文件方式,其中就有"w"和"r",就是"写"和"读"。没错!Linux下也是如此。

字符对应的文件权限
r可读
w可写
x可执行
-对应的权限位置,没有权限

到这里我们就明白了,之前看不懂得那一串字符是什么意思了。

我们说过权限的特征是,权限与事物的"属性"有关。那文件作为一种事物,其属性就是"读、写、可执行"。那由其属性诞生了对文件管理的角色,这些角色因为对文件具有不同的属性集合,为此就规定了该角色只能对文件做规定范围的事。这些角色有三种,分别称为"拥有者、所属组、其他人"。

文件具体信息
再仔细回看这个绿色方框里面的内容,你会发现这里面有9个字符。而我们又有三种角色,以3个字符为一组,代表一种角色的属性集合。

角色分类
从左往右依次是拥有者、所属组、其他人。我们再来看,蓝色框和黄色框的内容时,就十分清楚了。蓝色框的内容代表文件的拥有者,黄色框的内容代表文件的所属组

到这里,文件权限的解读就结束了。此时我们就想,有没有办法修改文件的权限,我们继续往后看!
哈哈

3. 修改权限

这里还是以文件权限为例。

文件具体信息
我们先将上面的拥有者的权限修改为可读、可写、可执行,所属组也是一样,该怎么修改?

用chmod指令!

3.1 chmod指令

语法:chomod [修改参数] 待修改的文件名。

修改参数:

  • u:代表拥有者
  • g:代表所属组
  • o:代表其他人

作用:修改对应文件的权限。

注意:使用这个指令的前提是,你必须得拥有root权限!

演示
大家可以仔细对比,权限改变的前后。

在这里你会发现,我们其实可以用二进制来表示对应位置是否拥有权限!

比如:
rwx,对应的二进制就是111;
r–,对应的二进制就是100.

而刚好1个八进制位就能够表示3个二进制位。为此我们可以将上面的指令简化为:
这样写
这样写的话,指令就会变得更加的简洁。

当然我们会遇到一种比较特殊的情况,那个就是如果我同时身为一个文件的拥有者和共享组,但是这两个角色所匹配的权利不一样,我听谁的?
比如
现在这种情况,就是作为文件的拥有者只有写和可执行文件的属性,而作为所属组而言,可读、可写、可执行。

哈哈

从结果就能看出,采取了拥有者的权限!这里我们就可以证实一个事实,在进行角色认证的时候,只能选择一个角色进行认证,而这个角色采取优先匹配的原则

回到主线,在仔细讲解了文件权限时,想必大家找到了规律,每一组字符的规定的位置好像表达的意思是一样的。没错,这就是我要给大家总结的规律。

  1. 位置是什么含义是确定的。
  2. 每一个位置只有是或者否,具有指定的权限。

4. 权限三个直击灵魂的问题

现象
问题1:为什么我们刚开始创建文件的默认权限是我们现在所看到的样子?(不同的系统可能有所差异)

这个问题可以分为两个子问题:

  1. 为什么普通文件的权限为664?
  2. 为什么目录文件的权限为775?

这里我就不跟大家卖官子了,其实我们的Linux操作系统默认是有给每种不同文件一个起始权限的,其中:

  • 默认给普通文件的起始权限其实是666
  • 默认给目录文件的起始权限其实是777

那究竟是什么沧桑巨变,让普通文件和目录文件变成了这副模样?
这个就是权限掩码的作用!

我们可以通过一个指令来感知权限的存在,这个指令就是umask指令。其作用就是查看你当前系统的权限掩码为多少。

权限掩码

从这里我们可以看出,权限掩码为002,注意这里它表示的是八进制!换成二进制也就是000 000 010.

所以结合权限掩码和通过某种特定的算法,就能够得到开始创建文件的默认权限了。
这个特定的算法就是:最终权限 = 起始权限 & (~umask)
碍于篇幅原因,这里我就不给大家演示了。

问题2:目录权限又怎么理解?

哈哈哈

字符对应位置的权限
r是否允许我们查看目录下文件的内容
w是否在当前目录下对文件进行创建、更改、删除
x是否允许用户进入对应的目录

这里我们就又可以验证一个现象了,那就是:
普通用户用户的家目录的权限是700,也就代表了我在我的家目录下创建文件,别人是看不到的。

问题3:共享目录?

在这个社会中,单打独斗显然是行不通的。我们必须得合作,在编程的世界也是如此,一个大的项目光靠自己一定是没有办法按照规定的时间内交付的。为此,我们需要数据的共享。

在这里插入图片描述

在这里,我创建了一个shared的共享目录,我们有两个普通用户共享这个目录,他们分别是sunyufeng和king。

有一天sunyufeng创建了一个文件test.txt的文件,并且往这个文件里写了一点内容:
例子
可以看到test.txt文件对其他人是有读权限的。此时,king用户出于好奇先看看test.txt里面的内容:
例子
没问题,king用户能够查看这个文件里面的内容。但是有一天,我又不想把这个文件给king用户看了,于是我修改了我文件的权限:
haha
等到过了几天后,king用户想再看看sunyufeng这个用户创建的test.txt里面的内容,于是他就:
哈哈哈
完了,文件打不开了。说好的爱情呢!!!一气之下,king用户就把这个文件给删除了,在删除时,竟然你不给我看我就把你的文件都给删除完!

删除了
test.txt的文件真的被删除了!

从以上的例子我们得知道了一个事情,test.txt这个文件不是king用户创建的,但是他却拥有着删除这个文件的权限。这也让显然是不合理的。为此解决这个问题的工具从天而降 —— “粘滞位”。粘滞位我们用符号"t"来表示。

此时我们只要修改共享目录的权限即可:
修改
此时,我们再来复现刚才的场景,再来看看king能否删除sunyufeng这个用户创建的文件:
现象
发现操作不被允许了,没错,这个就是粘滞位的作用!!!

讲到这里,总结一下:

  1. 一个文件能否被删除,并不是由文件本身决定的,而是由文件所在的目录决定的。
  2. 如果我们去掉共享目录的w权限,两个用户就没有办法创建文件啦!那共享目录的共享体现再哪个地方。
  3. 粘滞位:给目录设置的,一般是共享目录,大家可以进行各自文件的增删查改,只允许文件的拥有者或者是人root能删除这个文件,其他人一概不允许,t是一种特殊的x权限。

好了,到这里本文的内容就全部讲解完毕了!!!

如果觉得本文还不错的话,麻烦给偶点个关注吧!
哈哈哈

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

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

相关文章

UART驱动学习一(UART硬件介绍)

一、UART硬件介绍 1. 串口的硬件介绍 UART的全称是Universal Asynchronous Receiver and Transmitter,即异步发送和接收。串口在嵌入式中用途非常的广泛,主要的用途有: 打印调试信息;外接各种模块:GPS、蓝牙&#xf…

JavaWeb 12.Tomcat10

希望明天能出太阳 或者如果没有太阳的话 希望我能变得更加阳光一点 —— 24.9.25 一、常见的JavaWeb服务器 Web服务器通常由硬件和软件共同构成 硬件:电脑,提供服务供其他客户电脑访问 软件:电脑上安装的服务器软件,安装后能提…

【鸿蒙HarmonyOS NEXT】数据存储之分布式键值数据库

【鸿蒙HarmonyOS NEXT】数据存储之分布式键值数据库 一、环境说明二、分布式键值数据库介绍三、示例代码加以说明四、小结 一、环境说明 DevEco Studio 版本: API版本:以12为主 二、分布式键值数据库介绍 KVStore简介: 分布式键值数据库…

手机电脑无缝对接,虫洞软件让多屏协同触手可及

在数字化时代,我们的日常生活和工作越来越依赖于电子设备,尤其是智能手机和电脑。但你是否曾因在手机和电脑之间频繁切换而感到烦恼?现在,有了虫洞软件,这一切都将成为过去式。 虫洞——电脑与手机的桥梁 虫洞软件&a…

Kubernetes整体架构与核心组件

一个 Kubernetes 集群的机器节点有两种角色—— Master 和 Node,都可由一个或多个节点组成,且同一个节点可以既是 Master 也是 Node。其中 Master 节点负责全局决策、资源调度、Node 与 Pod 管理,等等,属于管控节点;No…

【unity进阶知识4】封装unity协程工具,避免 GC(垃圾回收)

文章目录 前言封装协程工具类,避免 GC(垃圾回收)使用1.使用默认方式使用协程2.使用自定义的 CoroutineTool 工具类来等待不同的时间 完结 前言 在 Unity 中,使用 yield return null 、yield return new WaitForEndOfFrame()等会导…

人物型Agent开发(文心智能体平台创作分享)

开发平台:文心智能体平台AgentBuilder | 想象即现实 目录 一、开发灵感 (一)打破刻板印象 (二)以古鉴今,探索人性与情感 二、角色分析与设定 (一)西门庆特质 (二&a…

我的深度学习笔记

传统观念认为:在不考虑算力的情况下,网络越深,其准确率就越高,最直接的方法就是把网络设计的越深越好。 事实上:随着网络的层数不断加深,当达到一定的书目之后,训练精度和测试精度都有下降&…

第十三届蓝桥杯真题Java c组C.纸张尺寸(持续更新)

博客主页:音符犹如代码系列专栏:蓝桥杯关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 【问题描述】 在 ISO 国际标准中定义了 A0 纸张的大小为 1189mm 841mm&#…

AI运用在营销领域的经典案例及解析

大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 在前面一篇文章当中,我给大家介…

[Redis][典型运用][缓存]详细讲解

目录 0.什么是缓存?1.使用Redis作为缓存1.为什么用?2.如何用? 2.缓存的更新策略0.前言1.定期生成2.实时生成 3.缓存相关问题1.缓存预热(Cache Preheating)2.缓存穿透(Cache Penetration)3.缓存雪崩(Cache Avalanche)4.缓存击穿(Cache Breakdo…

一种多版本、多人并行开发GIT分支管理规范

首发公众号: 赵侠客 引言 作为开发者每天在写代码的同时也在写BUG,所以一方面需要开发新的需求,另一方面还要填自己以前挖的坑。目前主流程序员都在使用GIT来管理自己的代码,当GIT仓库有多人维护或者项目有多个版本同时迭代开发时…

c++进阶学习--------多态

前言 需要声明的,本节课件中的代码及解释都是在vs2022下的x86程序中,涉及的指针都是4bytes。 如果要其他平台下,部分代码需要改动。 比如:如果是x64程序,则需要考虑指针是8bytes问题等等 1. 多态的概念 1.1 概念 …

.NET内网实战:白名单文件反序列化执行命令

01阅读须知 此文所节选自小报童《.NET 内网实战攻防》专栏,主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,对内网和后渗透感兴趣的朋友们可以订阅该电子报刊,解锁更多的报刊内容。 02基本介绍 本文内容部分节选自小报童…

【易社保-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

Java泛型方法的定义和使用、泛型类、泛型接口、泛型方法、通配符、泛型的上界与下界

文章目录 一、包装类1.1、基本数据类型和对应的包装类1.2、自动装箱和自动拆箱 二、基本介绍2.1、泛型引入背景2.1、什么是泛型2.2、为什么使用泛型 三、常见泛型字母含义四、泛型的使用4.1、泛型类4.2、泛型接口4.3、泛型方法 五、泛型的继承5.1、泛型不具备继承性5.2、何为数…

【Python】递归

专栏文章索引:Python 有问题可私聊:QQ:3375119339 文章内容改自:bilibili博主(又懂啦) 目录 一、递归函数 二、理解递归函数 一、递归函数 一个函数在其函数体内调用函数自身,这样的函数就称为递归函数。递归函数的…

每日一练 2024.9.29(2)

目录 解题思路与代码实现 题目分析 一、解题策略 关键步骤: 二、代码实现 三、代码解析 四、复杂度分析 五、运行示例 示例1: 示例2: 六、总结 解题思路与代码实现 题目分析 这道题目要求我们找到字符串列表 strs 中的相似字符组…

Arch - 架构安全性_验证(Verification)

文章目录 OverView导图1. 引言:数据验证的重要性概述2. 数据验证的基本概念3. 数据验证的层次前端验证后端验证 4. 数据验证的标准做法5. 自定义校验注解6. 校验结果的处理7. 性能考虑与副作用8. 小结 OverView 即使只限定在“软件架构设计”这个语境下&#xff0c…

物理学基础精解【40】

文章目录 矢量积矢量积(又称叉积、外积)的几何意义一、面积表示二、垂直性三、方向性四、应用实例五、数学表达 矢量积(叉积)的坐标表示法矢量积的坐标表示法的几何意义矢量积的性质矢量积的应用 矢量积(又称叉积、外积…