【Linux】权限详解 权限本质、权限属性、su、sudo提权、chmod\chown\chgrp、文件类别

文章目录


一、权限的认识

  • 什么是权限?
    生活中处处都有权限,本质就是你要做一件事能还是不能的问题,有权限就能做,没权限就算你想做也不能做
  • 为什么linux要有权限?
    首先linux是一款多用户的操作系统,也就意味着可能同时会有多个人来进行登陆访问,如果一个用户可以随意读取或修改其他用户的文件,不就乱套了,所以权限本质就是为了更好的用户管理。

二、linux的权限本质

在linux下权限=人+文件属性 ,第一次听可能很难理解,小编会在接下来的介绍中慢慢让大家接受并理解的。

权限是针对特定的群体的,也就是是与人就关,在linux下有两类人:普通用户和root。

人访问的目标主体要具备天然的属性才能访问,比如你在现代2025年就不能成为秦始皇去骑北极熊。在linux中由于一切皆文件,所以linux下的目标主体当然就是文件,文件一般具有三个属性:可读、可写、可执行,如果用户有读一个文件的权限,但是文件本身没有可读属性,那也读不了。

所以你就通过设定文件特定的属性,来约束特定的群体具有特定的权限。

三、linux的用户

在linux中,用户一般分为两类,一类是超级用户root,在99%的情况下不受权限的约束,属于linux系统中的特权级别,一类是普通用户,会受到一定的约束。

su指令

该指令可以实现root用户与普通用户之间互相切换。 su 用户名

指令就可以切换到目标用户,root切换到普通用户是直接切换,不需要密码普通用户若想切换为root需要输入root用户的密码。这里还有一个快捷热键,ctrl+d可以切换回上一个用户。

除了上面指令可以切换外,直接 su 也可以由普通用户切换为root,因为普通用户可以由多个,但是root只有一个,所以su默认就是切换到root。 还有一个指令su -,也可以完成由普通用户到root的切换,它和上面两个指令的区别是它会以目标用户重新登陆的方式切换,上面两个指令只是切换用户身份,不进行二次登陆所以不改变当前路径。

su也可以普通用户与普通用户之前切换,这种方式需要输入登陆目标的用户的密码。

sudo提权

这里有一个场景,普通用户想安装软件,安装软件本质就是将文件拷贝到指定系统的指定路径下,而大多数情况操作系统不会让普通用户拷贝,只有root能拷贝,那这意味着只有root才能安装软件?这样显然与我们常识相背,所以linux支持让普通用户短暂提高权限,也就是sudo提权。示例如下:

总结:sudo是一条能让普通用户的指令进行短暂提权的指令。

这里我想读者应该和小编第一次接触这个知识一样,sudo是输入的普通用户自己的密码,(这里输入自己的密码是合适的,因为sudo是让普通用户能短暂提权,如果要输入root的密码那sudo也需要管理员来操作,那和切换到root账号就没有本质区别了)那我每隔一定时间sudo一次,那我一直都有root的权限,那root不就形同虚设了吗?

所以linux有一个规定,普通用户默认是不能sudo提权的,(虚拟机除外)普通用户sudo报错如下:

我们看到是因为普通用户没在一个叫做sudoers的文件里,sudoers是一个只能由root访问修改的属于root的配置文件,该文件相当于linux系统里的白名单,只有在该白名单里的用户可以进行sudo提权,普通用户默认是不在这个白名单里的,只有root把该用户添加到了这个白名单他才能sudo。所以以后文件被恶意修改后也只能是白名单里的用户操作的,可以缩小追查范围。

四、linux角色

在现实世界,一个人所拥有的权限是由这个人的角色决定的,比如校长叫张三,他能开除学生学籍不是因为他是张三,而是因为他是校长这个角色,所以我们可以认为权限是依附于角色的。

在linux系统里存在三种角色,一种是文件的拥有者(owner),一种是所属组(group),一种是其他(other)。下面我们以hello.c文件为例来讲解:

用ll指令查看文件属性只会显示文件的拥有者和所属组,不会显示other,因为识别出用户既不是拥有者也不是所属组那么他就是other。

那么角色和我们前面 介绍的用户有什么关系呢,相信大家都能猜个7788,答案是角色是由用户来扮演的。
文件的拥有者是指文件是由谁创建的,该文件属于谁,我相信这很好理解,但是所属组小编认为有必要详细解释一下:

如果文件角色只有owner和other的话,组长想看你写的代码那你只能开放other权限,就相当于你对所有other都开放了权限可以看你的代码,就有可能让其他组的竞争对手看到你的代码。所以linux引入了所属组,因为组长肯定在组内,只要把组权限放开组长就能看了。所属组的存在就是方便对文件权限进行局部范围组级别的管理。

五、文件权限属性

文件的常见权限有三个:r(读),w(写),x(可执行)。

我们看上图,文件权限也会显示在文件详细属性里,其中r w x权限顺序固定无法修改,以r为例,若该文件可读则显示r,若不可读则显示-。

我们现在就可以将用户、角色、文件属性结合到一起来表达一个文件的权限,以test.c为例:

test.c文件的拥有者是root,所属组也是root,该文件的拥有者对应的权限是可读可写不可执行,该文件的所属组对应的权限是可读不可写不可执行,other没在这里体现出来,该文件other对应的权限的可读不可写不可执行。
注意:文件具有可执行权限不代表该文件可以被执行,文件想要被执行需要两个条件:文件本身是可执行文件且该文件有可执行权限

六、修改权限的指令操作

我们前面介绍过权限=人+文件属性,所以要修改一个文件的权限可以从两方面入手,一是修改文件的角色,二是修改特定角色的权限。

chmod指令(权限只会验证一次)

我们先来介绍修改文件属性的指令操作,只有root或文件的拥有者可以修改文件权限,(但是文件的拥有者无法更改文件的拥有者和所属组,后面再细讲)chmod就是修改文件属性的指令,具体用法如下:

只有普通用户才受文件权限的约束,root是不受文件权限的约束的,所以这也可以印证之前介绍的root是linux系统中的特权。
下面我们再看一个例子:

当我们把user的读写权限去掉后,那么在扮演user的用户就算还扮演文件的所属组,他也无法具有所属组拥有的权限了,这就间接证明了一个结论:当用户访问文件时,确定自己相对文件的身份角色,只会验证一次,也就是说,权限只会验证一次

下面我们用指令chown来直接证明。

chown/chgrp指令

chown可以更改文件的拥有者,chgrp可以更改文件的所属组,下面这个例子可以证明权限只会验证一次:

由于现在test.txt文件的拥有者被改为了root,所以whb就会被验证为所属组,所属组就有对应的读写权限。
chown还可以通过以下指令同时更改文件的拥有者和所属组:

这里小编还想仔细聊聊有关修改文件对应角色的用户的问题:

1、首先文件的角色是不能被修改的,也就是无法修改ll后显示出来的文件属性的那个特定位置代表的角色和权限,只能修改角色下的用户,也就是修改拥有者或者所属组是谁。

2、没有修改文件other的指令,因为修改拥有者和所属组就是在变相修改other。

3、文件的拥有者只能更改文件的属性,但是他不能更改文件的拥有者和所属组。因为把文件的拥有者和所属组修改为别人或者别组需要征得别人的同意,但是再linux中我们无法征得别人同意,所以要把文件的拥有者和所属组修改为别人需要超级用户的权限,也就是直接用root修改或者sudo提权修改。

修改文件权限的八进制方案

我们知道文件的一个角色有三种权限,是否有权限可以被看作数字1和0,有权限为1,没有权限为0,所以一个角色的的权限就有8种可能,我们可以用数字0~7来表示这8种可能,我们就可以用这样的8进制方案来修改文件属性:

七、文件类别详解

之前我们已经接触过了普通文件(-),和目录(d),其实linux中的文件不止这两类,下面我们来详细认识一下有哪些文件和文件对应的特点:

  • 普通文件( - ): 如源代码、文本、动静态库、可执行
  • 目录( d ):
  • 链接文件( l )
  • 管道文件( p )
  • 字符文件( c ): 如键盘、显示器,它必须按顺序输入输出,不支持随机读写,以字节为单位,这种文件都是以字符的形式输入输出,比如输出一个1234到显示器上,是用printf或cout格式化输出,以字符'1''2''3''4'显示在显示器上
  • 块设备文件( b ): 如磁盘, 它支持随机随机读写,以块(4kb)为单位

以上就是小编分享的全部内容了,如果觉得不错还请留下免费的关注和收藏如果有建议欢迎通过评论区或私信留言,感谢您的大力支持。
一键三连好运连连哦~~

相关推荐
老马啸西风16 分钟前
windows docker-02-docker 最常用的命令汇总
linux·运维·ubuntu·docker·容器·eureka·maven
sztomarch33 分钟前
Tshark-Tcpdump
linux·运维·网络·测试工具·tcpdump
手眼通天王水水42 分钟前
【Linux】3. Shell语言
linux·运维·服务器·开发语言
花小璇学linux2 小时前
imx6ull-系统移植篇9——bootz启动 Linux 内核
linux·uboot·imx6ull·嵌入式软件
程序员JerrySUN2 小时前
Valgrind Memcheck 全解析教程:6个程序说明基础内存错误
android·java·linux·运维·开发语言·学习
大母猴啃编程2 小时前
再谈文件-ext2文件系统
linux·运维·服务器·网络
NEXU52 小时前
Linux:线程控制
linux·运维·服务器
古井无波 20243 小时前
ARM64高速缓存Cache类型
linux
菜萝卜子4 小时前
【Linux】AKHQ实现kafka可视化
linux·运维·kafka
long_mingyue5 小时前
网鼎杯2020青龙组notes复现
linux·服务器·windows