目录
前言
一、shell命令以及运行原理
二、Linux权限的概念
三、Linux权限管理
1.文件访问者的分类
2.文件类型和访问权限
2.1文件类型
2.2权限访问属性
3.文件访问权限的修改
3.1权限的增加与减少
3.2 八进制数设置权限
3.3 目录权限含义
4.用户身份的修改
4.1修改文件拥有者:
4.2 修改文件所属组:
5.默认权限解析
四、粘滞位
总结
在社会中我们每个人都有各自的身份,而相应的身份又决定着是否具有对应的权限。比如我们想要管理一个仓库,那必须要具有仓库管理员的身份。Linux系统中同样具有权限的概念,那接下来我们就来一起看看Linux世界中的权限是如何分配的吧。
在介绍linux权限之前,我想要先介绍另一个概念,用户是如何与操作系统进行交互的?这里就要提到外壳程序shell。
Linux严格意义上说是一个操作系统,我们称之为“核心(kernel)”。我们一般用户是不能与kernel直接进行交互的,一般要借助kernel的外壳程序shell。我们将指令传达给shell,再由shell传递给kernel,同时shell会把kernel的处理结果翻译给使用者。
为什么要借助shell和kernel进行交互呢?原因当然是因为直接和操作系统交互是一个难度非常大的事,我们大多数人并不擅长,所以要找一个中间人来帮助我们。(可以理解成一个闷骚的男孩子看上了隔壁的女孩子,但他并不擅长和女孩儿打交道,所以找了一个媒婆去帮他牵线搭桥)。
shell的作用:
1.实现用户和操作系统的交互
2.保护操作系统,当用户提出错误或不合理的请求时,shell会直接拒绝
shell的运行原理:
创建子进程,让子进程进行命令行解释,这样子进程出了任何问题都不会影响父进程shell。(可以看出shell很聪明,找了一个劳动力帮他打工,一旦出了事情就直接让劳动力背锅)
shell vs bash
笔者使用的是centos 7,在使用过程中并没有见到shell,而是经常见到bash。
那么shell和bash是什么关系呢?可以这么理解:shell是所有外壳程序的统称,而bash是一种具体的shell。
linux下有两种用户,超级用户(root)和普通用户。
- 超级用户:可以再linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。
如果我们仅仅想提升当前指令的权限可以在指令前面加上sudo,但这要求发送指令的用户在超级用户的信任列表里。
- 文件及目录所有者:u--user
- 文件及目录所有者所在组的用户:g--group
- 其他人:o-other
如图所示,文件属性的最开头有十个字母,其中第一个字母代表文件的类型。
注意:linux系统下的文件类型与后缀无关,但建议大家按相应的后缀命名。
-:普通文件,文本,可执行程序,库
d:目录
文件属性其他信息的含义如下图一一对应:
我们重点关心开头十位字母的后九位,他们代表着文件的权限属性。 其中每三个字母为一组,分为三组,从前往后依次代表文件所有者的权限,文件所属用户组的权限,其他用户的权限。
其中每个字母都代表相应的权限:
注意:这些对应的权限只对普通用户有限制,超级用户拥有文件的全部权限,不受其限制。
指令:chmod(change mode)
语法:chmod u/g/o+r/w/x 文件名 或 chmod u/g/o-r/w/x 文件名
增加权限:
减少权限:
不写用户身份默认为全部
我们也可以把是否有权限用0或1标识,例如读写执行权限都有的话就是111,每三个二进制数构成一个八进制数,那三个用户身份的权限就可以用三个把进制数来设置。
在目录中字母代表的权限如下:
注意:其中x是最基本的权限,想要读或修改目录的前提是能进入目录,所以如果没有x权限的话,执行r或w权限时会被拒绝或报错。
刚才我们学习了如何修改用户身份的对应权限,那么如何修改用户身份呢?例如改变文件的拥有者或所属组用户。注意,这需要root权限。
指令:chown (change owner)
语法:chown 修改后的拥有者 文件名
指令:chgrp (change group)
语法:chgrp 修改后的所属组 文件名
也可以同时进行更改 :
从图中我们可以看出,在文件创建时,有些权限是默认拥有的。那么默认权限是根据什么规则来定的呢?这就要提到一个指令umask。
如图,umask是一个数,我们重点关注后三位002,把这看成是一个八进制数,转化为二进制数就是000000010。规定文件的起始权限为666,目录的起始权限为777,转化为二进制数后和umask进行该操作:起始权限&(~umask) ,最终得出来的结果为默认权限。
把这个计算公式简单概括就是,umask为1的位置默认权限必须为0,即该位置没有默认权限。
同时umask我们是可以自己更改的。
Linux为了让使用更灵活,它规定只要拥有目录的写权限,就可以删除目录中的任何文件。比如张三作为一个目录的拥有者,给了李四该目录的写权限,然后李四就可以删除目录中张三创建的文件,即便他作为other用户,没有该文件的任何权限,依旧可以删除该文件。
如果我们只是想让别人使用一个目录,但不想让他动我们创建的文件,那就要给该目录加上粘滞位,起到保护作用。
语法:chmod +t 文件路径
如图,我们给temp目录加上粘滞位。作为用户zxy,删除root所有的的文件失败,但可以删除自己的。
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由:
- 1.超级用户删除
- 2.目录的所有者删除
- 3.文件的所有者删除
以上就是今天要讲的内容,相信小伙伴们看完之后一定对shell的功能和权限的相关内容有了一定的了解吧。如果感觉本文有帮助的话不妨点个赞支持一下博主哦~你们的支持就是我创作的最大动力,我也将努力带来更加优质的内容,感谢大家的阅读。