操作系统安全保护机制
如果一个计算机系统有多个用户,并且允许多个进程并发执行,那么数据访问应当加以控制。为此,可以通过机制确保只有经过操作系统授权,进程才可使用相应资源,如文件、内存、CPU 及其他资源。
例如,内存寻址硬件确保一个进程仅可在自己的地址空间内执行,定时器确保没有进程可以一直占用 CPU 而不释放它。设备控制寄存器不能被用户访问,因而保护了各种外围设备的完整性。
因此,保护(protection)是一种机制,用于控制进程或用户访问计算机系统的资源。这种机制必须提供手段,以便指定控制和实施控制。
通过检测组件子系统之间接口的差错隐患,保护可以提高可靠性。接口错误的早期检测通常能够防止已发生故障的子系统影响其他正常的子系统。一个未受保护的资源无法抵御未授权的或不胜任的用户使用(或误用)。支持保护的系统提供手段,以便辨别授权使用和未授权使用,后续章节将会讨论相关内容。
一个系统可以拥有足够的保护,但是仍然容易出错和发生不当访问。例如,现有一个认证(向系统标识自己的手段)信息被盗的用户,他的数据可能被复制或删除,尽管文件和内存的保护仍在继续。防止系统不受外部或内部的攻击是安全(security)的工作。这些攻击的范围很广,如病毒和蠕虫、拒绝服务攻击(用尽所有系统资源以致合法用户无法使用)、身份偷窃、服务偷窃(未授权的系统使用)等。为阻止这些攻击,有些系统让操作系统来完成,其他系统让策略或额外软件来完成。随着安全事件的急剧增长,操作系统安全问题的研发发展迅猛。
保护和安全要求系统能够区分所有用户。大多数的操作系统采用一个列表,以便维护用户名称及其关联用户标识(UserlD,UID)。按照 Windows 的说法,这称为安全旧(Secure ID, SID)。这些数字 ID 对每个用户来说是唯一的,当一个用户登录到系统时,认证阶段确定用户的合适 ID。该用户 ID 与所有该用户的进程和线程相关联。当该 ID 需要为用户可读时,它就会通过用户名称列表而转换成用户名称。
有些环境希望区分用户集合而非单个用户。例如,UNIX 系统的某个文件的所有者可对文件进行所有操作,而有些选定的用户集合只能读取文件。为此,需要定义一个组名称以及属于该组的用户集。组功能的实现可以采用一个系统级的列表,以维护组名称和组标识(group identifier)。一个用户可以属于一个或多个组,这取决于操作系统的设计决策。用户的组 ID 也包含在每个相关的进程和线程中。
对于正常系统使用,用户 ID 和组 ID 就足够了。不过,用户有时需要升级特权(escalate privilege),来获得某个活动的额外许可。例如,用户可能需要访问某个受限设备。操作系统提供多种方法,允许升级特权。例如,在 UNIX 系统中,程序的 setuid 属性允许按程序文件所有者的用户 ID 而不是当前的用户 ID 来运行该程序,该进程会按有效 UID(effective UID)运行,直至它关掉额外特权或终止。
例如,内存寻址硬件确保一个进程仅可在自己的地址空间内执行,定时器确保没有进程可以一直占用 CPU 而不释放它。设备控制寄存器不能被用户访问,因而保护了各种外围设备的完整性。
因此,保护(protection)是一种机制,用于控制进程或用户访问计算机系统的资源。这种机制必须提供手段,以便指定控制和实施控制。
通过检测组件子系统之间接口的差错隐患,保护可以提高可靠性。接口错误的早期检测通常能够防止已发生故障的子系统影响其他正常的子系统。一个未受保护的资源无法抵御未授权的或不胜任的用户使用(或误用)。支持保护的系统提供手段,以便辨别授权使用和未授权使用,后续章节将会讨论相关内容。
一个系统可以拥有足够的保护,但是仍然容易出错和发生不当访问。例如,现有一个认证(向系统标识自己的手段)信息被盗的用户,他的数据可能被复制或删除,尽管文件和内存的保护仍在继续。防止系统不受外部或内部的攻击是安全(security)的工作。这些攻击的范围很广,如病毒和蠕虫、拒绝服务攻击(用尽所有系统资源以致合法用户无法使用)、身份偷窃、服务偷窃(未授权的系统使用)等。为阻止这些攻击,有些系统让操作系统来完成,其他系统让策略或额外软件来完成。随着安全事件的急剧增长,操作系统安全问题的研发发展迅猛。
保护和安全要求系统能够区分所有用户。大多数的操作系统采用一个列表,以便维护用户名称及其关联用户标识(UserlD,UID)。按照 Windows 的说法,这称为安全旧(Secure ID, SID)。这些数字 ID 对每个用户来说是唯一的,当一个用户登录到系统时,认证阶段确定用户的合适 ID。该用户 ID 与所有该用户的进程和线程相关联。当该 ID 需要为用户可读时,它就会通过用户名称列表而转换成用户名称。
有些环境希望区分用户集合而非单个用户。例如,UNIX 系统的某个文件的所有者可对文件进行所有操作,而有些选定的用户集合只能读取文件。为此,需要定义一个组名称以及属于该组的用户集。组功能的实现可以采用一个系统级的列表,以维护组名称和组标识(group identifier)。一个用户可以属于一个或多个组,这取决于操作系统的设计决策。用户的组 ID 也包含在每个相关的进程和线程中。
对于正常系统使用,用户 ID 和组 ID 就足够了。不过,用户有时需要升级特权(escalate privilege),来获得某个活动的额外许可。例如,用户可能需要访问某个受限设备。操作系统提供多种方法,允许升级特权。例如,在 UNIX 系统中,程序的 setuid 属性允许按程序文件所有者的用户 ID 而不是当前的用户 ID 来运行该程序,该进程会按有效 UID(effective UID)运行,直至它关掉额外特权或终止。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算