安全增强 Linux (SELinux) 剖析

http://tech.ddvip.com   2008年06月05日    社区交流

内容摘要:SELinux 通过对内核和用户空间进行修改,对现有的 GNU/Linux 操作系统进行了扩展,从而使其变得坚不可摧。如果您现在正在使用 2.6 版的内核,就会惊奇地发现您已经在使用 SELinux 了!本文将探究 SELinux 背后的思想及其实现方法。

  清单 1. 创建 socket 的内核代码

static int __sock_create(int family, int type, int protocol,
             struct socket **res, int kern)
{
    int err;
    struct socket *sock;
    /*
     *   Check protocol is in range
     */
    if (family < 0 || family >= NPROTO)
        return -EAFNOSUPPORT;
    if (type < 0 || type >= SOCK_MAX)
        return -EINVAL;
    err = security_socket_create(family, type, protocol, kern);
    if (err)
        return err;
    ...

  security_socket_create 函数在 ./linux/include/linux/security.h 中定义。它提供了从 security_socket_create 到 security_ops 结构中动态安装的函数的间接调用(参见清单 2)。

  清单 2. 用于 socket 创建检查的间接调用

static inline int security_socket_create (int family, int type,
                     int protocol, int kern)
{
    return security_ops->socket_create(family, type, protocol, kern);
}

  security_ops 结构中的函数通过安全模块安装。在本例中,这些钩子在可载入的 SELinux 内核模块中定义。每个 SELinux 调用在 hooks 文件内部定义,该文件实现从内核函数到特定安全模块的动态调用的间接性(参见清单 3 中的 .../linux/security/selinux/hooks.c 代码)。

  清单 3. SELinux socket 创建检查

来源:ibm    作者:M. Tim Jones    责编:豆豆技术应用

正在加载评论...