SELinux Linux安全新高度 安全增强Linux 剖析( 四 )


{
return security_ops->socket_create(family, type, protocol, kern);
}
security_ops 结构中的函数通过安全模块安装 。在本例中,这些钩子在可载入的 SELinux 内核模块中定义 。每个 SELinux 调用在 hooks 文件内部定义,该文件实现从内核函数到特定安全模块的动态调用的间接性(参见清单 3 中的 .../linux/security/selinux/hooks.c 代码) 。
清单 3. SELinux socket 创建检查
;;;;static int selinux_socket_create(int family, int type,
int protocol, int kern)
{
int err = 0;
struct task_security_struct *tsec;
if (kern)
goto out;
tsec = current->security;
err = avc_has_perm(tsec->sid, tsec->sid,
socket_type_to_security_class(family, type,
protocol), SOCKET__create, NULL);
out:
return err;
}
清单 3 的核心部分是一个调用,用于验证当前操作是否是当前任务(通过 current->security 定义,其中 current 代表当前正在执行的任务)所允许的 。访问向量缓存(Access Vector Cache,AVC)缓存了之前的 SELinux 决策(提高进程的性能) 。此调用包括源安全标识符(sid)、安全类(根据请求操作的详细信息构造)、特定 socket 调用,以及可选的辅助审计数据 。如果未在缓存中找到决策,那么会调用安全服务器来获取决策(此过程如图 2 所示) 。
图 2. 分层 Linux 安全进程
上一页;;[1];[2][3];下一页

推荐阅读