前言:本篇开始我们要对Linux进行更深入的学习了,让我们来进入新篇章:Linux的权限理解!
首先让我们来初步了解一下本篇的内容:
1. shell命令以及运行原理
Linux操作系统准确来说是:Linux内核+Linux外壳+配套程序
Linux外壳也就是shell
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通
shell存在到底有何意义,为什么要有shell?
首先:命令行解释
因为Linux内核的设计非常复杂,用户无法直接向Linux内核进行沟通,更不能直接读懂内核执行完命令的结果,所以shell外壳充当"媒婆"这一角色,来进行用户和内核沟通上的翻译。
外壳将用户输入的指令翻译给内核处理
内核处理后得到的结果翻译给用户
其次:保护内核
有时用户想要内核执行的命令内核无法做到,因此指令根本不会"打扰"内核,它会在shell外壳进行翻译时就被驳回。
注意:shell是对所有命令行解释器的统称
Linux下的shell外壳是bash
windows下的shell外壳是图形化界面
2. 用户
2.1 普通用户和超级用户
一个Linux账号只有一个超级用户:root
创建的其余用户都叫做普通用户
如果想在Linux里切换用户我们可以:
指令:
su 用户名
注意:超级用户切换为普通用户不用输密码
普通用户切换为root或其他普通用户需要密码
2.2 指令提权
当我们现在是普通用户,但需要root用户的权限才能使用的指令,来回切换很不方便。我们可以:
指令:
sudo 需提权的指令
sudo 可以帮我们提权使用指令,但是如果此用户没有被添加到sudoers白名单sudo就无法提权。(先简单了解)
3. 文件
在我们最初接触Linux使用ls -l
查看文件时,我们只考虑了文件名称,在文件名称前的那些代表什么呢?
让我们来了解一下这三者。
3.1 角色属性
在文件属性后的表示角色属性
前者是代表文件的
拥有者
后者是代表文件的
所属组
拥有者代表这个文件的创建者
所属组代表此组组长
注意:在除了拥有者和所属组之后,还有第三个角色other
,other
表示除了拥有者和所属组的其他人
当我们在普通用户目录下用root
创建文件拥有者就改变了。
3.2 文件类型
在文件属性的第一个表示的是文件类型
现阶段一般常见的都是文件夹d
和普通文件-
3.3 文件的读写权限
以我们刚刚创建的文件为例:
此文件:
拥有者:可读可写不可执行
所属组:可读不可写不可执行
other:可读不可写不可执行
下表能让我们更好理解
3.4 读写权限的进制表示
关于权限我们还可以转化成进制表示:
此处的0,1:有权限代表1,没有权限代表0。
再用刚刚创建的文件为例:
这就是用进制来表示文件的权限
4. 文件修改
4.1 文件权限的修改
方法一
如果我们对当前文件的权限不满意,我们可以:
指令:
chmod [参数] 权限 文件名
再用刚刚创建的文件为例:
我们给文件的所有用户加上w权限
注意:只有文件的拥有者或root可修改文件权限
当没有读取权限就去读取时会报错
这里我将所有用户的读取权限全部取消,但是在root用户下我们依然可以读取
因此:权限不能限制root的访问,因为root是超级用户!!!
方法二
修改文件权限时,除了使用+,-,=号还可以用八进制进行修改
指令:
chmod 八进制数 文件名
我们依然使用pxt.txt文件来示范:
用八进制实则和二进制有关,将666转化为二进制就是110 110 110
所有人的读写权限都存在,而执行权限无。
4.2 修改文件的拥有者/所属组
修改拥有者
指令:
chown 用户名 文件名
修改所属组
指令:
chgrp 用户组名 文件名
注意:普通用户是无法把自己的文件给另外一个用户的,因为这很容易出现文件的泄露影响安全,只有root账号或者使用sudo提权才能将文件的拥有者/所属组修改!
5. 文件夹权限
文件夹的权限和普通文件权限有一定差异
r : 用户能否查看文件夹下文件的信息
w : 用户能否在此文件夹下创建/删除文件
x : 用户能否进入此文件夹
在文件夹NULL只有拥有者有创建删除文件的权力,让我们用除root的用户创建时:
因为权限被限制,我们无法创建文件!
6. 默认权限以及权限掩码
6.1 默认权限
当我们同时创建几个文件和目录时:
我们发现目录之间,文件之前的权限都是一样的:
因此:
目录的默认权限为:7 5 5
普通文件默认权限: 6 4 4
文件的权限是由两个因素决定
- 文件的起始权限
- 文件的权限掩码
一般情况下
目录的起始权限为:7 7 7
普通文件的起始权限为: 6 6 6
6.2 权限掩码
我们可以用指令来查询文件的权限掩码:
指令:
umask
我这里默认为022
用起始权限777-022=755,目录的默认权限正好为755
而起始权限666-002=644,普通文件的默认权限正好为644
权限掩码计算
文件的默认权限并不是简单 = 起始权限 - 权限掩码!
真正的计算方法是:最终权限=起始权限&(~权限掩码)
直接记忆可能有点难,我们转化记忆。
- 将起始权限和权限掩码都转化为二进制
- 再按位比较
- 权限掩码为1的地方,最终权限都为0
- 权限掩码为0时,不变
修改权限掩码
在Linux中权限掩码是可以修改的:
指令:
umask 八进制数
当我将权限掩码修改为771时,创建新文件test3.c时,就只有other有读写权限
7. 总结拓展
在Linux中的权限十分分明,保护也非常到位,除了root外其他用户并不能直接拿走你的文件,也不会修改删除你的文件。
拓展:粘滞位
如果只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限。如果是这样,那就不可想象了!
因此在Linux中引入:粘滞位
这样既可以让他使用文件但不会被删除
粘滞位是一种权限位,它可以应用于目录上,用于限制用户对其中文件的删除。当一个目录设置了粘滞位后,只有文件的所有者或者超级用户可以删除该目录下的文件,其他用户无法删除。这样可以防止用户在共享目录中意外删除其他用户上传的文件。
指令:chmod +t
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
如有兴趣,可以自行深入了解!蟹蟹大家支持!