教科书上举了这样的例子:
例如,若掩码为022,则新文件的权限就是(777-022)&666=644;若掩码为003,则新文件的权限就是(777-003)&666=664。说上的解释是:这里的&是“按位与”运算。我笨,完全看不懂啊,哭求解释~
在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这个二进制程序的特殊权限所在。
请问这是怎么得到664这个数啊?
追答7-3=4
目录只有4+2 的权限没有 1 这个权限
所以umask 掩码003 那就是 去掉了2+1 这个权限
目录不考虑1 这个权限 所以目录只剩下4这个权限
目录里的文件是4+2+1 4+2+1 4
你目录的权限必然就是 4+2 4+2 4
不太会讲,不知道你能理解不。