This commit is contained in:
Xingyu Wang 2019-11-08 23:31:22 +08:00
parent c82b105b1b
commit 082dcc2fd6

View File

@ -12,11 +12,11 @@
> 知道如何控制用户对文件的访问是一项基本的系统管理技能。
![Penguins][1]
![](https://img.linux.net.cn/data/attachment/album/201911/08/233101y043rn4ua00r3lqn.jpg)
了解 Linux 权限以及如何控制哪些用户可以访问文件是系统管理的一项基本技能。
本文将介绍标准 Linux 文件系统权限,并进一步研究特殊权限,以及使用 `umask` 解释默认权限的出处
本文将介绍标准 Linux 文件系统权限,并进一步研究特殊权限,以及使用 `umask` 来解释默认权限作为文章的结束
### 理解 ls 命令的输出
@ -61,7 +61,7 @@ drwxrwxrwx. 2 root root 4.0K Mar  4 20:04 testdir
* 组
* 所有其他人
  
第 2、3 和 4 节涉及用户、组和“其他用户”权限。每个部分都可以包含 `r`(读)、`w`(写)和 `x`执行)权限的组合。
第 2、3 和 4 节涉及用户(属主)、组和“其他用户”权限。每个部分都可以包含 `r`(读)、`w`(写)和 `x`(执行)权限的组合。
每个权限还分配了一个数值,这在以八进制表示形式讨论权限时很重要。
@ -71,7 +71,7 @@ drwxrwxrwx. 2 root root 4.0K Mar  4 20:04 testdir
`w` | 2
`x` | 1
第 5 节描述了其他访问方法,例如 SELinux 或文件访问控制列表FACL
第 5 节描述了其他替代访问方法,例如 SELinux 或文件访问控制列表FACL
访问方法 | 字符
---|---
@ -95,7 +95,7 @@ $ chown root:root foo
$ chown root: foo
```
在用户后跟冒号(`:`)运行该命令将同时设置用户和组所有权。
在用户后跟冒号(`:`)运行该命令将同时设置用户和组所有权。
要仅将文件 `foo` 的用户所有权设置为 `root` 用户,请输入:
@ -115,9 +115,9 @@ $ chown :root foo
`chmod` 命令可以以八进制(例如 `755`、`644` 等)和符号(例如 `u+rwx`、`g-rwx`、`o=rw`)格式设置权限。
八进制表示法将 4 个“点”分配给“读取”,将 2 个“点”分配给“写入”,将 1 个点分配给“执行”。如果要给用户(属主)分配“读”权限,则将 4 分配给第一个插槽,但是如果要添加“写”权限,则必须添加 2。如果要添加“执行”则要添加 1。我们对每种权限类型执行此操作属主、组和其他。
八进制表示法将 4 个“点”分配给“读取”,将 2 个“点”分配给“写入”,将 1 个点分配给“执行”。如果要给用户(属主)分配“读”权限,则将 4 分配给第一个插槽,但是如果要添加“写”权限,则必须添加 2。如果要添加“执行”则要添加 1。我们对每种权限类型执行此操作属主、组和其他。
例如,如果我们想将 “读取”、“写入”和“执行”分配给文件的属主,但仅将“读取”和“执行”分配给组成员和所有其他用户,则我们应使用 `755`(八进制格式)。这是属主的所有权限位(`4 + 2 + 1`),但组和其他权限的所有权限位只有 `4``1``4 + 1`)。
例如,如果我们想将“读取”、“写入”和“执行”分配给文件的属主,但仅将“读取”和“执行”分配给组成员和所有其他用户,则我们应使用 `755`(八进制格式)。这是属主的所有权限位(`4+2+1`),但组和其他权限的所有权限位只有 `4``1``4+1`)。
> 细分为4+2+1=74+1=5 和 4+1=5。
@ -149,11 +149,11 @@ $ chmod o=rw
### 特殊位:设置 UID、设置 GID 和粘滞位
除了标准权限外,还有一些特殊的权限位,它们具有一些有用的好处。
除了标准权限外,还有一些特殊的权限位,它们具有一些别的用处。
#### 设置用户 IDsuid
当在文件上设置 `suid` 时,将以文件的属主的身份而不是运行该文件的用户身份执行操作。一个[好例子][3]是 `passwd` 命令。它需要设置 `suid` 位,以便更改密码的操作具有 root 权限。
当在文件上设置 `suid` 时,将以文件的属主的身份而不是运行该文件的用户身份执行操作。一个[好例子][3]是 `passwd` 命令。它需要设置 `suid` 位,以便更改密码的操作具有 root 权限。
```
$ ls -l /bin/passwd
@ -168,7 +168,7 @@ $ chmod u+s /bin/foo_file_name
#### 设置组 IDsgid
`sgid` 位与 `suid` 位类似,因为操作是在目录的组所有权下完成的,而不是以运行命令的用户身份。
`sgid` 位与 `suid` 位类似,操作是在目录的组所有权下完成的,而不是以运行命令的用户身份。
一个使用 `sgid` 的例子是,如果多个用户正在同一个目录中工作,并且目录中创建的每个文件都需要具有相同的组权限。下面的示例创建一个名为 `collab_dir` 的目录,设置 `sgid` 位,并将组所有权更改为 `webdev`
@ -189,14 +189,14 @@ $ ls -lah file-sgid
#### “粘滞”位
粘滞位表示只有文件所有者才能删除该文件,即使组权限允许该文件可以删除。通常,在 `/tmp` 这样的通用或协作目录上,此设置最有意义。在下面的示例中,“所有其他人”权限集的“执行”列中的 `t` 表示已应用粘滞位。
粘滞位表示只有文件所有者才能删除该文件,即使组权限允许该文件可以删除。通常,在 `/tmp` 这样的通用或协作目录上,此设置最有意义。在下面的示例中,“所有其他人”权限集的“执行”列中的 `t` 表示已应用粘滞位。
```
$ ls -ld /tmp
drwxrwxrwt. 8 root root 4096 Jun 12 06:07 /tmp/
```
请记住,这不会阻止某个人编辑该文件,它只是阻止他们删除该目录的内容。
请记住,这不会阻止某个人编辑该文件,它只是阻止他们删除该目录的内容LCTT 译注:即删除目录下文件)
我们将粘滞位设置为:
@ -220,7 +220,7 @@ $ chmod 1755
#### 大写还是小写?
如果要设置特殊位看到大写的 `S``T` 而不是小写的字符(如我们之前所见),那是因为不存在(对应的)底层的执行位。为了说明这一点,下面的示例创建一个设置了粘滞位的文件。然后,我们可以添加和删除执行位以演示大小写更改。
如果要设置特殊位看到大写的 `S``T` 而不是小写的字符(如我们之前所见),那是因为不存在(对应的)底层的执行位。为了说明这一点,下面的示例创建一个设置了粘滞位的文件。然后,我们可以添加和删除执行位以演示大小写更改。
```
$ touch file cap-ST-demo
@ -262,7 +262,7 @@ ls -l cap-X-file
### 理解 umask
`umask 会屏蔽(或“阻止”)默认权限集中的位,以定义文件或目录的权限。例如,`umask`输出中的 `2` 表示它至少在默认情况下阻止了文件的写入位。
`umask` 会屏蔽(或“阻止”)默认权限集中的位,以定义文件或目录的权限。例如,`umask`输出中的 `2` 表示它至少在默认情况下阻止了文件的写入位。
使用不带任何参数的 `umask` 命令可以使我们看到当前的 `umask` 设置。共有四列:第一列为特殊的`suid`、`sgid` 或粘滞位而保留,其余三列代表属主、组和其他人的权限。
@ -271,7 +271,7 @@ $ umask
0022
```
为了理解这意味着什么,我们可以用 `-S` 标志来执行 `umask`(如下所示)以解屏蔽位的结果。例如,由于第三列中的值为 `2`,因此将“写入”位从组和其他部分中屏蔽掉了;只能为它们分配“读取”和“执行”。
为了理解这意味着什么,我们可以用 `-S` 标志来执行 `umask`(如下所示)以解屏蔽位的结果。例如,由于第三列中的值为 `2`,因此将“写入”位从组和其他部分中屏蔽掉了;只能为它们分配“读取”和“执行”。
```
$ umask -S
@ -302,7 +302,7 @@ drwxrwxrwx. 2 root root 4096 Jul 17 22:03 dir-umask-000/
### 总结
管理员还有许多其他方法可以控制对系统文件的访问。这些权限是 Linux 的基本权限,我们可以在这些基础上进行构建。如果你的工作将你带入 FACL 或 SELinux你会发现它们也建立在这些文件访问的首要规则之上。
管理员还有许多其他方法可以控制对系统文件的访问。这些权限是 Linux 的基本权限,我们可以在这些基础上进行构建。如果你的工作为你引入了 FACL 或 SELinux你会发现它们也建立在这些文件访问的首要规则之上。
--------------------------------------------------------------------------------