保护与安全
引入
词汇
| English | 释义 | 拼音 |
|---|---|---|
| rings | 特权级 | tè quán jí |
| kernel mode | 特权模式 | tè quán mó shì |
| system call | 系统调用 | xì tǒng diào yòng |
| least privilege | 特权最小化 | tè quán zuì xiǎo huà |
两个环,一扇门
- 用户态跑应用代码;特权模式 kernel mode 跑 OS、可碰设备与页表。CPU 的模式位落实特权级 rings;穿越点是系统调用 system call——墙上仅有的门。

{exercise:uni-cs0706-rings}
练习
用户代码只能通过——触及内核服务。
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
模式位砌墙;系统调用是仅有的门。
一次穿越的定价
- 用户态发起
open("/notes/x"):trap 切换模式位、保存用户寄存器、跳到固定向量;内核校验路径、填描述符;模式位翻回。 - 每次系统调用两回穿越、每回约 100 ns:$10^6$ 次系统调用付 0.2 s——库函数做缓冲与批处理的原因。
{exercise:uni-cs0706-crossing}
练习
一次系统调用两回穿越、每回约 100 ns;一百万次花——
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
1e6 × 2 × 100 ns = 0.2 s——所以要批处理。
最小特权与被迷惑的代理人
- 特权最小化 least privilege 给每个进程恰好所需:页表按进程、文件权限按用户(9 位:属主/组/其他各读写执行)、权能按对象。
- 特权打印守护进程被要求打印
/salary/db时动用的是自己的权限而非用户的——被迷惑的代理人。修法:传权能(打开的描述符)而不是名字。每次穿越都校验;特权基越小目标越小。
{exercise:uni-cs0706-least}
练习
被迷惑的代理人靠传——来修复。
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
权能(已打开的描述符)让代理人只能用被交给的东西。