上图中可以看到,我们在一个空的目录about_permission中创建了一个空的目录emptyDir和一个空的文件emptyFile。
drwxr-xr-x 2 rayde rayde 4096 Sep 23 19:54 emptyDir
-rw-r--r-- 1 rayde rayde 0 Sep 23 19:54 emptyFile
“drwxr-xr-x”这个字段描述的是文件和目录权限的编码。该字段的地一个字符代表了该对象的类型:
- | 文件 |
d | 目录 |
l | 链接 |
c | 字符型设备 |
b | 块设备 |
n | 网络设备 |
该字段的后9个字符分为3组3字符,每组都定义了3种访问权限:
r | 代表对象可读 |
w | 代表对象可写 |
x | 代表对象可执行 |
这3组权限对应着对象的3个安全级别:对象的属主,对象的属组,系统的其他用户。
上面创建的目录emptyDir,可以看到它的第一个字段是“drwxr-xr-x”,“d”表示它是一个目录。第一组权限“rwx”表示,对于该用户而言,可以读取,写入以及执行这个文件;第二组权限“r-x”表示,该用户组的成员可以读取、执行该文件,但是没有写入权限;第三组权限“r-x”表示,其他组的用户可以读取、执行该文件,同样没有写入权限。
那么,这些文件权限是从何而来呢?
先了解一下八进制模式的安全性设置吧:
在“rwx”权限中,会先获取这三个权限的值,将其转化为3为二进制,用一个八进制值进行表示,所有可能的组合如下:
权限 | 二进制值 | 八进制值 | 描述 |
---|---|---|---|
--- | 000 | 0 | 没有任何权限 |
--x | 001 | 1 | 只有执行权限 |
-w- | 010 | 2 | 只有写入权限 |
-wx | 011 | 3 | 有写入和执行权限 |
r-- | 100 | 4 | 只有读取权限 |
r-x | 101 | 5 | 有读取和执行权限 |
rw- | 110 | 6 | 有读取和写入权限 |
rwx | 111 | 7 | 有读取、写入和执行权限 |
umask命令用来设置所创建文件和目录的默认权限。对文件来说,全权限是666(所有的用户都有读和写的权限);而对目录来说,全权限是777(所有用户都有读、写、执行的权限)。
umask值实际上是一个掩码,如何由umask值确定文件的权限?
文件的全权限666减去umask值0022(022),结果是644。
目录的全权限777减去umask值0022(022),结果是755。
再来看我们一开始创建的空目录和文件:
drwxr-xr-x 2 rayde rayde 4096 Sep 23 19:54 emptyDir
111 101 101,对应的八进制值是755。
-rw-r--r-- 1 rayde rayde 0 Sep 23 19:54 emptyFile
110 100 100,对应的八进制值是644。
在man手册中,是这样描述umask的:
意味着它后面可以跟参数。我们试着改变一下umask值。
可以看到,umask值已经成功的被设置为0024。那么,随之改变的文件权限应该是642(O)和753(O)。
接着又创建了一个空目录emptyDir1和一个文件emptyFile1。它们的文件权限如下:
drwxr-x-wx 2 rayde rayde 4096 Sep 23 23:42 emptyDir1
111 101 011,对应的八进制值是753。777(O) - 024(O) = 753(O)
-rw-r---w- 1 rayde rayde 0 Sep 23 23:42 emptyFile1
110 100 010,对应的八进制值是642。666(O) - 024(O) = 642(O)