《快乐的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。