前言
记住一句话
权限 = 人 + 事务的属性
一、root用户和普通用户
在Linux操作系统下有两种用户,root用户和普通用户
1、两种用户的区别
root用户是超级管理员,拥有无穷大的权限,可以做任何事情,不用收到限制
而普通用户的权限是有限的。
root用户的命令提示符是 “#”
普通用户的命令提示符是 “$”
##/2、用户切换
su +用户 切换成想到的用户
su root 可以简写成su 或者 su -
在切换的时候,想要切换成哪个用户,就要输入对应的用户的密码,密码正确才能切换用户
3、指令提权
如果想要做某个操作,但是又没有权限去做,就可以使用sudo来进行命令提权,使用root的权限来做。
sudo + 指令
在使用sudo的时候需要输入自己的密码。
二、文件属性
在Linux中使用ll查看文件的详细信息的时候,会有一大串信息
在最后的显然是文件大小、时间和文件名
那我们来看一下其他的信息。
1、文件的角色属性
我们可以看到有两个root,这分别是文件的拥有者和所属组。
对一个文件来说,存在三种“人”
分别是:拥有者、所属组和other
对拥有者和other这两种“人”很好理解,文件的主人和其他人呗
这个所属组是啥呢?
OK,我们来看这么一个场景
我有一个文件,我想给我、我同事看,不给其他人看。
如果没有所属组的概念,那我的同事就是other,那就看不了这个文件了。
所以,所属组是为了进行更加精细的权限管理而出现的概念。
2、文件的权限属性
我们看最前面的一串10个字母。
第一个字母不用看d就是说这个文件是目录文件,-就是说这个文件十个普通文件。
那剩下的9个,刚好分成三组,一组三个。
按照顺序,分别是拥有者、所属组、other的权限
rwx是三种权限
r是读权限
w是写权限
x是可执行权限
-是没有对应的权限
所以图中的rwxr-xr-x的意思就是
该文件的拥有者可以读、可以写、可以执行该文件,
该文件的所属组和other只能读和执行该文件,不能写该文件
3、如何进行身份验证
操作系统会根据当前用户的身份依次对该文件的拥有者、所属组进行比较,
如果都不是,那么该用户就是other
注意:身份验证是有顺序的
且身份验证只会进行一次。
另外:root用户的权限非常高,文件的权限无法限制root用户。
三、修改文件的属性
1、修改文件的权限属性
chmod +身份(ugoa) +/- 权限(rwx) + 文件名
u是拥有者
g是所属组
o是other
a是拥有者、所属组、other同时操作
+是增加权限
-是取消权限
eg:chmod u-x a
就是取消a的拥有者的可执行权限了。
注意:可以一次接多个权限,也可以一次接多个身份的修改,但是要加上’,’
eg
chmod u+rw,o-r,g+wx a
除此之外还有一种修改文件权限属性的方法,就是使用八进制修改
rwx三位,进行8进制表示就是111,也就是7
rw-三位就是6
一共有9位,就可以用三个8进制数来表示。
像上图中的权限就是755
chmod u+rw,o-r,g+wx a该操作对应的8进制方法就是
chmod 717 a
2、修改文件的角色属性
a、修改拥有者
chown +新拥有者 + 文件
这个新拥有者需要时你操作系统里面存在的用户,
如果操作系统里面不存在这个用户,那是无法把文件的拥有者更改的。
b、修改所属组
chgrp +新所属组 + 文件
c、同时修改
chown +新拥有者:新所属组 + 文件
ps:一个文件的拥有者普通用户其实是不能修改的,想要修改需要使用sudo或者切换成root用户。
毕竟,我把文件的拥有者修改了,相当于我把文件给了另一个人,在不知道文件是否安全的情况下,不可能接收这个文件,所以随意修改文件的拥有者这是不合理的。
3、思考一个问题
如果我把一个不能执行的普通的文件,添加上了可执行权限,这个文件能否执行呢?
我们说过
权限 = 人 + 事务的属性
给文件添加了可执行权限,这个人确实拥有了执行这个文件的权利
但是,这个文件他本身是不可执行的,
巧妇难为无米之炊
即使给这个文件添加可执行权限,
这个文件依然不能执行。
四、目录属性
对于目录来说rwx的权限分别是啥效果呢?
1、r权限
r权限可以读这个目录文件里面的内容,
如果没有r权限,那ls、ll等指令就失效了
2、w权限
w权限是对这个在这个目录文件里面新建和删除文件的权限
如果没有w权限,那touch、rm等指令就失效了
注意:
虽然没有w权限,无法在目录文件中新建和删除文件
但是,依然可以去给目录文件里面的内容去写内容
可以使用echo命令等
同理,没有r权限,依然能够对目录文件中的文件去使用cat、vim等指令。
这是因为目录的权限是目录的权限,普通文件的权限是普通文件的权限,
这是互相不干扰的。
3、x权限
x权限是进入目录文件的关键,
如果没有x权限,就无法打开目录文件,就无法使用cd指令
五、权限掩码(umask)
1、最终权限
我们在普通用户下新建普通文件的权限都是664
新建目录文件的权限都是775
每一个身份的权限都少1很好理解,
因为普通文件默认没有x权限。
但是为啥是664和775这样的数字呢?
这就不得不谈一下权限掩码了
一个目录文件的起始权限是777,一个普通文件的起始权限是666
而存在这么一个公式
最终权限 = 起始权限 & (~权限掩码)
而普通用户的默认权限掩码是0002
最前面的0不用管
用777 & (~002) 就是 775
2、为什么要有权限掩码呢?
每一次都去使用chmod去修改文件权限很麻烦,所以使用权限掩码就可以在创建文件的时候就把文件的默认权限设置成想要的样子。
这样就可以更加灵活的控制文件的最终权限。
3、怎么查看和修改权限掩码呢?
直接使用umask就可以查看当前的权限掩码
使用 umask + 新的权限掩码 就可以更改权限掩码
六、粘滞位
试想一下这样一个场景,
如果两个用户需要共享一些文件
显然,这些文件不能够放在这两个用户的目录下面
需要放在其他的目录下面
显然,因为这些文件是共享的,所以是a用户不能随便删除b用户的文件
那么要把这个目录的w权限关掉吗?
可是关掉之后,就没办法在这个公共目录新建文件了呀
这就很矛盾
于是,就引入了粘滞位这个概念
chmod o+t +目录文件名
就可以把这个文件给设置成粘滞位
当一个目录被设置成粘滞位的时候,这个目录里面的文件只允许三种人删除:
a、root用户
b、该目录的拥有者
c、该目录中的该文件的拥有者
ps:粘滞位是占用的x权限的位置