【Linux】文件权限的理解

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 【Linux】文件权限的理解

不用心做一件事情,你永远不知道自己有多么的强大!

d08c6792abd64b62ac609d3d71909754.jpeg

一、shell命令以及运行原理(centos7下,shell为命令行解释器bash)

1. 什么是shell(Kernel外层的软件层)?

我们将输入指令的行这个叫做命令行,我们每输入一个指令,他就会帮我执行这个指令,这个指令的执行其实就是由一个叫shell的东西帮我们执行的


55ecffc49c1c4b70bf3e761db4c2a0fc.png

当我们远程登录到我们的云服务器时,系统就会自动给我们关联上bash这个程序,这个程序被称为命令行解释器shell

78254b41603f4813b048b5361b2aca08.png


操作系统内核Linux Kernel,作为一名用户来讲,并不是直接访问这个内核的,因为这不安全,并且Linux也不想让你这么用,所以在内核的外层又包裹了一层软件层,我们将这个软件层称之为shell,也叫做外壳程序,命令行。

我们在操作windows时,用的是图形化界面,windows GUI实际上也属于一种外壳程序

,他把用户的输入操作,通过点击或者通过指令的方式收到,然后外壳程序将收到的指令传递给操作系统,操作系统对指令进行处理,处理完后将结果返回到外壳程序,也就是给到用户


1.将使用者的命令翻译给核心(kernel)处理。

2.同时,将核心的处理结果翻译给使用者c9aea9c86d474025bd34c5bb700f6d9b.png


c9aea9c86d474025bd34c5bb700f6d9b.png

2. shell的交互方式+存在意义

上一波概念: (看看就行)


在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(command interpreter,命令解析器)。它类似于DOS下的COMMAND.COM和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。


传统意义上的shell指的是命令行式的shell,以后如果不特别注明,shell是指命令行式的shell。


shell提供了你与操作系统之间通讯的方式。这种通讯可以以交互方式(从键盘输入,并且可以立即得到响应),或者以shell script(非交互)方式执行。shell script是放在文件中的一串shell和操作系统命令,它们可以被重复使用。本质上,shell script是命令行命令简单的组合到一个文件里面。


交互式shell和非交互式shell:

交互式模式就是shell等待用户的输入,并且执行用户提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当用户签退后,shell也终止了。

shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与用户进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。


shell存在的意义是什么呢?

a.帮忙进行命令行传递和返回结果

b.保护操作系统,拦截某些非法指令的非法请求


利用shell解析我们输入指令,我们也可以通过创建子进程来进行执行(当然这是后话了)



3. windows GUI对比Linux shell(都是Kernel外层的软件层)


对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。


shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。


划重点:

这应该很好理解嘛,比如博主现在喜欢上一个漂漂亮亮的女孩子,但是呢,博主是个感情小白,只会努力提升自己,没心思考虑这些东西,所以博主不敢和女孩子交流,那怎么办呢?我会通过一个中间人,这个人可能就是那个女孩子的闺蜜,来传递我对她的爱慕之情。结果你猜怎么着?那个漂漂亮亮的女孩子和博主是相同的情况,她也不敢和我交流,那她也通过她的闺蜜来向我传递她对我的崇拜与仰望之情,毕竟博主这么优秀嘛,有女孩子喜欢也很正常啊。(骗你们的,博主其实是个单身很长时间的单身狗,555).

在这个故事情节里面,博主就是用户,闺蜜就是shell,那个女孩就是OS Kernel,我们的传递不能直接面对面交流,只能通过shell进行命令的解析,然后传递给对方。


二、Linux权限概念

1. 权限的抽象理解


权限概念:a.限制人的b.访问的对象天然可能没有这种“属性”。

权限也可以理解为一件事情是否允许被谁“做”

权限=人+事物属性(有些事物天然可能就没有这样的属性或有这样的属性)

上面的事物,我们在linux下谈的就是文件(现阶段)


2. Linux上的用户分类+身份切换+角色划分

2.1 root和普通用户

a.root,超级管理员 – 几乎可以干任何事情 –

b.普通用户



2.2 身份切换(su 或 su-)

用户如何切换的问题


su 就可以切换到root用户,如果想要回到普通用户,crtl+d就可以退出登录了,su只是单纯的进行了身份的切换,工作的目录并没有发生改变

su -相当于让我们的root重新登录,默认处在我们的家目录下,也就是/root


我们可以利用root的身份来访问其他用户,如果用普通用户的身份访问的话,你是不知道那个用户的密码的,用root就可以省去这个步骤了


对单条指令进行提权,某些指令在操作时,会显示权限不够,指令请求失败,这时如果要切换到root用户来进行访问的话,有些太麻烦了,因为我们只需要对一条指令进行提权,没必要再切换成root用户来访问。


这时我们就可以将sudo+command的方式来对指令进行提权,注意我们这里输入的是普通用户的密码,并非root用户的密码


ea7cb422a94548b0b55a98cdf60a1fe8.png


2.3 角色划分

1.文件拥有者: 文件是谁的

66ab2eb9e57047e3a1bb09bfca75e234.png


2.文件所属组: (朋友圈分组)


d9a72d4b62cf4bcaaf5662742827162d.png



假设我们现在有这么一个场景,如果没有文件所属组这样的概念的话,对于文件来说,那他就只有文件拥有者和other这两种身份了,例如现在马组长想看看小王写的

代码怎么样,然后test.c的拥有者是小王,由于马组长没有读test.c文件的权限,小王被迫就给马组长开了一个other能够看test.c文件的这么一个权限,结果呢?


这时候就出事了,由于刘组长和小李(小王的竞争对手)他们对于test.c文件来说也都是other,此时他们作为other的身份都能看到你的代码了,这咋办呀,竞争不过B组了,绩效奖金也没了,自己的代码还被偷了,你说憋屈不憋屈?


所以如果没有文件所属组的话,这是一件非常不合理的事情,就类似于你发朋友圈,你想给部分人看,不想给某些人看,结果你就给other开了一个能够看你朋友圈的权限,所有人都能看到了,呃呃呃,这真的令人很生气啊,怎么可以这样捏?所有就出来个朋友圈分组这么一个东西,解决你的需求。


故事后续: 小王一看这可不行啊,立马就开了一个test.c的文件所属组,把他们A组的成员都拉进去,还有他的马组长,这样一来,他们A组成员奋发向上,终于做出来的微信产品超过了B组,刘组长和小李同志欲哭无泪,小王也因为创造出文件所属组这样的概念,被公司领导提拔,走上了迎娶白富美的道路。


这也正是文件所属组存在的意义,便于我们对组内进行管理


3.文件的other: 文件不是谁的


1797c4e228634618892a7df58e3c879f.png



2.4 root&&普通用户&&拥有者&&所属组&&other的关系


在这个世界上,人是要始终扮演不同的角色的,你可以是一个程序员,也可以是你母亲的好儿子,你女朋友的依靠,将来你孩子的父亲,你孙子的爷爷等等,所以人存在于这个世界上是要始终扮演不同的角色的


root和普通用户就类似于人,拥有者、所属组、other就是角色,root可能是拥有者、所属组,普通用户可能是拥有者、所属组、other


3. Linux的文件属性

3.1 Linux下的文件类型划分

一个文件可以有的属性是rwx,读、写、执行

文件类型和文件权限:

5c3c37ac1346424dad4aef77f25d1da9.png


其中包括文件大小单位为字节,文件创建或最近修改的时间


我们现在来分析一下这些信息都分别代表什么含义,首先倒数第一排,我们称之为文件名,windows下文件都会有后缀名,并且是以后缀名来区分各个文件,我们Linux操作系统可不这么划分,Linux不会以你的文件后缀来区分这些文件,他会以文件属性中第一列中的第一个字符来区分文件类型。

还会包括文件大小,单位为字节,和 文件创建或最近修改的时间


-: 普通文件,文本,可执行文件,归档文件(例如.tgz那个压缩包就是归档文件)等

d: 目录

b: 块设备,block,例如磁盘

c: 字符设备,键盘或显示器

p: 管道文件

s: 网络socket文件

l: 链接文件 link


拿我们创建文件时,他的后缀名有什么用呢?我该如何看待这些后缀名呢?

a.你想用就用,可以给人看

b.将后缀看作文件名的一部分


我们下面来给大家演示一下对于上述的理解,通过下面这张图片你可以看到,在我编译test.c文件之后产生的可执行程序a.out,我们不停的改动他的后缀名,a.exe a.txt等等,当我们运行的时候,他们都会产生hello world的运行结果。


这也就能说明我们Linux在看待a.out这样的文件的时候,是不管他的后缀名的,爱你怎么改动这个后缀名呢,运行的时候都是一样的bbf5a67855b04494ba40dee008fb66df.png


bbf5a67855b04494ba40dee008fb66df.png

但是如果我们将test.c改为test.txt时,情况就会不一样了,通过cat可以看到,确实test.txt里面的代码我们没有改动,但是当我们通过gcc编译器编译时,shell告诉我们文件是不能被识别的,这时可能我们产生疑问了就,不是后缀名加不加都没关系么?

你这里为什么不能编译啊?怎么回事呢?

fb9b5f234ac64f798c46ef27e419a0a5.png



如何来理解这个问题呢?

其实这是两码事,我们Linux操作系统可以不管这些文件的后缀,但并不代表操作该文件的软件或其他编译器不关心这些后缀,例如我们这里的gcc,他可无法识别你这.txt后缀的文件,所以它并不能够编译你这个文件


3.2 Linux下的文件权限


5fd1ca30709145909e1fc7ffc1091006.png


3.3 文件权限的更改: chmod u/g/o 加或减 r/w/x(a±可以帮助我们批量化处理权限的添加和去除) + 利用八进制方案表示(一个八进制位代表一个角色的权限,八进制大小代表权限的拥有或去除)


一般而言:要改一个文件的权限,必须是这个文件的拥有者或者是root 才可以改这个文件的权限

因为我(root)是test.txt文件的拥有者,所以我现在具备修改它权限的能力。

我们现在就给test.txt文件的所属组加上了可写入的权限

5c4f8f2d776c4005b2d58611dd386771.png


我们现在可以给cmd.txt的所属组一次性加多个权限(可写入和可执行)

5d3cbd382b1c47d89287db57bbe10d17.png

我们现在也可以给不同的人加上不同的权限,利用逗号便可以完成此操作。

当然取消权限的话把+改成减号就行,我们这里也就不放图片给大家演示了。


32b6a0e76eb04bce80435a415d168dea.png


我们现在也可以给所有人加上某个或多个权限,省下我们每次用逗号一个一个加权限。

也就是批量化处理权限的添加和去除

7dd4ca9b1f1e4f9da98edccb2a9f02eb.png


我们现在利用八进制方案对test.txt文件的权限做出更改,去除他的三个角色的所有权限,这个八进制方案还是比较好用的,我们每一个用户的权限位正好能代表八进制的数字。

306ba40ae79a499fa0bb77af28cb93ba.png


3.4 有和没有权限是什么区别


例如我现在是一个文件的拥有者,但我当前是没有任何权限的,所以即便这个文件是我的,但是很遗憾,你无法读取这个文件,权限拒绝,因为权限就是来约束普通人的,除非你是一个root用户

例如下面因为我只是个普通人,所以我无法打印test.txt的内容


ee91ec061655452ca27d2f8c13834904.png


当我切换为root用户时,情况就不一样了,我就可以打印出来test.txt文件的内容了

b812c374d5514bc388936b44ccf53221.png


权限是用来约束普通人的,root怎么可能被约束呢?


3.5 Linux文件拥有者,所属组的切换(chown 和 chgrp)


在对文件的拥有者或所属组进行修改时,我们有两种方法,一种就是用sudo指令进行提权,然后修改。另一种就是利用root的身份进行修改。

chgrp与chown不同的是,chgrp允许普通用户修改文件所属的组,只要该用户是该组的一员。

4b9cd07a5e8f4a6fb68dcbd0e792406c.png

本不属于wyn的test.c文件,只有root这样的身份才能讲test.c这个文件硬塞给wyn,都不问问wyn是否接收,直接就强制给到用户wyn了。


当你想把一个东西给别人的时候,要不要征得别人的允许?所以普通用户是没有改文件拥有者这样的权限的。强制给你文件的用户只能是root用户


拥有者、所属组更改后,other也变了,所以other不用特意改。

3.6 对指令提权产生的一个疑问(对指令提权用sudo,后面文章再讲产生的疑问)


我们知道,如果我们当前对于某条指令没有权限的话,我们是可以通过sudo进行提权的,此时需要我们输入普通用户的密码,这里其实就会产生一个疑问了?


如果我们对于没有权限的指令,想要操作的话,我们显然只需要普通用户的密码和sudo指令就可以完成任务了,那还需要root用户做什么呢?他的功能完全被代替了啊。


这个问题我们留到后面去讲


4.Linux的默认权限+目录权限+粘滞位

4.1 file指令(查看文件类型)

ChildDir是一个目录,normal.txt是一个空文件,重定向之后,normal.txt变成一个文本文件

db333d3f80764309ba96a48e302a72a5.png


test.c是一个C源代码文件

f5aea7209a774f61bfdc9e6a3d9d740d.png

a.out是一个可执行程序

5d07bfdc685e4d4c8ad379cc835aa43a.png

dir.tgz是一个使用gzip压缩算法的.tgz压缩包


cdd0eeb6386944bdbefc293ab022e1f9.png



4.2 目录的权限(可进入,可创建,可删除,可查看,rwx)

如果我们要进入一个目录,只需要一种权限,就是可执行权限 – x6ffd18c8f37e4134be0b128b799547d1.png


对于目录来讲,r意味着,在没有r权限的目录下,我们无法查看当前目录下的文件名和文件属性。

8e39b7675c3543b7a8389c352f89c254.png


对于目录来讲,w意味着,在没有没有w权限的目录下,我们无法直接在该目录下创建新文件,并且删除文件也不行。

所以,能够在特定目录下,创建或者删除文件是由该目录的w权限所决定的。

3b928aa2a3bb4e3781eaeab73efd8400.png








































































相关文章
|
6月前
|
算法 安全 Linux
Linux粘滞位(Sticky Bit)与文件权限的深度解析
Linux粘滞位(Sticky Bit)与文件权限的深度解析
199 0
|
6月前
|
存储 Linux 数据安全/隐私保护
Linux文件权限及用户管理
Linux文件权限及用户管理
52 0
|
6月前
|
安全 Linux 数据安全/隐私保护
【Linux】深入理解Linux文件权限
【Linux】深入理解Linux文件权限
98 0
|
17天前
|
存储 安全 Linux
|
5月前
|
Linux
linux查看修改文件权限
linux查看修改文件权限
49 4
|
2月前
|
安全 Linux 数据安全/隐私保护
探索Linux操作系统的文件权限管理
【9月更文挑战第29天】在数字世界中,文件权限管理如同保护我们隐私的锁。本文将带你了解如何在Linux系统中设置和管理文件权限,确保你的数据安全。我们将一起学习如何通过命令行工具来控制文件访问,就像学习一门新语言一样有趣。准备好了吗?让我们一起开启这场技术之旅!
|
1月前
|
Linux
linux/mac 下查看、修改文件权限的命令
这篇文章介绍了在Linux和Mac操作系统下如何查看和修改文件及文件夹的权限。
67 0
|
3月前
|
Linux 开发工具
在Linux中,文件权限有哪些?有什么作用?
在Linux中,文件权限有哪些?有什么作用?
|
3月前
|
Linux 数据安全/隐私保护
在Linux中,什么是文件权限?什么是rwx权限模型?
在Linux中,什么是文件权限?什么是rwx权限模型?
|
3月前
|
Linux 数据安全/隐私保护
Linux文件权限
Linux文件权限
下一篇
无影云桌面