【Linux系统编程】权限

news/2024/10/4 20:06:34 标签: linux, 运维, 服务器

目录

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.niftyadmin.cn/n/5690294.html

相关文章

关于深度学习torch的环境配置问题

已经下好了torch在虚拟环境中,结果在ipynb文件中无法运行 后来在终端直接用python语句编译 发现没有问题 在编辑测试py文件 发现runcode有问题 原来是插件默认base环境 具体操作参考VS Code插件Code Runner使用python虚拟环境_coderunner怎么在虚拟环境中使用-CSD…

浅谈stm32的GPIO引脚配置模式

STM32的GPIO(通用输入输出)引脚可以被配置为多种模式,以适应不同的应用场景。下面介绍一些一些常见的STM32 GPIO引脚模式: 模拟输入模式(Analog Input Mode):在这种模式下,GPIO引脚被…

探索Python中的装饰器模式

引言: 在Python编程中,装饰器是一个非常重要的概念。它们提供了一种优雅的方式,能够在不修改原始函数代码的情况下,为函数添加新的功能。本文将深入探讨Python中的装饰器模式,包括其工作原理、如何创建装饰器以及如何在…

基于facefusion的换脸

FaceFusion是一个引人注目的开源项目,它专注于利用深度学习技术实现视频或图片中的面部替换。作为下一代换脸器和增强器,FaceFusion在人脸识别和合成技术方面取得了革命性的突破,为用户提供了前所未有的视觉体验。 安装 安装基础软件 安装…

带你深入浅出设计模式:五、简单工厂模式:构建软件的高效生产“流水线”

此为设计模式第五谈! 用总-分-总的结构和生活化的例子给你讲解设计模式! 码农不易,各位学者学到东西请点赞收藏支持支持! 开始部分: 总:简单工厂模式就是通过一个工厂类创建对象,减少了客户端…

Android SystemUI组件(10)禁用/重启锁屏流程分析

该系列文章总纲链接:专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明: 说明:本章节持续迭代之前章节的思维导图,主要关注左侧上方锁屏分析部分 应用入口处理流程解读 即可。 在 Android 系统中,禁用锁屏…

Ubuntu启动后第一次需要很久才能启动GTK应用问题

Ubuntu启动后第一次需要很久才能启动GTK应用问题 自从升级了 Ubuntu 之后,设备重启,发现打开 Terminal 、Nautilus 以及其他的GTK 应用都很慢,需要至少一分钟的时间启动。 刚开始也是拿着 journalctl 的异常日志去寻找答案,但是没…

ValueError: You cannot perform fine-tuning on purely quantized models.

在使用peft 微调8bit 或者4bit 模型的时候,可能会报错: You cannot perform fine-tuning on purely quantized models. Please attach trainable adapters on top of the quantized model to correctly perform fine-tuning. Please see: https://huggi…