目录
一、shell命令以及运行原理
二、Linux权限的概念
2.1创建用户
2.2切换用户
2.3删除用户
三、Linux权限管理
3.1文件访问者的分类(人)
3.2文件类型和问权限(事物属性)
3.2.1文件类型
3.2.2基本权限代表的作用
3.3文件权限值的表示方法
3.4文件访问权限的相关设置方法
3.4.1chmod
3.4.2chown
3.4.3chgrp
3.4.4umask(权限掩码)
四、file
五、目录权限详解 && 粘滞位
六、关于权限的总结
一、shell命令以及运行原理
Linux严格意义上说的是一个操作系统,我们认为的在shell上敲的指令就是对操作系统在操作,但又不知道操作系统是啥,对于Linux操作系统而言,其由“内核(kernel)“ ,kernel的“外壳”程序,也就是所谓的shell,文件系统,应用程序组成。目前文件系统,应用程序不考虑,只考虑内核,外壳,通过一张图来展示:
操作系统内核又分为狭义和广义说法:
狭义:就是指的Linux 内核
广义:Linux内核+Linux外壳和对应的配套程序
我们通常所说的操作系统内核指的是狭义说法
那么,我们敲的指令会通过shell来与kernel沟通。如何理解?
从技术角度上,Shell的最简单定义:命令行解释器。
该命令行解释器工作(外壳程序):
1.将用户输入的指令,解释传递给内核
2.内核执行命令,得到结果,将结果通过外壳传送给用户
既然命令是通过内核执行的,那为什么不能直接使用kernel?
帮助理解:张三看上了村里的如花,但他是个害羞小伙子,不敢去表白,那村里有个媒婆,大家称之为王婆,张三向王婆诉说了情况,王婆了,就跑到如花家中,告诉张三喜欢她,如花一听,知道张三前史,觉得张三不靠谱,便拒绝了,王婆回去复命,张三不想死心,再劝王婆诉说,王婆再往,如花这次换了个理由,说她喜欢上了隔壁的李四,王婆知如花意,再回复命,这下张三也明白喜欢如花如此难度,彻底死心了,王婆也不如意,因为这次的媒她没牵成功,这会影响她的声誉呀,王婆心想一计,顾几个员工来牵媒,并成立了媒婆婚介所,这下员工搞砸了,也不会影响王婆的声誉,从此以后王婆深得人心。
通过这个故事,其中张三就代表着“用户”,如花代表“操作系统”,王婆代表“shell”。shell对应我们常使用的bash,bash是命令行解释器的统称,shell是一个具体的命令行解释器。
如图:
对此,我们重新认识shell:
是什么?
shell本质其实也是一个执行起来的程序(进程)
为什么要有shell?
操作系统本身易用程度难+安全问题,所以用户不能直接访问OS
shell具体怎么做的?
shell都是通过创建子进程的方式让子进程去执行有风险的指令
对于进程的概念是什么,我们留到进程的章节系统讲。
二、Linux权限的概念
Linux下有两种用户:超级用户(root)、普通用户。
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
2.1创建用户
通过adduser + 用户名,创建好用户后,通过passwd+用户名,设置密码,这个密码输入是看不见的,且密码不要设的过于简单,其次,会要你进行第二次输入密码进行确认。
2.2切换用户
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的密码。
命令:su - [用户名]
与su一样切换用户,但是他们存在着区别。
如果root用户所处目录是普通用户的目录,那么su只是切换了root身份,但工作目录仍然是普通用户的工作目录,如果root用户所处目录是属于自己的目录,那么su切换成普通用户,工作目录仍然是root的目录。如果普通用户所处的目录是属于自己的目录,那么使用su切换成root用户后,root所处工作目录仍然是普通用户的工作目录,同理,如果是属于root的,那么切换后,还是属于root的工作目录。
而使用su -就不一样了,root用户切换成普通用户后,当前工作目录就是普通用户的目录,普通用户切换成root用户后,当前工作目录就是root用户的工作目录
su命令
root切换到普通用户,又切换前,root所处目录是属于root的工作目录,那么切换后仍然是处于root的工作目录
使用cd命令将所处root工作目录回到普通用户的家目录,然后再切回到root用户,那么此时依然是处于普通用户的工作目录
su -命令
当前是哪个用户,那么当前所处工作目录就是哪个用户的工作目录
2.3删除用户
命令:userdel [用户名]
功能:删除用户
在普通用户下,要删除别的用户,是做不到的,因为它没有这个权限,为了可以让普通用户有这个权限,可以通过sudo命令提权,意思是在这条命令中,可以让普通用户拥有root用户的权限,此时就可以删除用户,在删除时,也会让你输入当前用户的密码进行确认
引出了权限一个说词,那么权限具体是什么了,为什么要有权限?
权限是伴随着文件的,相应的权限代表着用户是否能够对其进行相应的操作,可以起到一个保护的作用。那么接下来我们进行学习权限到底是如何管理的。
三、Linux权限管理
权限管理本质上是用户去进行管理,而对文件的访问有不同的用户存在,同时文件又有不同的文件类型,当对应的用户去访问文件时,还会受到文件权限的限制
3.1文件访问者的分类(人)
文件访问者分为了三类用户,所有者(u),所属组(g),其他用户(o)
文件和文件目录的所有者:u---User(中国平民 法律问题)
文件和文件目录的所有者所在的组的用户:g---Group(不多说)
其它用户:o---Others (外国人)
3.2文件类型和问权限(事物属性)
先看一个文件的详细信息:
如上显示一个文件的详细信息,之前没有提,在这里就可以说明了,这一串详细信息可以用
下图来进行表示,一个文件的类型由第一位符号决定,接着便是权限,权限占了9个字符,在三类用户中,每个用户拥有3个字符,这3个字符决定了该用户对文件的访问权限。
3.2.1文件类型
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)s:套接口文件
我们知道在Windows中区分文件类型是通过后缀来辨别,但Linux区分文件类型,与我们创建文件时自己写的后缀无关,与第一列的字符有关。那后缀在Linux还有意义吗?有,后缀是为了方便给用户看的。
3.2.2基本权限代表的作用
i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动修改目录内文件的权限
iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—”表示不具有该项权限
在了解了文件的访问者分类以及权限的作用,那么问题来了,为什么文件的所有者指的是这个文件属于哪个用户管理的,或者由其他人管理,但是所属组是什么玩意?为什么要有它?
所属组:一组内可以有一名成员或多名成员。所属组是为了防止非我团队的成员对我的文件进行操作,同时为了方便我团队的成员对我的文件操作,达到权限划分的作用。
3.3文件权限值的表示方法
a)字符表示方法
b)8进制数值表示方法
3.4文件访问权限的相关设置方法
3.4.1chmod
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod命令权限值的格式
① 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
+/-更改文件权限:
还可以通过逗号分割执行多条:
=更改文件权限:
让所有用户只拥有可执行权限
如果不是文件拥有者,就不可以更改文件访问权限,除非用sudo进行提权。如下:
由于root用户所在目录对其他人是没有可读权限,所有普通用户根本读不了,那么只能通过sudo来进行提权了,同理也没有可写权限,那么就不能修改/root目录下文件的权限
②三位8进制数字
由于权限可以通过八进制来进行表示,所以修改权限也可以通过修改八进制数
3.4.2chown
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
修改文件拥有者前:
由于普通用户不能修改普通用户的文件属性,所以由root来修改文件拥有者:
修改文件拥有者后,所有者为lzy用户,那么zyf用户就相当于其他用户了,不能对test.txt文件属性进行写,执行权限,只有读权限。
3.4.3chgrp
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
修改所属组:
通过chown还可以同时修改所有者和所属组:
3.4.4umask(权限掩码)
功能:
查看或修改文件掩码
新建文件夹默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到
umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
格式:umask 权限值
说明:上述按位与的结果,相当于将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。
即超级用户新建文件最终权限为:0666 & ~0022 == 0666-0022 = 0644(rw-r--r--),新建目录最终权限为:0777 & ~0022 == 0777-0022 = 0755
普通用户新建文件最终权限为:0666 & ~0002 == 0666-0022 = 0644(rw-r--r--),新建目录最终权限为:0777 & ~0022 == 0777-0022 = 0755
超级用户:
默认权限掩码:
新建文件:
新建目录:
普通用户:
默认权限掩码:
新建文件:
新建目录:
更改权限掩码:
那么相应的最终新建的文件权限也发生了改变
四、file
功能说明:辨识文件类型。
语法:file [选项] 文件或目录...
常用选项:
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-z 尝试去解读压缩文件的内容。
五、目录权限详解 && 粘滞位
虽然前面已经提到权限的作用,但对于目录权限而言还有进一步的扩展。
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.
当然这些权限仅限普通用户之间相互作用,对root用户是不起效的。
首先通过root创建的用户其默认权限只有拥有者权限,所以用户与用户之间是不能够相互访问的:
那么要可以进行访问首先得开通其他人执行权限,例如,开通lzy:
又d1目录是可以被其他人访问的,所以zyf用户可以进行访问:
于是, 问题来了~~
换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限.
例如:将/home目录权限放到最大,让所有用户都有写读执行权限。
所以为了防止这种现象,Linux引入了粘滞位
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
六、关于权限的总结
目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但没有目录的读权限
所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
一个文件一定是属于一个目录,一个文件属性能不能被查看,是由目录的权限决定的。
一个文件一定是属于一个目录的,一个文件能不能被删除,这个文件本身不能决定,由所属的目录与对应的账户是否有w权限决定。
为了不然其他用户可以随意删除文件,也证明了为什么目录的最终权限是775
一般情况下,新建用户默认是不让其他用户进入