目录
一.shell命令以及运行原理
二.Linux权限的概念与权限管理
2.1Linux权限的概念
sudo普通用户提权
2.2Linux权限管理
2.2.1文件访问者的分类(人)
2.2.2文件类型和访问权限(事物属性)
2.2.3文件权限值的表示方法
字符表示方法
八进制数值表示方法
2.2.4文件访问权限的相关设置方法
chmod
chown/chgrp
用八进制改权限
2.2.5目录权限
2.2.6缺省权限
2.2.7粘滞位
一.shell命令以及运行原理
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
将使用者的命令翻译给核心(kernel)处理。
同时,将核心的处理结果翻译给使用者。
为什么要存在内存程序?
1.方便用户操作
2.外壳程序,保护内核
(新命令到来,创建子进程)
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的 操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的 且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提 亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫 它王婆,它对应我们常使用的bash。
每次系统启动都会有一个bash的程序,它内部就是一个死循环,不断的进行命令行解释。shell是所有外壳程序的统称(媒婆),bash是其中一个(王婆)。
二.Linux权限的概念与权限管理
2.1Linux权限的概念
Linux下有两种用户:超级用户(root)、普通用户。
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。
su -:重新登录
su:身份切换(不改变位置)
sudo普通用户提权
我们普通用户直接sudo +命令会不能运行。
我们需要用root添加类似白名单一样的东西:
进入之后修改:
为:
这样我的lwz普通用户就可以使用sudo 来进行暂时提权。
2.2Linux权限管理
权限首先限制的是角色(人)。
权限要求目标必须具备对应的属性。
权限=角色+目标权限属性(文件属性)
2.2.1文件访问者的分类(人)
文件和文件目录的所有者:u---User(中国平民 法律问题)(拥有者)
文件和文件目录的所有者所在的组的用户:g---Group(所属组)
其它用户:o---Others (外国人)
上面提到拥有者,所属组,但是没有看到other。因为匹配到的用户不是拥有者和所属组就是other,other很多。
还有一个问题就是:拥有者和other都好理解,这个所属组是什么意思呢?(为了有更精细化的权限管理)假如我是某个小组的组员,我写了一段代码,想给组长看一下我的代码。那么我就必须开放权限给组长,如果只有文件拥有者和other的话,我开放权限就只能开放other的权限,那么其他所有人是不是都可以看见了,为了避免这样的情况发生,就专门设置了一个叫做所属组的东西,使开权限只让所属组看到。
2.2.2文件类型和访问权限(事物属性)
关于文件的权限,以前在C语言学过文件具有读,写,执行权限:
除了第一列的文件类型,后面的九个字符分别代表拥有者,所属组和other的权限位:
总体就是:
2.2.3文件权限值的表示方法
而r,w,x的意思:
i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—”表示不具有该项权限
它们的组合方式:
字符表示方法
八进制数值表示方法
2.2.4文件访问权限的相关设置方法
chmod
用chmod u-r my.txt改变拥有者的r权限:
这里显示的就不在有r。
还有一个问题,先来看:
在正常情况下,这个文件可读可写:
我先把r和w权限去除:
这里再想去读或者写就不行了:
问题就是,虽然我的拥有者权限没有了,但是我依然是所属组里的人,所属组的权限依然在:
因为在确定用户信息的时候,系统会先确定用户是谁,在Centos下,用户角色只确定一次,顺序就是拥有者,所属组和other。像上面的,我本身就是lwz用户,在确定我是拥有者之后就不会再往后面去确认了。
再举个例子:
这里我把拥有组的人改为了root,所属组还是lwz:
之后我再用lwz用户进行写和读就可以了(先与拥有者比较,发现不是再与所属组比):
同理我把所属组的rw权限也给去除,而且所属组的人也给改为root
后面用lwz用户再去写和读依然是可以的,因为other的rw权限是保留的。
我给my.txt给可执行权限,那么这个文件就一定可以执行吗? 肯定不会。
可执行权限!=文件可以执行(要有可执行的那个能力,给了机会你不中用啊)
chown/chgrp
这两个东西的用来更改人的,其实只需要用chown就可以更改全部的了。
把文件给别人必须高权限:
chgrp的用法跟chown一样,不过它改的是所属组。
用chown直接就可以改拥有者和所属组了。
sudo chown root:root my.txt
用八进制改权限
一个数字0-8可以表示所有的改变方案:
2.2.5目录权限
我们进入目录的时候需要的是文件属性的x属性:
比如我把work目录的x属性去除:
r权限的作用:
没有r权限无法查看文件里的内容:
w权限的作用:
下面我们就无法touch新建文件:
对root无效!
所以我们新建一个目录的时候,rwx权限都必须有。任何用户都无法进入其他用户的家目录。
因为它们的权限只对自己有rwx权限:
2.2.6缺省权限
我们在新建文件的时候它们的默认权限:
对于普通文件来讲:起始权限是666,默认不带可执行(除了可执行程序文件)
对于目录文件来讲:起始权限是777,默认带可执行
但是我们创建的文件权限不是很符合这个起始权限:
因为系统会存在一个权限掩码的概念(只看后三位):
最终权限=起始权限&(~umask)
计算过程如下:
umask的目的:我们希望凡是在umask中出现的权限,都不应该在最终权限里出现。
为什么要有umask:默认权限是由OS自主决定,无法在创建之间修改,但是我们如果可以自己配置,可以满足灵活需要。在特殊情况下,配置umask可以控制文件的默认权限,让我们的代码是可控的。
修改umask:
之后创建的目录还是普通文件都不会再有任何权限:
2.2.7粘滞位
目录里文件的删除跟目录本身的w有关,与目录里的文件无关。
前面我们知道,一个普通用户是不可以进入另一个普通用户。那如果我们要进行数据交互的话就需要在公共目录下建立一个两个人都可以进入,改变的目录:
我们可以使用sudo以root的身份创建一个中立的目录:
再给这个目录的other添加w权限:
这样普通用户就可以在这里实现数据交互,但是还有一个问题是,删除文件时跟文件本身无关,跟上一级的w权限有关,上面把w权限放开了那么任何人都可以随便删除里面的文件了。
为了避免这种情况,我们需要一个新的权限(粘滞位),让我们可以在这个目录下新建文件的同时,还不允许里面的文件被其他人删除:
other就被添加上了t :
这样之后,即使我们有w权限也不可以删除其他人的文件了(自己的依旧可以删除):
粘滞位特征:只能给需要共享的目录添加粘滞位。