目录
权限是什么?
sudo指令:提权
文件类型:
修改文件对应的权限:
rwx三种权限对应的作用
file能够查看对应的文件类型
umask:权限掩码
例如:
我们的用户名是lol
假设我们前置sudo指令:
我们需要输入whb的密码。
出现的结果为root,原因是这样:
我们的前置sudo可以用来提权,相当于我们是以根用户的方式的运行指令,我们的根用户为root,所以我们对应的结果为root
短时间内再次使用sudo就不再需要输入密码。
但是这里有一个问题:我们进行提权时输入自己的密码是啥意思?
按照情理分析:假如我们需要提权,我们首先应该证明自己有root的密码才可以,这里让我们自己输入自己的密码,那我们不就可以肆意提权了吗。
这个问题我们先保留下来,接下来进行解答。
总结:sudo相当于就是提权,以root的身份运行指令。
什么是权限呢?
答:权限是约束人的,例如
qq音乐的绿钻用户可以听周杰伦的歌而普通用户却不能。
爱奇艺的vip会员能看普通用户不能看的电影。
但是我们是否可以在qq音乐上看电影,在爱奇艺上听音乐,
所以权限的定义:一件事情是否允许被谁做。
这里的要点有两个,一个是“谁”,一个是“做”
这个谁约束的并不是个人,而是约束的是某些角色。
例如,qq音乐会将用户分成某些角色:绿钻用户和普通用户
绿钻用户可以听收费音乐,而普通用户就不能,
假如我们没有充钱,qq音乐就会设置权限,约束的是普通用户,而我们属于普通用户所以约束了我们,而不是因为我叫xxx而约束了我。
所以:文件权限=人+文件属性。
这里的人相当于就是角色。
而我们的Linux操作系统把这些人分成三个集体:
包括:拥有者 所属者 其他人
owner grouper other
文件属性:
例如:
我们新创建一个普通文件fil.txt
ll显示根目录文件的详细信息:
这些就是对应的文件属性。
其中,这里的前一个root指的是拥有者,第二个的root指的是所属组。
我们这里的lol账户既不是所属组,又不是拥有组,所以就是other
为什么要存在所属组呢?
例如:
在同一个公司,有两个不同的小组,分别各自完成两个项目,假如我们没有所属组时,我们同一组之间就无法分工交流。
我们互相的代码需要交流传播时,也只能通过other,那么这里的other就是除我们自己之外其他所有的用户,我们在交流时就会造成代码泄露。
文件属性如图所示:
这个就是file.txt对应的文件属性,其中,最前面的9个字符对应的就是文件类型。
注意:Linux中,文件的后缀名与文件的属性没有任何的关系。
如果要使用,也仅仅是做一个提示符号来使用,文件的后缀名仅仅是文件名的一部分。
那么在Linux中,文件的类型类型应该如何看呢?
在Linux系统中,文件属性的第一个字符对应的就是文件的类型。
d:目录文件
c:字符设备文件:键盘,显示器
b:块设备:磁盘文件
l:链接设备:快捷方式
p:管道文件:
文件的属性的前9个字符表示该文件是否可以读写执行
r:对应的是读
w:对应的写
x:对应的是执行。
对于该文件,拥有者的权限是可读可写不可执行。
所属组的权限是可读不可写不可执行。
其他的权限是可读不可写不可执行
假如我们要对一个文件进行修改的话,我们需要修改两方面
1:文件的所属角色:例如:user,grouper,other
2:文件属性(文件是否可读可写可执行)
修改一个文件也需要权限:假如文件的拥有者是我们或者我们是root都可以修改文件。
标题3:chmod:change modifacation的缩写,表示修改文件。
假如我们要去掉文件的拥有者的可读权限:
我们可以这样写:
表示去掉文件file.txt的user(拥有者)的r(可读)权限。
这时候,我们发现file.txt的拥有者的可读权限被去除了。
假如我们要加上文件的拥有者的可执行权限:
文件的拥有者有可执行的权限了。
假设我们要去掉文件的拥有者的全部权限:
可以发现:我们去掉了文件拥有者的全部权限。
假设我们要对文件所有组的权限进行修改:
我们加上文件所有组的可写可执行权限:
文件所有组可写可执行了。
假设我们要去掉文件所属组的全部文件
文件成功去除。
假设我们要去掉other的可读权限:
假设我们要添加拥有者和所属组的全部权限:
假设我们要去掉全部的权限
这里的a表示的是all的意思。
表示我们去掉user,grouper以及other的全部权限。
我们知道,r对应的是读,w对应的写,x对应的是执行。
这些作用是如何体现的呢?
我们首先给文件的使用者加上可读权限。
该文件中存储的内容如下:
我们使用cat来读
可以发现,成功读出了文件的内容。
这就是r(读)的作用
写权限:
我们去掉使用者的写权限。
假设我们去掉了拥有者写的权限,那我们就不能对文件进行写操作。
这里的拥有者和所属组不会冲突吗?
并不会:这里的识别是从左到右识别的,识别到我们是拥有者就不再识别了,我们对应的就是拥有者,识别到我们是所属组就不再识别了,我们就是所属组。
假如我们是root呢?
假如所有对象什么权限也没有,我们也可以对文件执行所有的读写执行权限。
例如:
我们也可以对文件进行读:
写:
所以root不受任何权限的约束。
假如我们要对文件的拥有者进行修改呢?
chown可以修改文件的拥有者。
可以发现,并不能修改,不能修改的原因是:
给别人的权限也需要别人同意,假设我们用root的情况下就可以给。
我们成功的把拥有者的权限转让给lol用户。
假如我们要转让所属组呢?
chgrp表示转让所属组
同样的,给所属组也需要经过别人的同意,所以我们可以使用root。
同时,我们也可以同时转让文件的拥有者和所属组权限。
这里就可以同时的把文件的拥有者和所属组全部转让给lol
设置文件属性:chmod
设置文件所属角色:chown/chgrp
对于该文件,我们可以把文件的9个前缀转换为3个8进位制数字。
例如:
这样操作起来就比较简单了,假如我们要删除所有角色对应的权限:
对应的结果如下:我们只需要一串数字就能够具体的给每一个角色分配相应的权限。
我们就把每一个角色都分配了全部的权限。
例如:
我们首先可以创建一个空目录,然后file来查看对应的文件类型:
为什么要有权限:
设置权限的目的就是便于我们的系统进行安全检查。
我们创建一个普通文件:
为什么我们的普通文件和目录的权限不同呢?
首先,在Linux中规定,目录的起始权限为777,普通文件的起始权限为666
权限掩码的默认值是0002,凡是在umask中出现的权限,都必须在其实权限中去掉。
如何使用umask
例如:
我们设置umask为0444,对应的8进制为0 100 100 100,所以我们去掉的就是r,我们创建一个目录:
可以发现,目录中的所有角色都没有了可读权限。
我们创建一个普通文件:
普通文件也没有了可读权限。
当我们把umask设置为0时:
我们再创建一个普通文件和目录:
这时候,我么我们对应的权限就是666和777了
那是不是我们的umask是多少,我们的初始权限减去多少就可以了呢?
答:不对,例如我们设置umask为0111
我们再创建一个普通文件和一个目录:
按道理来说,我们的目录的起始权限是777,普通文件的起始权限是666,再减去111,那我们对应的目录就应该为666,普通文件就应该为555.
但是我们得到的结果是:目录的权限码是666,普通文件的权限吗也是666,原因如下:
最终权限的计算公式=起始权限&(~umask)
例如:
对于这个目录文件,假如我们的umask变为0111时,由我们的公式计算可得:
我们可以用普通的理解方法:
例如对于这里,我们可以这样计算:
我们要从起始权限中去掉umask对应的权限,umask对应的是每一个角色对应的末位也就是执行权限,我们去掉起始权限中每一个权限的执行权限即可。
总结:umask是权限掩码,我们最终权限有两种计算方法
1:公式法:最终权限:起始权限&(~umask)
2:理解法:最终权限等于起始权限的权限减去权限掩码对应的权限。
为什么目录的起始权限是777,而普通文件的起始权限是666?
原因如下:
假如我们要进入一个文件的目录,我们是否需要读的权限:
我们去掉dir的读权限
我们判断是否可以进入该目录:
所以:目录的读权限与是否可以进入目录是没有关系的。
我们发现,我们是可以进入目录的,但是我们不能查看目录中的内容。
我们也可以在该目录中创建文件但是并不能查看。
r权限并不影响我们进入目录,影响的是我们查看目录中的内容。
进入一个目录需要的是x权限也就是执行权限:
可以发现,当我们没有x权限是不能进入目录的。
假如我们删除掉w权限,保留x和r权限,我们既可以进入目录,也可以查看目录的内容,但是我们不能在目录中创建文件。
因为我们创建目录,目录中有其他文件,我们一定要保证目录是可以进入的,所以我们要加上一个x权限,所以目录的默认权限是777,而普通文件的默认权限是666.