《快乐的Linux命令行》笔记(11)
Contents
#《快乐的 Linux 命令行》
#用户
当一个用户拥有一个文件或目录时,用户对这个文件或目录的访问权限拥有控制权。
1 | $ id |
对于文件和目录的访问权力是根据读访问、写访问和执行访问来定义的。
1 | $ > foo.txt |
列表的前十个字符是文件的属性,第一个字符表明文件类型。
| 按键 | 效果 |
|---|---|
- |
一个普通文件 |
d |
一个目录 |
l |
一个符号链接[1] |
c |
一个字符设备文件[2] |
b |
一个块设备文件[3] |
剩下的九个字符叫做文件模式,代表着文件所有者、文件组所有者和其他人的读、写和执行权限。
文件:
r:允许打开并读取文件内容。w:允许写入文件内容或截断文件。但是不允许对文件进行重命名或删除,重命名或删除是由目录的属性决定的。x:允许将文件作为程序来执行,使用脚本语言编写的程序必须设置为可读才能被执行。
目录:
r:允许列出目录中的内容,前提是目录必须设置了可执行属性(x)。w:允许在目录下新建、删除或重命名文件,前提是目录必须设置了可执行属性(x)。x:允许进入目录,例如:cd directory。
#chmod
只有文件的所有者或者超级用户才能更改文件或目录的模式。
chmod命令支持两种不同的方法来改变文件模式:八进制数字表示法或符号表示法。
| 八进制 | 二进制 | 文件模式 |
|---|---|---|
0 |
000 |
--- |
1 |
001 |
--x |
2 |
010 |
-w- |
3 |
011 |
-wx |
4 |
100 |
r-- |
5 |
101 |
r-x |
6 |
110 |
rw- |
7 |
111 |
rwx |
常用权限:7 (rwx),6 (rw-),5 (r-x),4 (r--),和 0 (-–)。
| 符号 | 解释 |
|---|---|
u |
user的简写,意思是文件或目录的所有者。 |
g |
groups的简写,用户组。 |
o |
others的简写,意思是其他所有的人。 |
a |
all的简写,是u、g和o三者的联合。 |
如果没有指定字符,则假定使用all。
权限操作:
+:加上一个权限。-:删掉一个权限。=:只有指定的权限可用,其它所有的权限被删除。
多种设定可以用逗号分开。
u+x,go=rw:给文件拥有者执行权限并给组和其他人读和执行的权限。
#umask
当创建一个文件时,umask命令控制着文件的默认权限。
umask以掩码的形式来工作,和网关那里差不多,一般是022和002。
比如说正常一个权限是666(110 110 110),即rw-rw-rw-,被022(000 010 010)的umask后会变成110 100 100,即644,rw-r--r--。
虽然我们通常看到一个八进制的权限掩码用三位数字来表示,但是从技术层面上来讲,用四位数字来表示它更确切些。为什么呢?因为除了读取、写入和执行权限之外,还有其它较少用到的权限设置。
其中之一是 setuid 位(八进制 4000)。当应用到一个可执行文件时,它把有效用户 ID 从真正的用户(实际运行程序的用户)设置成程序所有者的 ID。这种操作通常会应用到一些由超级用户所拥有的程序。当一个普通用户运行一个程序,这个程序由根用户 (root) 所有,并且设置了 setuid 位,这个程序运行时具有超级用户的特权,这样程序就可以访问普通用户禁止访问的文件和目录。很明显,因为这会引起安全方面的问题,所有可以设置 setuid 位的程序个数,必须控制在绝对小的范围内。
第二个是 setgid 位(八进制 2000),这个相似于 setuid 位,把有效用户组 ID 从真正的用户组 ID 更改为文件所有者的组 ID。如果设置了一个目录的 setgid 位,则目录中新创建的文件具有这个目录用户组的所有权,而不是文件创建者所属用户组的所有权。对于共享目录来说,当一个普通用户组中的成员,需要访问共享目录中的所有文件,而不管文件所有者的主用户组时,那么设置 setgid 位很有用处。
第三个是 sticky 位(八进制 1000)。这个继承于 Unix,在 Unix 中,它可能把一个可执行文件标志为“不可交换的”。在 Linux 中,会忽略文件的 sticky 位,但是如果一个目录设置了 sticky 位,那么它能阻止用户删除或重命名文件,除非用户是这个目录的所有者,或者是文件所有者,或是超级用户。这个经常用来控制访问共享目录,比方说/tmp。