Linux 权限的理解

内容摘要

本文内容包括shell的运行原理,包括外壳程序的原理、理解、和意义,以及从两个方面对于权限的理解(人和事物的属性)、修改文件的权限,包括修改文件的拥有者、修改文件拥有者所在的组的用户以及修改文件的三类用户的访问文件的权限、最终权限与起始权限和umask的关系、以及粘滞位的作用和使用。

shell的运行原理

shell的运行原理:外壳程序

首先思考:我们作为操作者(用户)使用操作系统的过程,是在直接使用操作系统吗??

外壳程序的理解

不管是我们操作widows还是Linux,其实我们都不是在直接使用操作系统,在使用window时我们通过图形化界面进行访问操作系统,在Linux我们通过命令行进行访问,这里的图形化界面、命令行就是外壳程序。

外壳程序的意义

为什么我们要通过外壳程序进行访问操作系统,而不是直接访问操作系统呢??

Linux操作系统的内核是十分复杂的,我们直接进行访问操作系统的成本比较高

我们是人,是人就会犯错误,通过外壳程序可以帮我们规避错误,增加容错率,极大的减少了系统崩溃的概率

外壳程序的原理

将使用者的命令翻译给核心(kernel),然后将核心处理结果翻译给用户

权限的理解

权限的概念

通俗的来说就是是否被允许去做一些特定的事情的资格

权限的两个方面 人和文件的属性

对于人

第一方面:

分为普通用户和root用户,root用户也成为超级用户,相当于人身上的身份

对于普通用户:通常会受一些权限的约束,不同的用户可能会受不同的权限约束

对于root用户而言:几乎不会受权限的控制

举个栗子

比如一个人是字节的员工,那么他可以随意进出字节公司,但是他是进不去腾讯的大门的,他能够进入字节,是因为他是字节员工的身份,这个身份给予了他允许进入字节的资格,也就是说字节给了他权限,但是腾讯没有 。

第二方面:

通过文件访问者进行分类

通过文件访问者可以分为三类:文件和文件拥有者文件和文件目录拥有者所在组的用户其他用户三类

通过ls -l指令进行查看目录的详细信息

这里的的三个目录都是通过用户的身份进行创建的,所以目录的拥有者和目录拥有者所在的组的用户都是root。
这里解释一下拥有者所在组的用户的概念,如上图所示,创建文件或者创建文件目录的用户既然既是文件和目录的拥有者,也是文件和目录拥有者所在的组的成员,那么文件和目录拥有者所在的组的用户有什么作用呢??其实文件和目录拥有者所在的组还是十分重要的,假设我们以后步入企业,对于同一个项目,公司分配两个及以上的组进行研发,这两个组是竞争关系,如果没有文件目录拥有者所在的组,那么除了创建文件的用户,这个组的其他用户都成了其他用户,和另一个项目组的成员权限一样了,所以Linux引入了文件和文件目录拥有者所创建的组的概念,可以单独分配权限给这个组,完美解决了这种问题。

对于事物属性

文件类型和访问权限

文件类型

  • d:目录
  • -:普通文件
  • l:软连接(相当于window下的快捷方式)
  • b:块设备(硬件部分)
  • p:管道文件
  • c:字符设备文件(例如屏幕等串口设备)
  • s:套接口文件

对于Linux来说文件类型只有通过以上类型来定义,和文件的后缀名无关,既然无关我们为什么在创建文件时还要定义后缀,这里的后缀有什么作用呢??对于Linux系统来说,没有任何作用,这里的后缀只是用来给用户看的。

我们通过gcc g++进行编译文件生成可执行程序要求我们需要特定的文件后缀,并不能说明任何问题,gcc g++相当于Linux下的程序。

权限

对于权限那一列,每三个字母为一组,分别是文件所有者的权限、文件拥有者所在组的用户的权限、其他用户的权限,字母 'r' 代表有读的权限、 字母 'w' 代表有写的权限字母 'x'代表可执行权限,如果没有相对应的权限则在相对应的位置用 '-' 表示。每类用户的三个位置的字母不能够随意改变。

如上图所示,code目录的权限就是,对于文件拥有者来说,拥有可读可写可执行的权限;对于文件拥有者所在的组的用户来说,拥有可读可执行的权限,没有可写的权限;读于其他用户来说,也是拥有可读可执行的权限,没有可写的权限

目录权限的总结(易混淆)

  • 进入目录:需要拥有可执行权限
  • 查看目录下的文件列表:也就是ls指令,需要读权限
  • 在目录下进行创建、删除目录或者文件:需要拥有写权限

修改权限

修改文件的拥有者

格式:chown + 将要修改成的成员名 + 被修改的文件名

修改文件的拥有者所在组的用户

格式:chown + 将要修改成的成员名 + 被修改的文件名

注意:这里进行修改文件的拥有者和拥有者所在组的对象,对于root用户而言是可以完成的,但是对于普通用户来说是需要进行权限提升的。

修改问文件被访问权限

  • 用户加标识符法

修改文件拥有者访问文件时的权限

chmod u 运算符 权限字母 文件

修改文件拥有者所在组的用户访问文件时的权限

chmod p 运算符 权限字母 文件

修改其他人访问文件时的权限

chmod o 运算符 权限字母 文件

  • 八进制法

通过二进制的八进制法进行修改文件权限,每类用户的权限都是由三个字符进行表示分别为r(-)、w(-)、x(-),当有相对应的权限时在相对应的位置记作1,否则记作0。例如上图中10.24code这个目录的用户权限分别用二进制进行表示时为101 111 101 ,用八进制进行表示为575。

我们可以用这种形式进行更改文件用户的权限

通过chmod将文件中各个用户的读、写、可执行权限全部打开。

最终权限与起始权限和umask的关系

新建目录的默认起始权限为0777 

新建文件的默认起始权限为0666

通过创建一个目录和文件进行观察

通过创建文件我们可以看到,在没有任何修改的条件下,刚刚创建的目录的权限为775,文件权限为664,这和我们的结论有所不同,这是为何呢??这和umask值有关

那么最终权限和起始权限与umask的关系

凡是在umask中出现的权限都不应该在最终权限中出现

最终权限不是我们看到的通过减法进行实现的,而是起始权限和umask按位取反然后按位与得到的。

粘滞位

粘滞位的作用

当用户在同一个目录下,进行创建文件,通过粘滞位避免文件拥有者的创建的文件被除自己以外的用户删掉。

举个栗子:

通过超级用户root创建一个目录文件,并将文件目录对于各个用户的读写执行权限全部打开,方便后续各个用户进行,创建并储存文件

切换至一个普通用户,然后创建一个普通文件,并将文件对于其他用户的读写可执行权限全部不给予

切换至另一个用户,想要查看ys用户的文件,因为ys将文件对于其他用户的读写执行的权限全部不给予,wyt用户所以说不具备查看ystest.c文件的权限,因为查看不了,wyt用户直接执行将ystest.c这个文件进行删除,竟然删除成功了

这里解释一下为什么删除成功,文件是否能够被删除是由文件所在的目录的权限进行决定的,这里就会产生这样的疑惑,直接把目录文件对于其他用户的写权限直接进行不给予不就直接妥了吗?但是真的就是这样吗?将其他用户的写权限进行关闭,那么文件的拥有者也不在拥有写文件的权限。所以就需要粘滞位进行解决这个问题

粘滞位使用

格式:chmod +t  目录名

注意事项:

  • 只能给目录进行使用粘滞位
  • 粘滞位是谁设置的,只能谁取下

其他用户再进行删除时,就会删除失败。

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

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

相关文章

域渗透AD渗透攻击利用 MS14-068漏洞利用过程 以及域渗透中票据是什么 如何利用

目录 wmi协议远程执行 ptt票据传递使用 命令传递方式 明文口令传递 hash口令传递 票据分类 kerberos认证的简述流程 PTT攻击的过程 MS14-068 漏洞 执行过程 wmi协议远程执行 wmi服务是比smb服务高级一些的,在日志中是找不到痕迹的,但是这个主…

鸿蒙中富文本编辑与展示

富文本在鸿蒙系统如何展示和编辑的?在文章开头我们提出这个疑问,带着疑问来阅读这篇文章。 富文本用途可以展示图文混排的内容,在日常App 中非常常见,比如微博的发布与展示,朋友圈的发布与展示,都在使用富文…

【树莓派 5B】anaconda换源 更换清华源

【树莓派 5B】anaconda换源 更换清华源 前言 本文基于树莓派5B上运行的 Raspberrypi-OS-64bit (Debian 12 Bookworm)平台,更换 Anaconda 官方源为清华大学镜像源,旨在解决网络连接超时、连接官方源失败、下载速度慢的问题。 参…

spring (Aop) day 1024

ok了家人们,继续学习spring ,这段知识点有点绕,建议搭配b站的视频去学,passion!!! 八.AOP-面向切面编程 8.1 动态代理 8.1.1 概述 什么是代理?在现实生活中,代理很常见…

学习虚幻C++开发日志——TSet

TSet 官方文档:虚幻引擎中的Set容器 | 虚幻引擎 5.5 文档 | Epic Developer Community (epicgames.com) TSet 是通过对元素求值的可覆盖函数,使用数据值本身作为键,而不是将数据值与独立的键相关联。 默认情况下,TSet 不支持重…

iOS 18.2开发者预览版 Beta 1版本发布,欧盟允许卸载应用商店

苹果今天为开发人员推送了iOS 18.2开发者预览版 Beta 1版本 更新(内部版本号:22C5109p),本次更新距离上次发布 Beta / RC 间隔 2 天。该版本仅适用于支持Apple Intelligence的设备,包括iPhone 15 Pro系列和iPhone 16系…

【设计模式系列】观察者模式

一、什么是观察者模式 观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被称为发布-订阅模式&…

「重磅」中国电信数据湖+数据中台实施方案(附60页方案)

来源:公众号-数据分析小兵 作者按 哈喽,大家好,我是数据分析小兵,今天小兵向大家分享中国电信基于数据湖的数据中台实施方案。 方案核心内容一:数据湖的搭建与实施 数据湖是一套针对海量多源异构数据,具备数据采集、数据存储、数据计算、数据访问、数据管理的技术架构…

1.CentOS安装

CentOS安装 新建虚拟机 选择安装方式 指定镜像方式 选择操作系统类型 设置虚拟机名称和位置 指定磁盘大小 点击“自定义硬件” 指定内存大小 指定镜像位置 点击“开启此虚拟机” 选择“Install CentOS 7”并回车 选择语言 选择安装“GNOME桌面”环境 配置安装位置 配置网络和…

springboot高校科研项目和课题管理平台-计算机毕业设计源码18198

摘要 随着科技的快速发展和高校科研水平的持续提高,科研项目和课题的管理逐渐变得复杂多样。传统的管理方式,如使用纸质文档或简单的电子表格进行记录,已经无法满足现代高校科研管理的需求。这不仅影响了科研工作的效率,还可能导致…

CentOS 7(Linux)详细安装教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 一、CentOS镜像的下载(准备工作) 我选择的是其他镜像源的下载地址: Index of /centos-vault/7.6.1810/isos/x86_64/ | 南阳理工学院开源镜…

8个方法教会你提高企业培训效率

培训成本是企业中的一个复杂问题。它完全取决于课程内容、培训方法以及成本效益。在计算培训费用时,公司会面临许多关于包括哪些内容、如何进行以及假设情景的问题。 企业员工培训的每个方面都会产生自己的成本。例如: 地点:我们专门找个培训…

冒泡排序(Python)

冒泡排序:依次比较相邻的两个数,将大数放在后面,小数放在前面。 n个数排序共需进行n-1趟,第一趟排序结束时,最后一个元素为所有元素中的最大值。 冒泡排序的原理 1)比较相邻元素:如果第一个比…

婚纱相册必须去摄影店吗?其实自己会拍照就能实现,性价比更高

一直以来,婚纱照都是新人们婚礼筹备中不可或缺的部分。然而,高昂的摄影店价格让不少新人望而却步。其实,只要掌握一些拍照技巧,自己在家就能制作出独一无二的婚纱相册,不仅性价比超高,还能留下更多珍贵的回…

Android 中的串口开发

一:背景 本文着重讲安卓下的串口。 由于开源的Android在各种智能设备上的使用越来越多,如车载系统等。在我们的认识中,Android OS的物理接口一般只有usb host接口和耳机接口,但其实安卓支持各种各样的工业接口,如HDM…

条码检测系统——基于MATLAB的一维条码识别

摘 要:条码技术是如今应用最广泛的识别和输入技术之一,由于其包含的信息量大,识别错误率低而在各个方面得到很大的重视。它发展迅速并被广泛应用于于工业、商业、图书出版、医疗卫生等各行各业。由我国目前发展现状来看,条码的正…

攻坚金融关键业务系统,OceanBase亮相2024金融科技大会

10月15-16日,第六届中新数字金融应用博览会与2024金融科技大会(简称“金博会”)在苏州工业园区联合举办。此次大会融合了国家级重要金融科技资源——“中国金融科技大会”,围绕“赋能金融高质量发展,金融科技创新前行”…

【C++指南】运算符重载详解

引言 C 提供了运算符重载这一特性,允许程序员为自定义类型(如类和结构体)定义运算符的行为。 通过运算符重载,可以使自定义类型对象像内置类型一样使用运算符,从而提高代码的可读性和易用性。 本文将详细介绍 C 中运算…

【状态机DP】力扣2786. 访问数组中的位置使分数最大

给你一个下标从 0 开始的整数数组 nums 和一个正整数 x 。 你 一开始 在数组的位置 0 处&#xff0c;你可以按照下述规则访问数组中的其他位置&#xff1a; 如果你当前在位置 i &#xff0c;那么你可以移动到满足 i < j 的 任意 位置 j 。 对于你访问的位置 i &#xff0c…

若依微服务15 - RuoYi-Vue3 实现前端独立运行

正文开始&#xff1a; RuoYi-Vue3 使用 Vue3 Element Plus Vite 技术栈。 GitHub 开源地址&#xff1a;https://github.com/yangzongzhuan/RuoYi-Vue3 本文介绍使用若依提供的在线后端接口&#xff0c;仅启动前端项目并进行界面开发&#xff0c;而无需启动后端服务。 一、克隆…