技术笔记:TOMOYOLinux(undone)

简介: 技术笔记:TOMOYOLinux(undone)

目录


1. TOMOYO Introduction


2. TOMOYO Sourcecode Analysis


1. Introduction


TOMOYO是一款基于LSM Framework实现的LSMs(安全模块)


Relevant Link:


2. TOMOYO Sourcecode Analysis


以网络连接状态函数(sys_connect)的监控(tomoyo_socket_connect)的监控log作为例子


/source/security/tomoyo/tomoyo.c


/


tomoyo_socket_connect - Check permission for connect().



@sock: Pointer to "struct socket".


@addr: Pointer to "struct sockaddr".


@addr_len: Size of @addr.



Returns 0 on success, negative value otherwise.


/


static int tomoyo_socket_connect(struct socket sock, struct sockaddr addr, int addr_len)


{


return tomoyo_socket_connect_permission(sock, addr, addr_len);


}


/source/security/tomoyo/network.c


/


tomoyo_sock_family - Get socket's family.



@sk: Pointer to "struct sock".



Returns one of PF_INET, PF_INET6, PF_UNIX or 0.


/


static u8 tomoyo_sock_family(struct sock sk)


{


u8 family;


if (tomoyo_kernel_service())


return 0;


family = sk->sk_family;


switch (family)


{


case PF_INET:


//代码效果参考:http://www.lyjsj.net.cn/wx/art_23128.html

case PF_INET6:

case PF_UNIX:


return family;


default:


return 0;


}


}


/**


tomoyo_socket_connect_permission - Check permission for setting the remote address of a socket.



@sock: Pointer to "struct socket".


@addr: Pointer to "struct sockaddr".


@addr_len: Size of @addr.



Returns 0 on success, negative value otherwise.


/


int tomoyo_socket_connect_permission(struct socket sock, struct sockaddr addr, int addr_len)


{


struct tomoyo_addr_info address;


//Get socket's family.(family是链路层的概念)


const u8 family = //代码效果参考:http://www.lyjsj.net.cn/wz/art_23126.html

tomoyo_sock_family(sock->sk);

//socket的类型(TCP、UDP...)(type是传输层的概念)


const unsigned int type = sock->type;


if (!family)


return 0;


address.protocol = type;


switch (type)


{


case SOCK_DGRAM:


case SOCK_RAW:


address.operation = TOMOYO_NETWORK_SEND;


break;


case SOCK_STREAM:


case SOCK_SEQPACKET:


address.operation = TOMOYO_NETWORK_CONNECT;


break;


default:


return 0;


}


if (family == PF_UNIX)


return tomoyo_check_unix_address(addr, addr_len, &address);


return tomoyo_check_inet_address(addr, addr_len, sock->sk->sk_protocol, &address);


}


/ Structure for holding socket address. /


struct tomoyo_addr_info


{


u8 protocol;


u8 operation;


struct tomoyo_inet_addr_info inet;


struct tomoyo_unix_addr_info unix0;


};


static int tomoyo_check_inet_address(const struct sockaddr addr, const unsigned int addr_len, const u16 port, struct tomoyo_addr_info address)


{


struct tomoyo_inet_addr_info i = &address->inet;


switch (addr->sa_family)


{


case AF_INET6:


if (addr_len [span style="color: rgba(0, 0, 0, 1)"> SIN6_LEN_RFC2133)


goto skip;


i->is_ipv6 = true;


i->address = (be32 )((struct sockaddr_in6 ) addr)->sin6_addr.s6_addr;


i->port = ((struct sockaddr_in6 *) addr)->sin6_port;


break;


case AF_INET:


if (addr_len < sizeof(struct sockaddr_in))


goto skip;


i->is_ipv6 = false;


i->address = (be32 ) &((struct sockaddr_in ) addr)->sin_addr;


i->port = ((struct sockaddr_in *) addr)->sin_port;


break;


default:


goto skip;


}


if (address->protocol == SOCK_RAW)


i->port = htons(port);


return tomoyo_inet_entry(address);


skip:


return 0;


}


Relevant Link:


Copyright (c) 2014 LittleHann All rights reserved

相关文章
|
Linux 编译器 Android开发
linux交叉编译nss3,nspr库精讲
linux交叉编译nss3,nspr库精讲
694 1
|
运维 监控 网络安全
ClientAliveCountMax设置0可以吗
在决定"clientalivecountmax"或类似并发控制机制时,务必进行充分的测试与评估,确保既能满足业务连续性要求,又能有效管理资源。访问[专业云服务提供商,了解更多关于优化服务器配置、提升网络应用性能的专业知识与解决方案,帮助您在复杂的网络环境中做出更明智的选择。
353 0
|
数据处理
epoll的水平触发(LT)和边缘触发模式(ET)详解
epoll的水平触发(LT)和边缘触发模式(ET)详解
729 0
|
算法 Linux API
一文聊聊Linux Kernel的加密子系统【Crypto Subsystem】
一文聊聊Linux Kernel的加密子系统【Crypto Subsystem】
1390 1
|
Linux Windows 内存技术
PCIe初始化枚举和资源分配流程分析
本文主要是对PCIe的初始化枚举、资源分配流程进行分析,代码对应的是alikernel-4.19,平台是arm64 ## 1. PCIe architecture ### 1.1 pcie的拓扑结构 在分析PCIe初始化枚举流程之前,先描述下pcie的拓扑结构。 如下图所示: ![11.png](https://ata2-img.oss-cn-zhangjiakou.aliyuncs
8837 1
PCIe初始化枚举和资源分配流程分析
|
机器学习/深度学习 人工智能 算法
深度解密阿里巴巴PAI工作空间:协同创新,智慧计算的新引擎
深度解密阿里巴巴PAI工作空间:协同创新,智慧计算的新引擎 在人工智能领域,团队协作和资源管理是推动技术发展的关键因素。作为阿里巴巴公共AI平台的核心组成部分,PAI工作空间应运而生,为企业和团队提供统一的计算资源管理及人员权限管理能力,为AI开发者提供支持团队协作的全流程开发工具及AI资产管理能力。今天,就让我们一起来深度解密PAI工作空间,了解它是如何成为智慧计算的新引擎的。
407 2
|
JSON NoSQL Redis
cookie 免密登录了解一下
cookie 免密登录了解一下
cookie 免密登录了解一下
|
Linux API SoC
linux系统中驱动框架基本分析
linux系统中驱动框架基本分析
1104 0
|
安全 测试技术 Linux
转: pam 禁止某些用户使用ssh 远程登录
vim /etc/pam.d/sshd         在第一行加入 auth       required     pam_listfile.
2347 0
|
人工智能
当你拥有一个AI助理时,可以做什么?ChatGLM2-6B
当你拥有一个AI助理时,可以做什么?ChatGLM2-6B
327 2