<>Linux中的权限问题
1.权限的概念
限制人的,访问的对象天然可能没有这种"属性"权限:一件事情是否允许被"做" 权限 = 人 + 文件属性
2.Linux上面的用户分类(root,普通)
a.root(超级管理员) – 几乎可以干任何事情
b.普通用户
3.Linux的文件属性
属性:读,写,执行
Linux中的文件类型:
不是通过文件的后缀区分文件类型,而是用文件的属性中第一列的第一个字符来区分文件类型
切记是文件属性的第一个字符(例文件属性:-rw-rw-r–)
drwxrwxr-x
-rw-rw-r–
-rw-rw-r–
所以通过第一个字符我们就可以得到此时这个文件的类型
例如:
* :表示普通文件,文本文件,可执行文件,归档文件等
d :目录
b :块设备,block,磁盘
c :字符设备,键盘或者显示器
p :管道文件
s :网络socket文件
区别于:
我们如何看待原来文件的后缀:a.想用就用,给我们自己看 b.将后缀看做成文件名的一部分
注意:*但是这个只是在Linux系统中,但是要注意我的有的接口(可能是需要使用这个文件后缀的,没有就不行)例:gcc
例:一个文件的所有属性
-rw-rw-r-- 1 whb whb 14260 Nov 22 19:36 cmd.txt
| | | |
文件类型 文件字节大小 创建or修改时间 文件名
4.Linux文件权限(用户层面)
指令:(su)
功能:切换普通用户和超级用户(返回 Ctrl+d)
(sudo)
功能:对单条指令进行提权
指令:sudo command 例:sudo cat test.txt
这样就可以从原来的访问不了,变成可以访问了
注意:*如果我是对文件的创建进行提权,并且我此时是一个普通用户,那么此时当这个文件创建好了之后这个文件的拥有者和所属组就不再是普通用户了,而是root(就好比我是拿着人家root的权限去创建的,所以可以提权,但是创建的本人还是root)
角色划分:
a.文件拥有者
例:
-rw-rw-r-- 1 whb whb 14260 Nov 22 19:36 cmd.txt
| |
文件拥有者 文件所属组
b.文件所属组
目的:使我的文件可以给我想给的人看(就是把我的文件开一个权限,假如没有这个文件所属组的话,那么此时文件开了权限,那么文件other就可以看到了(也就是所有人都可以看到了),所以我们需要有一个文件所属组,这样就可以把我的文件给我想给的人看了)
c.文件的other
在Linux中认识以下东西:
root && 普通用户 vs 拥有者 && 所属组 && other
| |
人 角色
总的一句话:任何人可以是任何角色
文件属性的后面9个字符的理解:
(例文件属性:-rw-rw-r–)
drwxrwxr-x
-rw-rw-r–
-rw-rw-r–
去掉第一个,三个三个为一组
例: - rw- rw- r–
| | | |
文件类型 文件拥有者 文件所属组 文件的other
并且此时的 r:代表可读权限
w:代表可写权限
x:代表可执行权限
所以我们描述一个文件的权限(文件权限 = 人 + 文件属性)应该这样描述:
该文件的拥有者具有可读可写的权限,不具有可执行的权限,文件所属组具有可读可写的权限,不具有可执行的权限,文件的other具有可读的权限,不具有写和执行的权限
搞定了上述的问题,我们搞定一下如何更改权限的问题
更改权限:
(chmod)
指令:chmod u+r file.txt 给文件拥有者加一个可读的权限 chmod u+rx file.txt 同理可以同时加两个权限
chmod g+w file.txt 给文件所属组加一个可写的权限 chmod g+wr file.txt
chmod o+x file.txt 给文件other加一个可执行的权限 chmod o+xw file.txt
指令:chmod u-r file.txt 给文件拥有者去掉一个可读的权限 chmod u-rx file.txt 同理可以同时去掉两个权限
chmod g-w file.txt 给文件所属组去掉一个可写的权限 chmod g-wr file.txt
chmod o-x file.txt 给文件other去掉一个可执行的权限 chmod o-xw file.txt
同时给所有人加减权限
指令:chmod a+r file.txt
chmod a+rw file.txt
chmod a+rwx file.txt
指令:chmod a-r file.txt
chmod a-rw file.txt
chmod a-rwx file.txt 同时给所有人加减各种权限
更改角色:
(chown/chgrp)
指令:chown root file.txt
表示:将我当前的文件的拥有者从whb改为root(但是会有权限不足的问题)
所以我们可以进行提权(sudo)
指令:sudo chown root file.txt
这样我就把文件的拥有者给改成root了
5.权限中的指令
(file)
功能:查看文件类型
指令:file file.txt
6.Linux中目录的权限(r/w/x)
6.1 进入一个目录所必须的权限是(x)可执行权限,rw都是不必须的(但是如果没有r和w权限,那么此时我们就不可以对这个目录进行读和写)
没有r:就无法查看当前的这个目录下的文件名和文件属性
没有w:就无法对这个目录进行文件的创建(例:touch file.txt)
没有x:连目录都进不去
————————————————————————————————————————————
7.默认权限
默认权限:我们看到的(例:普通的文件(不包括可执行),默认权限是从664开始,目录的默认权限是775开始)
起始权限:系统设定的,普通文件的起始权限是从666开始的(rw没有x),目录文件的起始权限是:777(rwx)
并且此时系统为了更好的控制文件权限,系统会有默认的权限掩码的概念!掩码(umask)
掩码的概念:1011 1010 -> 0000 1111 -> 0000 1010 我只想要拿到1010,这样我就通过我的掩码只拿到了1010
(umask) |
功能:查看掩码 掩码
<>最终权限:最终权限 = 起始权限 & (~umask)
8.粘滞位
背景:在使用Linux的时候,未来可能会有一些共享目录,用来保存普通用户产生的临时数据
但是当文件被所有人共享的时候,一样会受到权限的约束,但是却拦不住别人删除这个共享的文件
这个就产生了一个问题(所以我们就要引入一个新的概念来解决这个问题)
新概念:粘滞位
总的来说粘滞位的概念就是:为了让大家共享文件,且不让其他人随便删除别人的文件
功能:使一个目录只能添加目录,共享目录
指令:chmod a+t catalog(目录)
通过这个指令,可以得到目录权限从 drwxrwxrwx -> drwxrwxrwt
最后的x变成t -> 就是表示从普通目录变成了一个粘滞位的目录
综上:此时我的drwxrwxrwt目录,此时就只可以添加文件,不可以删除文件了(这就是共享文件的特点(带粘滞位),不允许删除)
此时在讨论一个问题:为什么我们权限是w时拦不住别人删除文件,到了t的时候就可以拦住别人删除我们的文件
原因:在一个目录中增加和删除文件/目录是由我的w(写)权限决定的,你把other的w改成了t
other此时没有了w权限,自然而然就删除不了你的文件(但是为了可以增加文件,所以我们不可以直接把w权限去掉,我们一定要把w改成t,这样才可以符合我的两个要求)