在Linux系统中,目录最大的权限是777,文件最大的权限是666,因为基于安全原因,新建的文件不允许有执行权限,所以从文件的权限位来看,文件比目录少了执行(x)权限。
下面来设置不同的umask值并创建文件:
可以发现用666减去222就得到了444。
从结果中可以发现新建的文件权限并不是666-123=543,而是644,而目录的权限却是正常减出来的值777-123=654,这是为啥呢?我们把文件的最大值666和umask值123转换成二进制对位展开来看下:
从结果来看就验证了前面说的“umask是将文件的对应权限位遮掩住”,1表示遮掩,0则反之。
为了方便记忆可以用下面的这种计算方法:
目录:默认权限是777减去umask值的结果
文件:默认权限是666减去umask值,权限位对应的值如果为奇数则加1,例如:666-123=543,其结果是644。
作用于可执行的二进制程序,用户执行此程序时,将继承此程序所有者的权限。一般情况下,文件能不能访问取决于用户的身份,而不是取决于文件本身。但是,有了suid权限的文件就不是这么一回事了,最明显的就是/etc/shadow这个文件。
都知道这个文件是用来保存用户密码的,默认情况下,普通用户对此文件没有任何权限,但是当用户执行passwd这个二进制程序时却能更改口令,同时也会将加密后的密码保存到文件中,这正是passwd这个二进制程序的特殊权限所在。
Linux系统的ext3文件系统中的权限可以用字母表示,r 表示文件可读(read),w 表示文件可以写(write),x 表示文件可以被执行(如果它是程序的话)。其中:rwx也可以用数字来代替:r为4,w为2,x为1,-为0。
表示文件权限的字段共有10位,
-rw------- (600) 只有所有者才有读和写的权限
-rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限
-rwx------ (700) 只有所有者才有读,写,执行的权限
-rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限
-rwx--x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限
-rw-rw-rw- (666) 每个人都有读写的权限
-rwxrwxrwx (777) 每个人都有读写和执行的权限
掩码这个事情,我学的时候也没弄懂,是记的死的,然后ls看一下,对不对。
首先这里的&是按位操作符,可以理解为 和 的意思
(777-003) & 666=664
解释为: 文件 和 目录
文件的权限有 读 写 执行 777
目录的权限有 读 写 666
明白了吗?