OpenBSD 中的 Systrace:系统调用访问管理利器
1. 引言
在 OpenBSD 系统中,Systrace 是一个强大的系统调用访问管理器。它允许系统管理员精确控制哪些程序可以进行哪些系统调用,以及这些调用的具体方式。合理运用 Systrace 能够显著降低运行编写不佳或存在安全漏洞程序时的风险,并且其策略可以独立于 UNIX 权限来限制用户操作。
2. 系统调用基础
2.1 系统调用的定义
系统调用是一种让程序与操作系统内核进行交互的函数。例如,分配内存、打开 TCP/IP 端口或执行磁盘输入输出等操作都属于系统调用。系统调用的详细信息可以在在线手册的第 2 部分找到。
2.2 系统调用与 C 库调用的区别
UNIX 系统支持多种 C 库调用,它们常与系统调用混淆,但实际上 C 库调用只是程序内部编写的标准化例程。比如,在程序中编写一个计算平方根的函数属于 C 库调用,而不使用系统调用就无法编写一个分配内存的函数。若不确定某个函数是系统调用还是 C 库函数,可以查阅在线手册。
2.3 未文档化的系统调用
有时会遇到在线手册中未记录的系统调用,如 break()。这种情况下,需要查阅其他资料来识别这些调用。break() 是一个非常古老的系统调用,仅在 libc 内部使用,程序员一般不会用到,所以它似乎未被记录在手册页中。
3. Systrace 策略
3.1 策略概述
策略是对特定程序可执行的系统调用及其调用方式的描述。虽然听起来简单,但实际细节可能会让人头疼。Systrace(1)