1 文件权限的表示
(1)字母表示法
Linux中所有文件(普通文件、目录文件、字符特殊文件、块特殊文件、管道或FIFO、符号链接、套接字)都有9个权限,如下图所示:
-rw-rw-r--就是文件a的权限了。首先最左边的-表示了文件类型,如果是目录的话,就是d;接下来的三位rw-表示了a的用户(Andy)权限、再接下来的三位rw-表示了a的组(Andy)权限,最后三位代表了其他用户对文件a的权限。
每组三个权限位依次代表了文件的读(r)、写(w)、执行(x)权限。如果某一位上是-就代表着该位不具有某一权限。
(2)数字表示法
Linux允许以数字来代表文件的权限,r为4,w为2,x为1。则上述的4的权限为(4+2)(4+2)(4)=664。
2 更改权限
(1)字母法
u、g、o分别代表了文件的用户权限、组权限、其他用户权限。我们可以使用chmod命令如下操作:
chmod u+x a //赋予用户执行权限
chmod o-r a //取消其他用户读权限
这样a的权限就变成了-rwxrw----,也就是740
(2)数字法
简单粗暴:直接用你要更改的目标权限的数字:
chmod 740 a
3 默认权限
新建一个普通文件或目录,它们的默认权限是怎么样的呢?Linux是有默认值的。我们用umask命令可以获得:
这个0002代表什么意思呢?从名字中我们可以知道,它是一个掩码来的。也就是用某一个值来减这个值,就获得了默认权限,对文件来说,是666,目录来说是777。为什么是这样呢?因为Linux不允许文件默认是可执行的,所以一个文件默认是不可执行的。那为什么umask是4位的呢?第一位是特殊权限位,下边再讲,所以这里的umask的其他权限位是002,对应文件的默认权限是664,目录的默认权限是775。
更改umask,直接umask 777,就可以把umask变成0777
4 特殊权限
(1)Linux中的文件有三个特殊位:
SUID:设置用户ID(set-user-ID)。对一个可执行文件,不是以发起者身份来获取资源,而是以可执行文件的属主身份来执行。
SGID:设置组ID(set-group-ID)。对一个可执行文件,不是以发起者身份来获取资源,而是以可执行文件的属组身份来执行。
STICKY:粘滞位,通常对目录而言。通常对于全局可写目录(other也可写)来说,让该目录具有sticky后,删除只对属于自己的文件有效(但是仍能编辑修改别人的文件,除了root的)。不能根据安全上下文获取对别人的文件的写权限。
(2)设置
#chmod u+s
#chmod g+s
同上,去除特殊位有: #chmou u-s .等
(3)表示
SUID:置于 u 的 x 位,原位置有执行权限,就置为 s,没有了为 S .
SGID:置于 g 的 x 位,原位置有执行权限,就置为 s,没有了为 S .
STICKY:粘滞位,置于 o 的 x 位,原位置有执行权限,就置为 t ,否则为T .
数字字表示法SUID:4,SGID:2,STICKY:1,特殊权限位于u/g/o之前。例如:对某个目录:
#chmod 4551 file // 权限: r-sr-x--x
#chmod 2551 file // 权限: r-xr-s--x
#chmod 1551 file // 权限: r-xr-x--t