Linux 系统的安全模型
- 用户登录系统时必须提供用户名和密码。 (用户是由root用户创建的,最初的密码也是root用户设定的)
- 使用用户和群组来控制使用者访问文件和其他资源的权限。
- 系统上的每一个文件都一定属于一个用户(一般该用户就是文件的创建者)并与一个群组相关。
- 每一个进程都会与一个用户和群组相关联。可以通过在所有的文件和资源上设定权限来只允许该文件的所有者或者某个群组的成员访问它们。
Linux 文件的三类权限:
- (u)所有者::文件的所有者的权限
- (g)同组用户::与所有者同一群组的其他用户的权限
- (o)其他用户::非所有者也不同群的用户的权限
(root用户不受权限限制,可以访问Linux上的任何资源)
权限的表示
| 字母表示 | 数字表示 | 含义 | 对文件的权限 | 对目录的权限 |
|---|---|---|---|---|
| r | 4 | Read | 可阅读文件 | 使用ls列出目录内容 |
| w | 2 | Write | 可编辑文件 | 编辑目录(在其中创建、删除等) |
| x | 1 | eXecute | 可执行程序(可执行文件) | 使用cd进入目录,用ls -l查看目录详情 |
| - (连字符) | 0 | no | 没用相应的权限(同位的r|w|x) | 没用相应的权限(同位的r|w|x) |
查看文件的权限
用 ls -l 命令:显示结果中的第1列(10个字符)表示文件的mode:
其中第1个字符表示文件的类型:
- 如果是d就表示是目录
- 如果是-就表示是文件
紧接其后的9个字符是这个文件或命令的权限:
Linux 的安全检测流程
设定文件权限
设定文件或目录上的权限要用chmod命令:
chmod [-R] mode 文件或目录名
-R:递归的,设置同时应用于目录中的子目录和所有文件,只有root可用。
mode: 详见👇
mode 可以由表达式或数字表示。
a+x: 用表达式表示权限
用 {who} {operator} {permission} 表示 mode:
权限状态可以分成3个部分:
-
第1部分,表示要设定谁的状态:
- u:所有者的权限。
- g:群组内成员的权限。
- o:既不是 owner 也不与 owner 在同一个 group 的其他用户的权限。
- a:所有以上 3 组,也就是所有用户的权限。
-
第2部分,运算符(操作符)
+:加入权限。-:去掉权限。=:设定权限。
-
第3部分,权限(permission)
r:read权限。w:write权限。x:execute权限。
e.g. 在tastingFile文件上添加上所有者和同组用户的可执行权限:
$ chmod ug+x tastingFile
777: 用数字表示:
用 一组三位数 表示 mode:
(1)第1个数字 代表 所有者 (own user) 的权限 (u)
(2)第2个数字 代表 群组 (group) 的权限 (g)
(3)第3个数字 代表 其他用户(other) 的权限 (o)
这组3位数中的每一位数字都是由以下表示资源权限状态的数字(即4、2、1和0)相加而获得的总和:
4:100(2):表示具有 read 权限。
2:010(2):表示具有 write 权限。
1:001(2):表示具有 execute 权限。
0:000(2):表示 没有相应的权限。
即:
e.g.
e.g. 对 owner (foo) 开放家目录的 bar 子目录和其中所有文件的一切权限,但是对同组用户开放读和执行权限而对其他用户只开放读权限:
# chmod -R 754 /home/foo/bar
特殊权限(第4组权限)
第4组权限包括suid、sgid 和 sticky 三种权限。
其中,
-
suid :100:4:借用 u 的可执行权限位,并以
s来表示; -
sgid : 10:2:借用 g 的可执行权限位,并以
s来表示; -
sticky : 1:1:借用 o 的可执行权限位,并以
t来表示;
当在一个文件上加入 suid|sgid|sticky 特殊权限时:
- 如果原来的文件的
u|g|o具有x权限,就使用小写的s|s|t来代替x; - 如果原来没有
x,就用大写的S|S|T来代替;
特殊权限的作用
将 suid 和 sgid 设定在可执行文件上:
- 运行有 suid 特殊权限的可执行文件时:是以可执行文件的所有者权限来运行这一可执行文件的,而不是以执行者的权限来运行该命令。
- sgid 特殊权限与 suid 类似,是以命令的群组的权限来运行这一命令的。
将 sgid 和 sticky 设定在目录上:
- 一个目录上设置了 sticky 权限,就只有文件的所有者和 root 用户才可以删除该目录中的文件,而 Linux 系统不会理会 group 或 other 的写权限。
- 一个目录上设置了 sgid 权限,只要是同一群组的成员,都可以在这个目录中创建文件。
- 通常会对目录同时设置 sticky 和 sgid 这两个特殊权限以方便项目的管理(将同一个项目的文件都放到这一个目录中以方便同一项目的成员之间共享信息)。
设置特殊权限
字符式:
$ chmod [u|g|o][+,-,=][s|s|t] file
数字式:
$ chmod [0-7][0-7][0-7][0-7] file # 第四组表示特殊权限