SELinux 提供了一个构建到 Linux 内核中的、灵活的 Mandatory Access Control(强制访问控制) (MAC) 系统。在标准的 Linux Discretionary Access Control(自主访问控制) (DAC) 中,一个应用程序或进程以一个用户的身份(UID 或 SUID)运行,它们对目标(如文件、套接字和其它进程)有特定的访问权限。而运行一个 MAC 内核可以防止恶性程序或有设计漏洞的程序对系统进行损坏或破坏。
SELinux 为系统上的所有用户、应用程序、进程和文件都定义了访问和变迁权利。SELinux 使用一个根据实际要求设定的或严格或宽松的安全政策来控制这些实体之间的交互作用。
在日常使用中,一般的系统用户通常不怎么注意 SELinux 的存在,只有系统管理员才需要考虑在他们的服务器环境中要实施的安全政策应该多么严格才合适。根据实际需求,安全政策可以很严格也可以很宽松,可以非常详细。这种详细的配置可以使 SELinux 内核对整个系统进行完全精细的控制。
当一个主观项(subject)(如一个应用程序)要访问一个客观项(object)(如一个文件)时,内核中的安全政策强制服务器会检查 access vector cache(访问矢量缓存) (AVC),其中缓存着的主客观项的权限。如果根据 AVC 中的数据不足以决策的话,该请求会继续并到达安全服务器,该服务器会查看这个应用程序的 security context(安全上下文) 以及那个矩阵中的文件。根据查看的结果,访问权限可能被授予,也可能被拒绝。如果访问权限被拒绝,avc: denied 信息会记录到 /var/log/messages 文件中。主观项和客观项的安全上下文是由所安装的安全政策决定的。同时,安全政策也提供安装安全服务器矩阵所需要的信息。
请参阅以下图示:
SELinux不是在强制模式下运行,而是可以在容许模式下运行,其中 AVC 被检查而且拒绝信息被并记录,但 SELinux 并不强制实施相应的安全政策。这对故障排除和开发或优化 SELinux 政策是很有用的。
要获得关于 SELinux 工作原理的更多信息,请参阅第 4.1.3 节 “其它资源”。