Ⅰ.shell命名以及运行原理:
0x00引用:
什么是shell命令??
✔️ Shell 是一种命令行解释器(Command - Line Interpreter),它为用户提供了与操作系统内核进行交互的接口。用户通过在 Shell 中输入命令,Shell 会将这些命令解释并传递给内核执行相应的操作。
0x01对于Linux的作用呢??
✔️主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行输出结果,通过shell解析给用户。
总结:
①将使用者的命令翻译给核心(kernel)处理。
②同时,将核心的处理结果翻译给使用者。
0x02对比一下Windows操作系统:
✔️它用的是windows GUI(Windows 图形用户界面)它是一种用户与 Windows 操作系统进行交互的可视化界面。它使用图形元素,如窗口、图标、菜单、按钮等,取代了传统的命令行输入方式,使用户能够更直观、便捷地操作计算机。
这个就是可视化的桌面,我们只需通过鼠标去双击就能运行各种程序!!
所以,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)
0x03特点:
我们在Linux系统的操作界面,是不是会用到很多指令??也就是命令执行,就要通过它翻译给Linux内核的,当然还可以进行写脚本的编写,编写shell脚本⏭️将一系列的命令组合在一起,实现自动化的任务处理;而且我们定义的用来存储文件路径、用户名等的变量也是shell来实现的还有上次我们学到的重定向,例如输出重定向可以将内容输出到文件中,而不是屏幕;想必管道操作也必不可少,它可以将一个命令输出作为另一个命令的输入
0x04构造如何?
⬇️下图就是一个命令行的指示:
0x05让我看看怎么个回事?(运行原理简易版)
是不是还是有点不懂,没关系,接下来我会用一篇故事来加深理解:
有一个程序员叫小王(用户),特别擅长和代码打交道,但是不擅长和女生打交道,某天,意识到自己年纪大了,想要找女盆友结婚了就找上了媒婆中介所(外壳:shell)的王婆(进程)说:王婆啊,我想要你给我介绍隔壁村一个叫小美的女孩(指令);王婆说:没关系,包在我身上,找上小美(操作系统内核):隔壁村一个叫小王的帅小伙,年薪100w,城里有车有房啊,我看和你挺般配的,要不要见个面,耍耍盆友。小美一想啊,这个小王不是小时候班上天天那个留鼻涕的小男孩么,一下子印象就不好了,连忙拒绝了王婆,王婆就回去告诉了小王:要不还是换一个么,咱这条件,村里还有好几个得行的娃。(拒绝就相当于这个信息是错误指令)
小王这人死犟死犟的,就是要小美,接着找王婆:在试一试呗!王婆招架不住小伙这么撒娇,只好继续去找小美,这次去找小美,发现小美和父母以及同村小帅在一起吃饭,王婆也是一个高情商的人,这回门都没进去,直接就走了,让小王放弃。(防止重复错误指令,保护操作系统,直接由外壳处理掉了)
到第二天,经过小王昨晚日思夜想啊不行,我就是要小美,不想失去她;接着找上了王婆,王婆这一想啊,这要是没成,这村里口碑怕是要下滑,这可不行嘞,就上boss招聘,招实习生(子进程)来干小王这件事,将这个任务给实习生去做,成不了就是实习生能力不行,关我王婆啥事也没得,成了就夸我王婆慧眼识珠,找了这么个能人,这么难的任务都能完成
其实在shell内部,对于那些命令都是交给进程(王婆)来翻译的,因为外壳程序要是没了,咱们就一个指令也翻译不了,系统就直接崩溃了,所以需要通过进程来完成工作。
前面有提到过shell就一切外壳的统称!!! 因此不同外壳的名称有所不同,在Centos下的命令行解释器是bash
每次启动Linux,就会启动和这个外壳程序。
dashl和bash的关系就是媒婆和王婆的关系,王婆的职务是媒婆,媒婆可以是王婆,可以是张婆、刘婆、朱婆等等
0x06总结shell的作用:
①方便用户操作
②保护内核
Ⅱ.Linux权限问题:
0x00用户:su命令
✔️前面就有提过一嘴,Linux系统下有2种用户:root用户(超级管理员)和普通用户(whb)
Windows中也有,程序的运行可以通过过管理员身份进行运行
✔️不同用户所拥有的权限不同
管理员也就是超级用户的权限是最大的,这里就介绍到su指令,进行用户的切换,即切换用户。
但是注意的是我们的路经不会发生变化的,是在当前路径底下进行的切换,本来是root目录切换过来,sw用户显示的当前目录在root目录
使用su - 指令就可以切换用户同时转到家目录下
前面说过管理员权限很大,也就是它很霸道,因为root相当于房东,普通用户也就是租客,房东将房子租给你,人家手上还有你家备用钥匙,可以直接进入你家。他不需要找你要密码;也就是权限很大,强行闯入。
而作为租客的你,没有房东的密码是不能进房东家的,只有知道房东的密码才能进房东的家,当然你去房东旗下的其他租户家也是如此。也就是权限比较小。
0x01提权:sudo指令
前面说的只是切换用户,让其转换身份,说实在的,转换了身份那只是权宜之计,我们要怎么才能使用root的权限,这就不得不说sudo,它可以短暂的提升自己的某个指令使用权;比如:你认为房子墙壁看着有点不够舒服,于是你找上了房东说:我可不可以翻新一下房子的墙壁,钱不要你出给个准信,签个确认书啥的,然后你就短暂的拥有了房东的权利,但是只能对房子的墙壁进行装修,其他的没经过允许不能动装修好的房子,你住的舒服,但这还是房东的房子,对他来说房子反而变新了,以后租给其他租客,也能住在这个新房子里。
怎么用捏??
先看看下面:我不能移动,因为我没权限(注意这里是示范,别这样试,会完蛋的,你给指令目录搞没了,等会就不能这么用指令了,变的灰常麻烦,我已经重装系统了)
是不是只要使用提权就可以了呢??还是不行,显示我们这个用户没在某个文件里面
这就得提下该文件了,这个是白名单文件sudoers,只有认可你了,你才能做某些事。相当于学校保安亭,你是本校学生,在校有学生证,相当于你在学校是白名单里面的人,此时你就可以申请(sudo)进入学校。
下面我来教你怎么将用户加入白名单:
通过vim打开一个 /etc/sudoers 文件,要用root用户进行,只有房主才有权限
滑到96%的时候,找到下面的位置,以同样格式添加需要加入白名单的账户
保存并退出就ok了。
这样就可以提权了;
对了,提权之后,它会让你在大约15分钟时间内一直让你拥有root权限
这个是我接续上面的操作后的又一次操作
0x02权限
①是什么呢??
我们生活中,有很多涉及权限的问题,你看名侦探柯,是不是要b站会员,只有你是会员用户才能观看,家里保险柜,打开需要密码,只有你爸妈才能打开,很多都是权限原因。
本质就是能或者不能做的事情
②为什么??
<1>控制用户行为,防止错误发生。
<2>拆解权限(理解)
> 限制的是角色(人),或者说是身份地位;比如:校长办公室,不是每一个学生能随便进入的,只有某些特定的老师才能进去,才拥有这个权限。
>权限要求目标必须具备对应的属性;比如:你想要拿b站写代码(目标),它只能拿来看各种视频和番剧(具备的属性),那么敲代码这个行为就实现不了。
0x03 Linux权限:
①角色:
拥有者和所属组指的是具体的人扮演的角色或者说就是具体的人在该对象中所处的身份地位
❓❓所属组:
一群具有相关性(身份地位相同)的人员组成的一个组,可以由多个具体的人组成,比如:张三和李四都拿到了某公司offer,分别被分配了A、B组,该公司老总实行赛马制度,2个组成员可以进行同一个项目的研发,哪个组的产品更有优势就应用那个组。
这里的A组组长具有A组成员的这一个身份地位。
为什么要有所属组:
✔️更精细化的权限管理,但是首先要有更精细化的身份地位;
②文件属性:
r 读
w 写
x 可执行
- 不允许
✔️前面说了角色,而每种角色都有对应的属性,角色+属性就是权限了。每个权限位和后面的角色一一对应
在✨这里可以说:拥有者root拥有读写和可执行student文件的权限
0x04 chmod指令:设置文件访问权限|chown指令:修改拥有者|chgrp指令:修改所属组
chmod [参数] 权限 文件名
参数指的是选项+权限
R:递归修改权限
+:向权限范围(指的用户)增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:所属组(拥有者同组用)
o:其它用户
a:所有用户
使用起来也很简单,看下嘛就会用了,就是对应的角色给与对应的属性,根据你自己来给,取消没有的权限不会有影响;权限的更改随便玩就行了
=可以不用写,也可以写 ,得到结果完全是一样的
?? 思考一下可以随便改任何文件的权限么??
很明显修改不了,所以文件权限的修改也需要具有权限
第一点:用户只能修改自己的文件权限,也就是拥有者是谁,谁就能修改自己的权限,而root是随便的,超级用户无视规则
补充一点:修改文件权限另一方法(八进制表示法)
我们发现文件属性每种状态都是两态的。
如果当成比特位来看呢❓❓
权限位是3个字符为一组,我们就可以将其看成二进制,二进制转换为对应的八进制
这里的位是0-7,所以用的八进制表示法。
🤔🤔怎么用了,我直接改成和上图一模一样的权限;
每一个角色位对应一个八进制数,按顺序给予对应的八进制就能修改对应的权限了
没有权限会怎么样呢??
当我们没有写的权限时,只能进行读,无法写入!
那么我加入写的权限,就可以了
第二点:对于一个目标文件来说,如果我们本身就没带有权限的话,就不能进行操作,系统会拒绝我们的请求
❓假如我在所有者没有w权限,在所属组有写的权限,是不是能对该文件进行写的操作?(chown|chgrp指令)
写不了,为啥了??跟着我往下看
⭐⭐chown指令 修改拥有者(:所属组)默认只有root用户可以使用
chown 选项 新的拥有者 文件名
chown 选项 新的拥有者:新的所属组
①单独修改拥有者:
我们提权也是可以使用的
②修改拥有者、所属组:
chgrp指令 修改所属组(默认只有root用户可以使用)
如果我要单独修改的就是所属组的角色,那么就可以只用chgrp指令
chgrp 选项 新的所属组 文件名
总结:系统默认不允许将文件给别人(更改拥有者/所属者),如果想给别人就需要提权(sudo)或者用超级用户root来给
指令真的太多了,求怕累;
言归正传,我们的问题还没解答,先说了上面的这写操作,距离答案越来越近了;现在我们在试试,我们将拥有者改成root,此时所属组是sw,写入成功了
现在我们将其所属组的文件属性(+r)进行修改,获得可读的权限
如果当前用户在other角色呢??前面2个角色都不是当前用户,other具有rw的权限
又成功了!!!!
第三点:在Centos下,系统确定权限时,会先安装顺序拥有者->所属组->other来确定你是谁,当第一次确认你的权限后,则不在往后继续确实,第一次确认的你所对应角色所对应的权限是什么就是什么,不在确认第二次,如果不是当前用户,则会继续匹配,直到other(其他用户)
0x05 root权限:
普通用户当没有权限时,无法写入
在root下,即使没有权限也能进行操作,就是这么霸道
所有的规则权限限制的普通人,而root的权限不受任何约束
0x06可执行:
我文件都有可执行的权限了,为啥就是运行不了了❓
这是因为可执行权限只是让该文件具备可执行的机会
还需要这个文件具有可执行的能力
取消可执行文件的执行权限
打开以后,又能进行文件执行了
Ⅲ.目录权限:
0x00进入目录:
需要x权限,你可以理解为打开一个需要运行它
0x01查看目录内容:
需要r权限,没有r权限,目录内文件一个也看不见了
✔️ 我们原本的dest目录中文件内容
0x02 写入文件权限:
如果没有w权限,无法在指定目录下创建文件(touch、mkdir)
注意:root无视一切规则;这里是普通用户
0x03多用户之间怎么互相“隔离”
①家目录:
在Linux系统下, 每创建一个普通账号都会在/home目录下创建一个特定用户命名的文件夹,该文件的权限rwx都有
任何非root用户,无法进入其他用户的家目录(/home)
②缺省权限:
在Windows下,我们无法卸载或者删除一个正在执行的程序
而Linux也具备这个能力,防止我们在使用的时候被删除;
我们创建文件如下:注意dest是我之前按进行了修改的文件
umask的目标:凡是在umask出现的权限,都不应该在最终权限上出现
为啥要umask
①默认权限,由OS自主决定,无法创建修改--系统可以配置,可以灵活满足需要的一种表现
②特殊情况下,配置umask,可以控制文件默认权限,让代码可控;
umask是可以进行修改的,但是当我们退出后会恢复,不要害怕改乱了
删除文件:在我们家目录下,我们不能读写,却能删除它
✔️一个文件能否删除和你所处文件权限无关,而是和你所处的目录有关;
在我的目录下,你怎敢如此猖狂!!😡