前言
在社会中我们每个人都有各自的身份,而相应的身份又决定着是否具有对应的权限。比如我们想要管理一个仓库,那必须要具有仓库管理员的身份。Linux系统中同样具有权限的概念,那接下来我们就来一起看看Linux世界中的权限是如何分配的吧。
常用权限对照表
图解权限
对照表
linux显示 | 数字 | 解释 |
---|---|---|
-rw------- | 600 | 只有所有者才有读和写的权限 |
-rw-r–r– | 644 | 只有所有者才有读和写的权限,组群和其他人只有读的权限 |
-rwx------ | 700 | 只有所有者才有读,写,执行的权限 |
-rwxr-xr-x | 755 | 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限 |
-rwx–x–x | 711 | 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限 |
-rw-rw-rw- | 666 | 每个人都有读写的权限 |
-rwxrwxrwx | 777 | 每个人都有读写和执行的权限 |
变更权限方式一
chmod [{ugoa}{±=}{rwx}] 文件或目录
chmod u+x test.txt
chmod u-x,o+x test.txt
变更权限方式二
chmod 777 test.txt
r=4 w=2 x=1 rwx=4+2+1=7
rwx = 4 + 2 + 1 = 7 (可读写运行)
rw = 4 + 2 = 6 (可读写不可运行)
rx = 4 +1 = 5 (可读可运行不可写)
示例:
最高权限777:(4+2+1) (4+2+1) (4+2+1)
第一个7:表示当前文件的拥有者的权限,7=4+2+1 可读可写可执行权限
第二个7:表示当前文件的所属组(同组用户)权限,7=4+2+1 可读可写可执行权限
第三个7:表示当前文件的组外权限,7=4+2+1 可读可写可执行权限
示例:
755:(4+2+1) (4+1) (4+1)
第一个7:表示当前文件的拥有者的权限,7=4+2+1 可读可写可执行权限
第二个5:表示当前文件的所属组(同组用户)权限,5=4+1 可读可执行权限
第三个5:表示当前文件的组外权限,5=4+1 可读可执行权限
一、shell命令以及运行原理
在介绍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权限的概念
linux下有两种用户,超级用户(root)和普通用户。
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。
如果我们仅仅想提升当前指令的权限可以在指令前面加上sudo,但这要求发送指令的用户在超级用户的信任列表里。
三、Linux权限管理
1.文件访问者的分类
文件及目录所有者:u–user
文件及目录所有者所在组的用户:g–group
其他人:o-other
2.文件类型和访问权限
2.1文件类型
如图所示,文件属性的最开头有十个字母,其中第一个字母代表文件的类型。
注意:linux系统下的文件类型与后缀无关,但建议大家按相应的后缀命名。
-:普通文件,文本,可执行程序,库
d:目录
2.2权限访问属性
文件属性其他信息的含义如下图一一对应:
我们重点关心开头十位字母的后九位,他们代表着文件的权限属性。 其中每三个字母为一组,分为三组,从前往后依次代表文件所有者的权限,文件所属用户组的权限,其他用户的权限。
其中每个字母都代表相应的权限:
r:读取
w:写入
x:可执行
-:无对应位置的权限
注意:这些对应的权限只对普通用户有限制,超级用户拥有文件的全部权限,不受其限制。
3.文件访问权限的修改
3.1权限的增加与减少
指令:chmod(change mode)
语法:chmod u/g/o+r/w/x 文件名 或 chmod u/g/o-r/w/x 文件名
增加权限:
减少权限:
不写用户身份默认为全部
3.2 八进制数设置权限
我们也可以把是否有权限用0或1标识,例如读写执行权限都有的话就是111,每三个二进制数构成一个八进制数,那三个用户身份的权限就可以用三个把进制数来设置。
3.3 目录权限含义
在目录中字母代表的权限如下:
r:显示目录下的内容
w:在目录下创建对应的文件
x:进入目录
注意:其中x是最基本的权限,想要读或修改目录的前提是能进入目录,所以如果没有x权限的话,执行r或w权限时会被拒绝或报错。
4.用户身份的修改
刚才我们学习了如何修改用户身份的对应权限,那么如何修改用户身份呢?例如改变文件的拥有者或所属组用户。注意,这需要root权限。
4.1修改文件拥有者:
指令:chown (change owner)
语法:chown 修改后的拥有者 文件名
4.2 修改文件所属组:
指令:chgrp (change group)
语法:chgrp 修改后的所属组 文件名
也可以同时进行更改 :
5.默认权限解析
从图中我们可以看出,在文件创建时,有些权限是默认拥有的。那么默认权限是根据什么规则来定的呢?这就要提到一个指令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的功能和权限的相关内容有了一定的了解吧。如果感觉本文有帮助的话不妨点个赞支持一下博主哦~你们的支持就是我创作的最大动力,我也将努力带来更加优质的内容,感谢大家的阅读。
————————————————
版权声明:本文为CSDN博主「敲键盘的喵」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_59371851/article/details/125135119