目录
一、用户及用户之间的切换
1.两种用户
在学习LInux操作系统的权限之前,我们要认识LInux中的两种用户:
1.超级用户(root用户)
2.普通用户
超级用户可以再linux系统下做任何事情,不受限制
而普通用户只能做有限的事情
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
2.用户之间的切换
root用户 >>> 普通用户
su + 用户
普通用户 >>> root用户
su输入root用户密码
注意:在LInux系统中输入密码时是看不到密码的
二、LInux权限管理
1.文件访问者类别
文件访问者(角色)有三种:拥有者 所属组 other
前者为拥有者,即文件和文件目录的所有者
后者为所属组,即文件和文件目录的所有者所在的组的用户
两者都不是为other
每个用户在不同的文件和目录中都有自己对应的角色
2.文件类型及属性
2.1类型
我们知道在Windows系统中,是文件后缀(.txt/.c/.png)区分不同的文件类型的
但Linux的文件类型不通过后缀区分,而是通过一种特殊的权限格式表示
这种格式由10个字符组成,分为四部分:文件类型、所有者权限、组权限和其他用户权限,以及一个可选的执行位(对于目录和某些特殊文件)
第一个字符决定了Linux的文件类型,例如上面的d,除了d还有一些文件类型字符
-:普通文件,文本,源代码,图片,库,可执行文件等
d:目录文件
l:链接文件(类似于Windows下的快捷方式)
p管道文件
b:block,块设备文件(磁盘)
c:字符设备文件(屏幕,终端,显示器,键盘)
不过虽然Linux不通过它识别文件类型,但还是推荐使用:
1.LInux下的一些指令需要后缀识别,如gcc需要编译.c后缀的源代码
2.使用后缀可以更好地让人们识别
2.2 属性
我们可以使用ls指令显示文件或目录的详细信息
以上述图举例:
1.d表示文件类型
2.rwxrwxr-x(九个字符):这是文件或目录的权限部分。它由三组字符组成,每组三个字符,分别代表文件所有者(user)、所属组(group)和其他人(others)的权限。下面会详细讲解
3.2:这是硬链接的数量。对于目录来说,这个数字至少是2,因为每个目录至少有两个硬链接:一个是目录名本身,另一个是上级目录中的.项(代表当前目录)。如果有子目录或文件链接到这个目录,这个数字还会增加。(现在不用理解)
4.xiaoliu(第一个):这是文件或目录的所有者的用户名
5.xiaoliu(第二个):这是文件或目录所属的组的名称。在这个例子中,所有者和所属组的名字相同,但这并不是必须的。
6.4096:这是文件或目录的大小,以字节为单位。对于目录来说,这个数字通常表示目录本身在文件系统中的大小,而不是目录内所有文件和子目录的总大小。
7.Jul 18 15:53:这是文件或目录最后修改的时间。
8.b:这是文件或目录的名称。
综上所述,这行信息告诉我们b是一个目录,其所有者和所属组都是xiaoliu,它的大小是4096字节,最后修改时间是7月18日15:53,文件或目录的权限设置允许所有者、所属组成员有读、写和执行权限,而其他人只有读和执行权限。
file指令(识别文件的详细类型)
file 文件
a的详细类型为目录
3.文件权限
3.1.文件权限值的表示方法
以上述为例:
rwxrwxr-x是文件或目录的权限部分。
它由三组字符组成,每组三个字符,分别代表文件所有者(user)、所属组(group)和其他人(others)的权限
每组可以放置三个字符:依次可以放置r w x或者-
-:表示无此权限
r:有可读权限
w:有可写权限(包括创建、删除文件或目录)
x:有可执行权限(执行权限意味着可以搜索该目录)
权限位还可以转化成二进制位,分别对应000 000 000
比如 :
rwx rwx rwx 111 111 111 表示为 777
rw- rw- rw- 110 110 110 表示为 666
3.2 文件权限的访问
3.21 文件权限访问的本质
1.在交接文件权限访问之前,我们要明白权限根本上是限制人(角色)的,限制人(角色)能还是不能
2.操作对象(文件)一定要有对应的满足人的需求的属性(操作对象的属性 --文件权限属性 --r w x)
正是因为我有了这个身份,我访问的文件也有我需要的属性,我才能够正确去执行我的权限
比如我能上学不是因为我是 xiaoliu ,而是因为我是个学生,又比如我不能够在力扣上看电影,哪怕你把会员冲爆也没用,因为它不具备看电影这个属性
3.22 用户执行文件的权限规则
在执行文件时,首先看的是身份,看你是拥有者,所属组还是other,然后再匹配对应的权限
如果你是所属组,就会匹配所属组的文件权限,有对应的权限才能执行,且只会匹配一次,是什么身份就只能匹配自己的权限
比如即使拥有组有对应的权限,但是因为你是所属组,所以只会匹配所属组的权限,如果想匹配,就只能指令加权或者切换到拥有者的身份
总而言之是什么身份就匹配什么身份的权限,且只能匹配自己的
但凡是都有例外,上述规则对root不管用,root具有超级权限,几乎无视权限
3.23 更改权限位(rwx)
使用chmod指令更改权限位,只有文件的拥有者和root才可以改变文件的权限
1.字符模式
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
例:
chmod u+r a
2.数字模式
数字模式将权限表示为三位八进制数,每位数字分别代表用户(u)、组(g)和其他(o)的权限。
权限的数值由读取(r=4)、写入(w=2)和执行(x=1)权限的数字值相加得出
例:
chmod 000 a
3.24 更改拥有者和所属组
只有超级用户(root)或具有适当权限的用户(sudo 提权)才能更改文件或目录的拥有者和所属组
在Linux系统中,更改文件或目录的拥有者(owner)和所属组(group)分别可以通过chown和chgrp命令来实现。
但是,chown命令也可以同时更改拥有者和所属组
- 更改拥有者:
sudo+ chown 用户 文件 (使用root 就不用sudo)
- 更改所属组
sudo +chgrp 用户 文件
- 同时更改
sudo+ chown 用户(拥有者)/用户(所属组) 文件 (使用root 就不用sudo)
3.25 sudo指令提权
指令提权:作为普通用户以root权限执行 在前面加sodu
一般sodu提权会失败,需要将自己加入到 sudoers中去,即加入root的信任白名单
3.26目录权限
1.进入一个目录需要x权限 ,如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限
(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件
2.查看目录中的文件需要r权限 ,r决定是否可以进行对文件属性信息进行查看的权利,而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档
3.写入需要w权限
3.27.起始与最终权限(umask)
我们创建一个新文件是,文件会有自带的默认权限
在LInux中普通文件起始权限是666 目录文件的起始权限为 777
但这里普通文本默认权限却是664,目录是775
为什么呢?
原因是在LInux中有一个权限掩码umask(不同的LInux系统umask可能不同)
起始掩码需要通过掩码转化为最终权限(从起始权限去掉umask中的权限)
那掩码umask有什么作用呢?
权限掩码umask的作用允许用户去定制一个文件被创建时候的默认权限
默认权限的转化的公式为:起始权限 & (~umask)=最终权限
0002 --》 002 --》000 000 010
110 110 110(普通文件起始权限 666)
000 000 010 (掩码umask)
111 111 101 (~umask)
110 110 100 (~umask&起始权限=最终权限)
3.28 文件删除权限、粘滞位
1.删除:一个文件能否被删除,不取决于文件本身,而取决于文件所在的目录的拥有者是否拥有 ‘w’ 权限
对于一个目录中的文件,如果我拥有w权限,就可以对这个目录下的文件进行创建和删除
2.粘滞位:LInux给other新增了一个权限t(粘滞位),给共享目录中的other设置的一个权限位,具有x的意义
同时也进一步对目录权限进行特殊限定:
该目录里面的文件,只有root或者文件的拥有者有权利进行删除,其他人一概不允许