Linux——权限的理解

news/2024/5/26 19:36:41/文章来源:https://blog.csdn.net/Tlzns/article/details/136579395

Linux——权限的理解


文章目录

  • Linux——权限的理解
  • 一、shell命令以及运行原理
  • 二、Linux权限的概念
    • 切换用户
    • 对指令提权
  • 三、Linux权限管理
    • 1. 文件访问者的分类(人)
    • 2. 文件类型和访问权限(事物属性)
      • 文件类型
      • 基本权限
      • 文件权限值的表示方法
        • 字符表示方法
        • 八进制数值表示方法
    • 3. 文件访问权限的相关设置方法
    • 4. 默认权限以及权限掩码
  • 四、权限相关问题


一、shell命令以及运行原理

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel,
而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通

如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含

  • 将使用者的命令翻译给核心(kernel)处理
  • 同时,将核心的处理结果翻译给使用者

  • 对比windows GUI:我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)

    shell 对于Linux:有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户
    在这里插入图片描述
    简单来讲,对于操作系统来说,他并不信任或者并不认为我们有这个能力与他直接沟通,所以出现了外壳程序作为一个桥梁来辅助两者之间的沟通,所以外壳存在的意义有两个

    1. 命令行解释(充当中间人沟通)
      内核的设计非常复杂,使用者无法直接向Linux内核进行沟通,也无法直接读懂内核执行完命令的结果所以shell外壳充当"媒婆"这一角色来往于操作者和内核之间
  • 外壳程序将用户输入的指令解释后传递给内核
  • 内核执行命令后得到的结果经外壳处理后传递给用户
    1. 保护内核(充当保安)
      有时用户想要内核执行的命令过于离谱或者使用的指令内核根本做不到那么此指令根本不会"打扰"内核
      它会在shell外壳进行翻译时就被驳回!

    Linux下的shell外壳是bash
    windows下的shell外壳是图形化界面

    二、Linux权限的概念

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

  • 超级用户:可以再linux系统下做任何事情,不受限制
  • 普通用户:在linux下做有限的事情
  • 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
  • 切换用户

    命令:su [用户名]
    功能:切换用户
    例如,要从root用户切换到普通用户user,则使用 su user,要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令

    注:超级用户切换为普通用户不用输密码
    普通用户切换为root或其他普通用户需要密码

    对指令提权

    现实操作中会出现,普通用户想用root账号执行一条命令,但如果切换为root那么太麻烦了
    那么就能进行对指令提权操作

    使用指令: sudo 提权的指令
    值得注意的是使用sudo指令需要被root添加到sudoers白名单

    三、Linux权限管理

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

    在Linux操作系统中,有三种“人”

  • 文件和文件目录的所有者:u---User
  • 文件和文件目录的所有者所在的组的用户:g---Group
  • 其它用户:o---Others
  • 2. 文件类型和访问权限(事物属性)

    在这里插入图片描述
    2-4位:代表的是文件所有者的权限
    5-7位:代表的是文件所属组的权限
    8-10位:代表的是others的权限

    文件类型

    d:文件夹-:普通文件
    l:软链接(类似Windows的快捷方式)
    b:块设备文件(例如硬盘、光驱等)
    p:管道文件
    c:字符设备文件(例如屏幕等串口设备)
    s:套接口文件

    基本权限

    1. 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
    2. 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说,具有删除移动目录内文件的权限
    3. 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
    4. “—”表示不具有该项权限

    文件权限值的表示方法

    对于三种不同的“人”来说,分别有对应的rwx权限,人与人之间,同一人的权限与权限之间,互不干扰,没有任何关联,这意味着对于上图中的2-9位的权限
    对于任何人的r,要么是r,要么是-
    对于任何人的w,要么是w,要么是-
    对于任何人的x,要么是x,要么是-
    并且rwx之间互不相干

    字符表示方法

    在这里插入图片描述

    八进制数值表示方法

    在这里插入图片描述

    3. 文件访问权限的相关设置方法

    命令:chmod
    功能:设置文件的访问权限
    格式:chmod [参数] 权限 文件名
    常用选项

    • R -> 递归修改目录文件的权限
    • 说明:只有文件的拥有者和root才可以改变文件的权限

    chmod命令权限值的格式

    1. 用户表示符+/-=权限字符
  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限

  •         用户符号:
  • u:拥有者
  • g:拥有者同属组
  • o:其它用户
  • a:所有用户

  •         实例:
  • # chmod u+w /home/abc.txt
  • # chmod o-x /home/abc.txt
  • # chmod a=x /home/abc.txt

  • 2. 三位八进制数字

            实例:
  • # chmod 664 /home/abc.txt
  • # chmod 640 /home/abc.txt


  • 命令:chown
    功能:修改文件的拥有者
    格式:chown [参数] 用户名 文件名
    实例

    • # chown user1 f1
    • # chown -R user1 filegroup1



    命令:chgrp
    功能:修改文件或目录的所属组
    格式:chgrp [参数] 用户组名 文件名
    常用选项:-R 递归修改文件或目录的所属组
    实例

    • chgrp users /abc/f2



    命令:umask
    功能
    查看或修改文件掩码
    新建文件夹默认权限=0666
    新建目录默认权限=0777
    但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响,假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
    格式:umask 权限值
    说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002

    实例

    • # umask 755
    • # umask //查看
    • # umask 044//设置

    4. 默认权限以及权限掩码

    在Linux系统中,创建一个文件与目录
    在这里插入图片描述
    我们会发现以下规律:

  • 目录的默认权限为:7 7 5
  • 普通文件默认权限:6 6 4

  • 文件的默认权限有两个因素决定:
    1. 文件的起始权限
      目录的起始权限为:7 7 7
      普通文件的起始权限为: 6 6 6
    2. 文件的权限掩码
      假设起始权限是mask,则实际创建的出来的文件权限是: mask & ~umask
      而一般机器上默认为002

    所以我们根据规律可以进行以下运算
    对于目录: 777 & ~002 = 775
    对于文件: 666 & ~002 = 664

    所以默认权限是这样算出来的,他被文件的起始权限和umask码共同决定

    四、权限相关问题

    进入一个目录,需要什么权限?

    需要x权限

    1. 是否允许一个指定用户查看目录的文件列表,需要r
    2. 是否允许一个指定用户在当前目录下新建或删除文件,需要w
    3. 一个文件一定是属于一个目录的,一个文件属性能不能查看,是由目录的权限决定的
    4. cd进入一个目录,需要的只有x权限,如果需要查看目录内的文件列表,则还需要r权限

    一个文件一定是属于一个目录的,一个文件能不能被删除,这个文件本身能决定吗?由谁决定??

    这个文件本身决定不了,所属的目录与对应的账户是否有w权限决定


    如果需要共享文件的情况,由于文件是共享的,所以意味着这个共享文件的目录对于所有人来说都有w权限,因为删除一个文件只需要用户拥有该文件所属的目录的w权限,那么按道理来说该目录的所有人都能删除这个我创建的文件,如何解决这个问题?

    目录的所有者或者root可以对目录设置粘滞位,其他人对目录有w权限也删除不了
    设置粘滞位:chmod + t

    当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
    一、超级管理员删除
    二、该目录的所有者删除
    三、该文件的所有者删除


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

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

相关文章

Flutter第四弹:Flutter图形渲染性能

目标: 1)Flutter图形渲染性能能够媲美原生? 2)Flutter性能优于React Native? 一、Flutter图形渲染原理 1.1 Flutter图形渲染原理 Flutter直接调用Skia。 Flutter不使用WebView,也不使用操作系统的原生控件,而是…

【Web】浅聊XStream反序列化本源之恶意动态代理注入

目录 简介 原理 复现 具体分析之前 我们反序列化了个什么? XStream反序列化的朴素通识 具体分析 第一步:unmarshal解组 第二步:readClassType获取动态代理类的Class对象 第三步:调用convertAnother对动态代理类进行实例…

十六、接口隔离原则、反射、依赖注入

接口隔离原则、反射、特性、依赖注入 接口隔离原则 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 五种原则当中的i 上一章中的接口,即契约。 契约就是在说两件事,甲方说自己不会多要,乙方会在…

AWS 入门实践-远程访问AWS EC2 Linux虚拟机

远程访问AWS EC2 Linux虚拟机是AWS云计算服务中的一个基本且重要的技能。本指南旨在为初学者提供一系列步骤,以便成功地设置并远程访问他们的EC2 Linux实例。包括如何上传下载文件、如何ssh远程登录EC2虚拟机。 一、创建一个AWS EC2 Linux 虚拟机 创建一个Amazon…

HBuilder发行微信小程序

首先需要完善mainifest.json中的基本配置 这个需要组测dcloud才可以获取,注册后点击重新获取就可以。 然后发行前还需要完成dcloud的信息,这个他会给你网址 点击连接完成信息填写就可以了 然后就可以发行了。 发行成功后会自动跳转微信小程序&#xff…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的木材表面缺陷检测系统(深度学习+Python代码+UI界面+训练数据集)

摘要:开发高效的木材表面缺陷检测系统对于提升木材加工行业的质量控制和生产效率至关重要。本篇博客详细介绍了如何运用深度学习技术构建一个木材表面缺陷检测系统,并提供了完整的实现代码。该系统采用了强大的YOLOv8算法,并对YOLOv7、YOLOv6…

LeetCode101题:对称二叉树(python3)

对称二叉树定义: 对于树中 任意两个对称节点 L 和 R ,一定有: L.val R.val :即此两对称节点值相等。 L.left.val R.right.val :即 L的 左子节点 和 R 的 右子节点 对称。 L.right.val R.left.val :即 L…

微服务之商城系统

文章目录 一、商城系统建立之前的一些配置1、nacos2、Mysql3、consul【暂时不使用consul注册服务】这个可以跳过4、redis 二、grpc环境搭建三、微服务架构使用的protobuf1、查看proto的版本号2、安装protoc-gen-go和protoc-gen-go-grpc3、生成protobuff以及grpc的文件 一、商城…

EMQX+InfluxDB+Grafana 构建物联网可视化平台

EMQXInfluxDBGrafana 构建物联网可视化平台 本文以常见物联网使用场景为例,介绍了如何利用 EMQ X MQTT 服务器 InfluxDB Grafana 构建物联网数据可视化平台,将物联网设备上传的时序数据便捷地展现出来。 在物联网项目中接入平台的设备数据和数据存储…

Hadoop生态选择(一)

一、项目框架 1.1技术选型 技术选型主要考虑因素:维护成本、总成本预算、数据量大小、业务需求、行业内经验、技术成熟度。 数据采集传输:Flume,Kafka,DataX,Maxwell,Sqoop,Logstash数据存储:MySQL,HDFS…

设计模式-行为型模式-迭代器模式

迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。[DP] 首先,定义一个接口Iterator,它包含了遍历聚合对象所需的方法: public interface Iterato…

Linux Docker安装redis缓存数据库

文章目录 一、查找Redis镜像二、拉取redis镜像三、创建数据目录和配置文件四、创建redis容器 一、查找Redis镜像 首先到docker镜像仓库下载redis镜像。地址:https://hub.docker.com/搜索redis,如下:找到对应想要下载的版本: 二、…

openAI key 与ChatGPTPlus的关系,如何升级ChatGPTPLus

一、前言 先详细介绍一下Plus会员和Open API之间的区别: 实际上,这两者是相互独立的。举例来说,虽然您开通了Plus会员,并不意味着您就可以使用4.0版本的API。尽管这两个账户可以是同一个,但它们是完全独立的平台。 …

Day15 面向对象进阶——接Day14

Day15 面向对象进阶——接Day14 文章目录 Day15 面向对象进阶——接Day14一、访问修饰符二、Object三、深入String的equals()方法四、final 一、访问修饰符 1、含义:修饰类、方法、属性,定义使用的范围 2、经验: 2.1.属性一般使用private修…

关于安卓ZXing条码识别(二)适配竖屏

背景 不知道如何引入源码的,请看我第一篇文章,安卓源码引入 第一篇文章,粗略讲解了如何引入zxing到安卓的源码中,但是默认是横屏识别。 本文内容,就是如何进行竖屏识别。 环境 win10 as4 jdk8 感谢 博客 实现 …

离散化算法,以Acwing802.区间和为例子(C++实现)

目录 1.例题2.算法实现思路3.代码 1.例题 假定有一个无限长的数轴,数轴上每个坐标上的数都是 0现在,我们首先进行 n 次操作,每次操作将某一位置 x 上的数加 c接下来,进行 m 次询问,每个询问包含两个整数 l 和 r&#…

数学建模【对粒子群算法中惯性权重和学习因子的改进】

一、改进原因 这是前面 数学建模【粒子群算法】 中的一部分,这里提到了w存在的一些问题,那么本篇介绍一些方法对w和因子进行一些改进,提高粒子群算法的效率和准确度。 二、改进方法 1.线性递减惯性权重 惯性权重w体现的是粒子继承先前的速度…

Linux:kubernetes(k8s)pod的基础操作(6)

Linux:kubernetes(k8s)允许在任意节点使用kubectl命令(5)-CSDN博客https://blog.csdn.net/w14768855/article/details/136460090?spm1001.2014.3001.5501 我在前两张进行了基础环境的一系列搭建,现在就正…

LeetCode 189.轮转数组(三种方法解决)

文章目录 题目暴力求解空间换时间三段逆置总结 题目 LeetCode 189.轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5…

蓝桥杯真题讲解:三国游戏(贪心)

蓝桥杯真题讲解&#xff1a;三国游戏&#xff08;贪心&#xff09; 一、视频讲解二、正解代码 一、视频讲解 蓝桥杯真题讲解&#xff1a;三国游戏&#xff08;贪心&#xff09; 二、正解代码 //三国游戏&#xff1a;贪心 #include<bits/stdc.h> #define int long lon…