当前位置: 首页 > article >正文

【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.kler.cn/news/330872.html

相关文章:

  • 广联达 Linkworks办公OA Service.asmx接口存在信息泄露漏洞
  • LeetCode 704. 二分查找
  • 2024年09月CCF-GESP编程能力等级认证C++编程一级真题解析
  • @antv/x6 嵌入结点到父节点中时,进行检测,查看当前节点是否是父结点,如果是父结点,不可以嵌入到父结点中,实现方法一。
  • 【AIGC】内容创作——AI文字、图像、音频和视频的创作流程
  • PHP反序列化7(字符串逃逸)
  • 《OpenCV 计算机视觉》—— Harris角点检测、SIFT特征检测
  • 用systemd 来控制 qt 程序的启动, 停止 . 解决 qt.qpa.xcb: could not connect to display 问题
  • 工程师 - 如何配置DNS服务器
  • 基于yolov8调用本地摄像头并将读取的信息传入jsonl中
  • SpringBoot框架下的社区医院信息系统开发
  • Stream流的终结方法(二)——collect
  • 2024大二上js高级+ES6学习9.29(深/浅拷贝,正则表达式,let/const,解构赋值,箭头函数,剩余参数)
  • 并集运算的线段树维护方式
  • c++就业磁盘链式b树与b+树
  • 3. 将GitHub上的开源项目导入(clone)到本地pycharm上——深度学习·科研实践·从0到1
  • 滚雪球学MySQL[7.1讲]:安全管理
  • 【笔记】数据结构12
  • Dubbo和Http的调用有什么区别
  • 【Docker】docker的存储