一.权限的定义:
什么是权限?所谓权限在现实中就是权力+限制,是对于人,不同人所扮演的角色有着不同的权限。那么在Linux中也存在权限。权限=角色+事物属性。那么对于一件事情能否去执行以及完成都需要权限。
二.Linux中的用户
2.1:root用户
在Linux中,root用户属于超级用户,一台机子只能有一个超级用户。这个用户可以访问和修改系统中的所有文件和设置。
2.2:普通用户
在Linux下做有限的事情,受权限的限制。
root用户与普通用户的区别:
三:文件的类型与访问权限
Linux系统中的文件可以分为几种类型,主要包括:目录(Directory),普通文件,链接文件等。那么在主要常见的文件类型是目录与普通文件。
在Linux中的访问权限中,有三种不同角色的访问权限,分别问拥有者的访问权限,所属组的访问权限,以及other(其他人)的访问权限。
r:
表示此用户拥有read(读取)权限。
w:
表示此用户拥有write(写入)权限。
x:
表示此用户拥有可执行权限
-:
表示此用户无对于的权限。
那么我们在Linux中可以通过chmod命令来改本文件的读写属性,以及使用chown命令来修改文件的拥有者或所属组。
如果我们将拥有者以及所属组都改为同一个用户,并且收回拥有者所以权限,但所属组不收回,那么文件还能进行读写吗?
从上图测试可以观察到,收回拥有者所以权限,但所属组不收回,是不能对文件进行读写操作。此时我们可以猜测Linux权限匹配是先匹配拥有者,接着匹配所属组,最后匹配other。但还不能完全下定论,那么我们再接下来进行对照测试。
从上图可以看到,如果将拥有者的权限改回rw,但取消所属组权限此时我们对文件进行读取和写入操作并不会收到影响,所以我们可以肯定:Linux权限匹配是先匹配拥有者,接着匹配所属组,最后匹配other。
四:关于权限的三个问题:
4.1目录权限:
通过上文对权限的了解,我们知道一个文件的读取写入与相应的权限有关,那么如果我要进入一个文件需要什么权限呢?
上如创建了一个dir的目录,使用chmod u-r 命令后再cd进入dir,发现可以进入dir文件里。因此可以排除r权限,那会不会是w权限呢?
那么把w权限去掉发现照样是可以进出dir目录的,所以可以得出,能否判断能否进入一个文件夹是看x权限。
。
那r权限对目录是什么意思?
通过上图示例我们知道了,目录的r权限是是否有权限查看此目录下的文件。
那w权限对目录呢? 从上图我们取消了dir目录中拥有者的w权限,接着进入dir,ls后发现dir目录下拥有一个test.txt文件,此时将test.txt文件进行删除发现没有权限。所以我们可以得出结论对目录没有w权限时候,新建,删除以及修改文件都不支持。
4.2缺省权限
在Linux中,缺省权限是指在创建新文件或目录时,系统自动赋予它们的权限。,Linux使用一个称为umask(用户文件创建掩码)的值来计算缺省权限,并且是以八进制来展示。
对于普通文件,的初始权限为八进制的666,目录文件的起始权限为777。
最终权限=初始权限&(-umask)
那么我们可以使用八进制数值来修改文件的属性
4.3粘滞位:
在理解粘滞位之前,我们先了解Linux用户的补充知识。
首先我们知道,Linux是一款多用户的操作系统,在多用户下,对于文件的访问是隔离的。
也就是说只有我们自己能访问自身的文件(root账号除外),别的用户同样也只能访问自身的文件。很好的做到了用户隔离。
但如果我们想让Linux下不同用户能够共享文件呢?
首先肯定是不能创建在任何普通用户的家目录下,所以共享文件只能存在其他目录。
我们根目录下创建一个temp目录,并把other权限设置rw。
此时可以看到cat用户与lwh用户在通过目录下实现了文件共享,那么这跟粘滞性有什么关系呢?如果此时来了另一个用户,并且用户看到cat与lwh在文件共享,它不高兴想删除直接删除文件,那么可不可行呢?
我们可以看到此时用户为dog,test.txt对于dog用户只用r的权限,但从上图dog用户可以直接删除test.txt文件,这是为什么,是不是不符合常理。
但我们仔细回顾temp文件的属性对于other是rwx,属于权限大开。因为删除文件是所在目录的w权限决定的,与目标文件无关!我删你,与你何干!
但如果我们将w权限关掉,那么又不能实现两个账户的文件共享了那应该怎么办呢?
此时就提到了粘滞性。权限粘滞性(Sticky Bit)是Linux和Unix文件系统中的一种特性,主要用于控制对目录中文件的删除权限。它确保只有文件的所有者或超级用户能够删除或重命名该目录中的文件。
通过 chmod +t temp 命令 在目录末尾增加粘滞位,此时我们用lwh用户创建文件,使用cat用户删除发现就没有权限了,有效的保护了文件的安全性。任何用户,在设置了粘滞位的目录下,只能删除自己的文件,别人无法删除(root除外)。