一、权限是什么
权限(privilege)是指某个特定的用户具有特定的系统资源使用权力。举个简单的例子,夏日炎炎,你看到路边有卖西瓜的,你想要吃西瓜,你就得买它,买它其实就是获取你对西瓜的使用权限,买了它,你就可以大快朵颐了。
二、Linux的文件权限
Linux的文件权限主要体现在的两个方面,文件的访问者即文件的事物属性。
1、文件访问者
a)文件和文件目录的所有者:u—User
b)文件和文件目录的所有者所在的组的用户:g—Group
c)其它用户:o—Others
2、文件的事物属性(权限)
1)普通权限
a)读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
b)写(w/2):Write对文件而言,具有修改文件内容的权限;对
目录来说具有删除移动目录内文件的权限
c)执行行(x/1):execute对文件而言,具有执行文件的权限;
对目录来说,具有进入目录的权限
注:这里的r、w、x和4、2、 1分别代表文件权限的字符表示方法和8进制表示方法。
2)特殊权限
a) (s/4)只能应用在可执行文件上,允许任意用户在执行文
件时以文件拥有者的身份执行
b) sgid (s/2)只能应用在可执行文件上,使任意用户在执行可
执行文件时,将以拥有组成员的身份执行
c) 粘着位(t/1)只能应用在目录文件上,将使用户在目录中执
行删除时,只能删除自己己拥有的对象
下面用一个例子来具体看看文件的权限:
注:用ll命令显示出来的文件信息,从左至右分别是文件类型及权限、链接数(硬链接,即指向该文件的引用次数)、文件所有者、文件所属组、文件大小、文件创建时间、文件名
其中红色方框里面的内容分别对应了三个文件的权限值(./代表当前目录,../代表父级目录,两个问价都是隐藏文件)。
拿file文件的权限来说,红色方框来一共10个字符,第一个代表文件的类型,后面每三个一组分别代表文件的所有者、用户组、其它用户具有的权限。
首先看第一个字符,是’-‘,代表该文件是普通文件(d代表是目录文件,关于文件分类这儿不做过多解释)。
接着的三个字符”rw-“,代表文件的所有者具有的权限,”r’表所有者具有可读权限,’w’代表所有者具有可写权限,’-‘代表所有者不具有可执行权限。
再往后的三个字符”rw-“,代表文件的所有者的所属组具有的权限,”r’表所属组具有可读权限,’w’代表所属组具有可写权限,’-‘代表所属组不具有可执行权限。
最后的三个字符”r–”,代表文件的其它用户具有的权限,”r’表其它用户具有可读权限,’-‘代表其它用户不具有可写权限,’-‘代表其它用户不具有可执行权限。
三、文件权限的设置方法
参数:
R -> 递归修改目录文件的权限
V -> 显示指令执行过程
注:下面提到的参数都是指这些参数。
1、chmod命令设置权限值
命令格式:chmod [参数] 权限 文件名
注:只有文件的拥有者和root才可以改变文件的权限
1)权限字符修改
a)用户标识符:
u:拥有者
g:拥有者同组用用户
o:其它用用户
a:所有用用户
b)用户标示符+/-=权限字符
+:向权限范围增加权限字符所表示的权限
-:向权限范围取消权限字符所表示的权限
=:向权限范围赋予权限字符所表示的权限
例:
原本文件file的权限值为“rw-rw-r–”,经过修改之后,权限值变为“rwxr–rw-”,即增加了所有者的’x’->可执行权限,减少了用户组的’w’->可写权限,增加了其它用户的’w’->可写权限,而且可以明显的看到文件变成了可执行文件。
2)权限的8进制值修改方式
文件的可读、可写、可执行权限对应的权限值分别是4、2、 1,0表示不具有权限,那么文件的权限值与文件的权限就有以下对应关系:
0 -> 不具有任何权限 - - -
1-> 具有可执行权限 - -x
2-> 具有可写权限 -w-
3-> 具有可写、可执行权限 -wx
4-> 具有可读权限 r- -
5-> 具有可读、可执行权限 r-x
6-> 具有可读、可写权限 rw-
7-> 具有全部权限 rwx
例:
修改前,文件file的权限值为“rwxr–rw-”,经过修改之后,权限值变为“rw-rw-r–”,即减少了所有者的’x’->可执行权限,增加了用户组的’w’->可写权限,减少了其它用户的’w’->可写权限,而且可以明显的看到文件从可执行文件变成了不可执行文件。
3)、示例赋权方式
格式:chmod –reference reference target 参 照reference的权限值 , 来设置target的权限
例:
可以看到我先把file和file1的权限分别设置成了“rw-rw-r–”和”- - - - - - - - -“,然后执行了命令chmod - -reference file1 file,file的权限就变得和file1一样了,相当于file复制了file1的权限。
注:因为连续的‘-’会变成一条长横线,所以这儿在’-‘与’-‘之间加了空格。
2)chown
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
例:
执行命令后,文件的拥有者变成了root。
注:因为要修改文件的拥有者为root,所以要先进入root(超级用户)模式。
3)chgrp
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
参数:-R 递归修改文件或目录的所属组
例:
执行命令后,文件的所属组变成了root。
4)umask
功能:查看或修改文件掩码
新建文件默认权限:0666
新建目录默认权限:0777
格式:umask 权限值 修改文件掩码值
说明:
将默认权限减去权限掩码后,即可产生建立文件时预设权限。
注:默认权限中有的权限在权限掩码中有对应的权限时,才相减。
超级用户默认掩码值为0022,普通用户默认为0002。
例:
此时,是在root用户模式下,所以umask查看权限掩码为0022(所属组和其它用户的可写权限),创建一个新的文件file,因为默认权限为0666(拥有者、所属组和其它用户的可读、可写权限),包含0022,所以这儿要0666要减去0022,最终的权限值为0644,接下来修改权限掩码为0444(拥有者、所属组和其它用户的可读权限),可以看到修改成功,此时创建一个新的文件file1,因为默认权限为0666,包含0444,所以这儿要0666要减去0444,最终的权限值为0222。
上面为什么要说包含呢?因为文件的最终权限不是简单直接拿默认权限减去权限掩码,而是当默认权限和掩码权限中有相同的权限才做减法。
如:
修改权限掩码为0111(拥有者、所属组和其它用户的可执行权限),默认权限为0666(拥有者、所属组和其它用户的可读、可写权限),按照之前的想法,最终的权限值应该为0555,但可以看到此时的权限值为0666,也就是二者并没有做减法。这是因为默认的权限为0666,里面不包含0111。
用户的权限就总结到这儿。下面来看一下目录的权限对目录的一些操作的影响。
四、目录的权限对操作的影响
为了验证结果,先把创建的目录dir的权限值修改为000,可以看到此时是不能进入目录的,那么接着修改dir权限值为100,可以看到能进入目录了,说明进入目录需要的是拥有者的可执行权限,此时在目录里创建文件,权限不够,再修改dir权限值为300(为什么不是200呢?因为目录的可执行权限是进入目录所必须的,而想要在目录里创建文件就得先进入目录,所以这儿修改的范围是100,300,500,700),可以看到能在目录里创建文件爱你并删除文件,但使用ls命令是没有权限的,继续修改dir的权限为500,进入目录,可以看到ls命令簇中的命令都可以使用了。
总结一下:
1、进入目录需要目录的执行权限
2、在目录下创建文件,需要目录的执行权限与写权限(首先得能进入目录)
3、在目录下删除文件,需要目录的执行权限与写权限
4、想在目录下使用ls命令簇需要目录的执行权限与读权限
注:这儿要记住进入目录需要的是目录的可执行权限,而不是可读权限。