【Linux系统编程】权限

news2024/12/27 5:09:30

目录

1、shell命令以及运行原理

2、Linux权限的概念

3、Linux权限管理

3.1 文件访问者的分类(人)

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

4、目录的权限

5、粘滞位


1、shell命令以及运行原理

首先,我们来了解一条指令是如何跑起来的
一般操作系统是不会让用户直接用的,为了用户的操作体验,会在外面封装一个软件层
内层的操作系统称为操作系统内核,外层的软件层称为外壳程序,也称为shell外壳

通常说的操作系统是操作系统内核 + 外壳程序
在windows中,操作系统 = windows操作系统内核 + 图形化界面
在Linux中,操作系统 = Linux操作系统内核 + 命令行操作
在windows中是既可以图形化操作,也可以命令行操作的
当我们对计算机进行操作时,会调用外壳程序中的命令,外壳程序将我们所给的命令传递给操作系统内核,操作系统内核作出相应的操作,并将操作结果传回给外壳程序,外壳程序再显示给用户

从技术角度, Shell的最简单定义:命令行解释器(command Interpreter)主要包含
将使用者的命令翻译给核心(kernel)处理。

同时,将核心的处理结果翻译给使用者。

并且当我们输入命令给shell外壳时,shell外壳会创建子进程,让子进程帮你进行命令行解释,创建子进程的好处是为例保护外壳程序

当我们输错指令时, 是在bash这个可执行程序下找不到命令,bash就是一个外壳程序
shell外壳:操作系统外层软件的统称
bash:具体的一款外壳程序

2、Linux权限的概念

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

超级用户:可以再linux系统下做任何事情,不受限制

普通用户:在linux下做有限的事情

超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

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


若普通用户想切换成其他普通用户,su 其他普通用户名,然后输入其他普通用户的密码

命令:sudo
功能:对普通用户进行提权

为什么会失败呢?
因为使用sudo对普通用户进行提权操作时,需要普通用户是白名单中的用户。系统中有一个配置文件sudoers,需要超级用户才能打开,并将用户加入配置文件就可以sudo。因为我们现在还没有学到哪里,现在就使用切换成root,再到cxf的指定路径下创建一个以root身份创建的文件

3、Linux权限管理

3.1 文件访问者的分类(人)

对于文件而言,访问者有3类:拥有者、所属组、other 
我们来看一下列出一个文件的详细信息时,这些信息都是些什么

这里没有列出other,是因为一个文件的拥有者和所属组都是唯一的,而other可以有很多个
假设a去看b的文件file,而a既不是file的拥有者,也不是file的所属组,那么a就是other
区分拥有者、所属组和other,就是为了进行更细粒度的权限管理

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

权限 = 人 + 事物的属性
在3.1中我们讨论了对于一个文件来说,访问者的类型,实际上,对于某一个文件的权限,除了取决于访问者的类型,还需要看这个文件的属性,也就是事物的属性。例如,a是文件file的拥有者,file对于拥有者所给出的权限是读和写,但file本身无法进行写,那么即使a具有写的权限,也无法对file进行写的操作。

对于文件属性,有r读,w写,x执行,-代表没有权限
在文件的详细信息中,会发现前面有10列字符,第一列是说明这个文件是一个普通文件还是目录。后9列每3列是这个文件对于拥有者、所属组、other的权限
注意:每个字符的位置都是固定的


所以,现在要说明一个文件的权限,是要说拥有者有什么权限,所属组有什么权限,other有什么权限。
此时引入上面root和普通用户的概念与这里结合。无论是root,还是普通用户,都会在Linux操作系统中扮演一个角色,而这个角色就是拥有者、所属组、other的其中一个。所以权限限定的不是人,而是这个人扮演的角色。

操作文件时,系统是知道这个用户是谁的,然后看是什么角色,再看有那些权限。

我们现在来看一下,要如何修改一个文件的权限,有两种方法:

方法一

chmod u拥有者/g所属组/o other/a所有人 +- r/w/x 文件名

文件执行 = 有执行权限 + 文件可执行 

方法二

因为对于每个身份,都有3个位来表示权限,所以可以用二进制转换成八进制的数来修改权限

也就是说,root是无视权限的,对于root,权限只是建议作用,没有实际作用

我们前面修改文件的权限是通过修改文件对于拥有者、所属组、other的权限。当一个用户要访问文件时,除了可以修改这个用户对应身份的权限外,还可以修改这个用户的身份


也可以使用chown完成拥有者和所属组的共同修改

身份切换的权限问题

root想把拥有者、所属组给谁就给谁,无论这个文件的拥有者、所属组是否是root
但是普通用户是无法将文件的拥有者、所属组给root或其他普通用户的。因为前面修改文件对于拥有者、所属组、other的权限时,是对文件本身进行修改,而现在修改文件的拥有者、所属组时,是将文件给其他人。所以,若是想将文件给其他人,需要使用root或sudo

4、目录的权限


我们会发现,目录与文件一样,对于每一个角色都有3种属性,我们现在来看一下目录中3种属性分别有什么作用。



实际上,我们可以对dir3进行各种操作,也是因为cxf在dir3的父目录test_10_1的权限是rwx

权限掩码

我们会发现,新建一个普通文件默认的权限是664,而新建一个目录的权限是775,为什么呢?
实际上,目录创建时的权限默认起始值是777,普通文件创建时的权限默认起始值是666,目录通常需要有x权限,而普通文件不需要。Liunx中有一个权限掩码的概念,创建出来的权限值与起始值不同,就是因为权限掩码,权限掩码的作用是方便用户能够自行设置创建出的目录或普通文件的权限

权限掩码是一个8进制数,但是我们只关心它的后三个
最终权限 = 起始权限 & (~权限掩码)

5、粘滞位

要清楚粘滞位的作用,我们先来看看下面这个例子


从上面的样例可以发现,对于文件本身的读、写、执行,文件有他本身的权限,但文件被新建、删除、修改并不取决于文件本身的读、写、执行权限,而取决于这个文件所处目录给的权限

/home中一个用户就是一个目录,并且这些目录只对拥有者开放所有权限,所属组、other任何权限都没有,所以一个用户的目录下,除了自己可以操作,只有root可以操作,普通用户是无法进入另一个普通用户的目录的,即使进了,操作后也可被删除。
若想让两个用户共享一个文件,此时文件不能放在两个用户的目录下,应该新建一个共享目录,这个目录只要不在两个用户的目录下建就行,并且最好使用root建,让两个用户的身份都是other,这样两个用户的身份是平等的。然后要给other写的权限,这样两人就可以在这个目录下编辑了。


此时一个用户在共享目录下创建文件并写入内容,另一个用户就可以获取到里面的内容了

此时若是给文件的other加上w权限,那么另一个用户就可以对文件就行编辑了
所以,文件的拥有者是可以控制另一个用户对这个文件的权限的

假设现在文件拥有者不想给另一个用户任何权限了,但是另一个用户此时仍然是可以删除这个文件的,因为这个文件的父目录share赋予了other写的权限,这是不能改变的,因为若是连写的权限都没有了,这样每一个other都无法编辑目录,那就不是共享目录了。但一个对文件任何权限都没有的用户却可以删除这个文件,这显然是不合理的。
我们想要的是,share目录允许任何人编辑,但是删除只能文件拥有者删。
此时就需要使用到粘滞位了


给目录添加了粘滞位之后,在这个目录中的普通文件或目录就只允许拥有者或root删除

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

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

相关文章

大数据开发--1.2 Linux介绍及虚拟机网络配置

目录 一. 计算机入门知识介绍 软件和硬件的概述 硬件 软件 操作系统概述 简单介绍 常见的系统操作 学习Linux系统 二. Linux系统介绍 简单介绍 发行版介绍 常用的发行版 三. Linux系统的安装和体验 Linux系统的安装 介绍 虚拟机原理 常见的虚拟机软件 体验Li…

招联金融秋招内推2025

【投递方式】 直接扫下方二维码,或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus,使用内推码 igcefb 投递) 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…

四、网络层(下)

4.9 CIDR CIDR(Classless Inter-Domain Routing),是IPv4地址分配和路由表选择的一种灵活且高效的方法。 1992年,由于分类地址中的B类地址很快就被分配完了,且路由表中的表项也急剧增加,分类的IP地址并不能…

高校实训产品:教育AI人工智能实训与科研解决方案

保持前沿、提升就业、低成本的教育AI实训全场景方案 产品概述 AIGC实训云图站解决方案为高校提供了灵活、高效的人工智能实训平台。通过弹性裸金属调度技术和GPU虚拟化,实现高性能与低成本的兼顾,为学生和教师提供不受时间和空间限制的实操机会。平台涵…

Linux查看触摸坐标点的方法,触觉智能RK3562开发板,瑞芯微、全志等通用

平时遇到键盘、鼠标、触摸板等输入设备无响应等异常情况时,一般通过更换设备判断异常。但在遇到更换正常设备后,输入仍然异常的情况下,可以借助evtest工具查看内核的上报事件信息,协助定位问题所在。 本次使用的是触觉智能EVB356…

Yolo v11目标检测实战1:对象分割和人流跟踪(附源码)

一、运行效果演示 多目标跟踪 二、基本理论和核心概念 2.1 对象分割 对象分割是指将图像中的每个像素标记为属于某一特定对象或背景的过程。对于YOLO来说,对象分割是其功能的一个扩展,通过添加额外的分支来预测每个检测框内的像素级掩码,从…

Python画笔案例-073 绘制晃悠悠的海龟

1、绘制晃悠悠的海龟 通过 python 的turtle 库绘制 晃悠悠的海龟,如下图: 2、实现代码 绘制晃悠悠的海龟,以下为实现代码: """晃悠悠的海龟.py """ import time # 导入时间模块 import math # 导…

TypeScript 算法手册 【计数排序】

文章目录 1. 计数排序简介1.1 计数排序定义1.2 计数排序特点 2. 计数排序步骤过程拆解2.1 找出数组中的最大值2.2 创建计数数组2.3 统计每个数字出现的次数2.4 重建排序后的数组 3. 计数排序的优化3.1 处理负数3.2 对象数组排序案例代码和动态图 4. 计数排序的优点5. 计数排序的…

[VULFOCUS刷题]tomcat-pass-getshell 弱口令

tomcat-pass-getshell 弱口令 启动容器,打开网站 点开manageapp,输入弱口令 tomcat/tomcat 之后在下面上传jsp大马,首先生成一个jsp马 这里我直接使用github别人生成好的 tennc/webshell: This is a webshell open source project (github.…

Image-Text Co-Decomposition for Text-Supervised Semantic Segmentation

highlighted region-word pair contrastive loss (L h c l _{hcl} hcl​) 辅助信息 mmcv环境不好满足,不建议复现

理解无监督学习、无监督图像分割

系列文章目录 文章目录 系列文章目录一、无监督学习如何学习 能不能举一个非常具体的例子,带着运算过程的例子总结 二、在图像分割中呢,具体怎样实现无监督示例:使用自编码器和k-means进行无监督图像分割1. **数据准备**2. **构建自编码器**3…

小练--盲打学成在线

免责声明:本文仅做分享! 学成在线 (olin-yi.github.io) 目录 目录构造 基础公共样式 base.css index.html 版心居中 网页制作思路 CSS 实现思路 头部整体布局 logo 导航制作技巧(nav) 搜索区域(search&am…

Leetcode 2300. 咒语和药水的成功对数

1.题目基本信息 1.1.题目描述 给你两个正整数数组 spells 和 potions ,长度分别为 n 和 m ,其中 spells[i] 表示第 i 个咒语的能量强度,potions[j] 表示第 j 瓶药水的能量强度。 同时给你一个整数 success 。一个咒语和药水的能量强度 相乘…

进程的环境

进程环境 main 函数 当内核执行 C 程序时,在调用 main 函数之前先调用一个特殊的启动例程。可执行文件会将此启动例程指定为程序的起始地址 —— 这是由连接编辑器设置,而连接编辑器是由 C 编译器调用。启动例程从内核取得命令行参数和环境变量值&…

Nodejs多版本切换工具NVM

1 nvm介绍 NVM(Node Version Manager)是一个用于管理多个Node.js版本的工具,它允许用户在同一台计算机上安装和切换不同版本的Node.js。这对于开发者来说非常有用,因为不同的项目可能需要不同版本的Node.js环境。 NVM功能特性&a…

【Spring】Spring Boot项目创建和目录介绍

1 Spring Boot 介绍 Spring 让 Java 程序更加快速、简单和安全,Spring 对于速度、简单性和生产力的关注使其成为世界上最流行的 Java 框架 Spring 官方提供了很多开源的项目,覆盖范围从 Web 开发到大数据,Spring 发展到了今天,已…

使用Mac高频重复输入时别再傻傻的复制粘贴了,让快捷短语解放你的双手

你在使用Mac的时候,常用的句子、词语、代码都还在自己手动输入吗,当你需要高频的输入同样的内容,手动输入效率太低了,我发现一款实用的工具帮你解决这个问题,快捷短语-高频输入神器,更支持iCloud云备份。 快…

记录一个chatgpt接口站的明文密码泄露漏洞

前言 前段时间看到的一个chatgpt接口网站,注册过后,习惯性的F12看下请求包和响应包,于是就有了这篇文章。 漏洞 查看登录的一系列流量,除了前端界面相关的,一共有三个请求,分别是login,getle…

msvcr110.dll丢失怎么弄,详细介绍4种可靠解决方法

1. msvcr110.dll 简介 1.1 定义及作用 msvcr110.dll 是 Microsoft Visual C 2012 Redistributable Package 的一部分,它是一个动态链接库(Dynamic Link Library)文件,对于运行使用 Visual C 2012 编译的应用程序至关重要。这个库…

如何在 DAX 中计算多个周期的移动平均线

在 DAX 中计算移动聚合很容易。但是,计算一段时间内的移动平均值时会有一些陷阱。由于其中一些陷阱是定义问题,因此我们必须小心,不要选择错误的方法。让我们看看细节。欢迎来到雲闪世界。 添加图片注释,不超过 140 字&#xff08…