目录

1. TOMOYO Introduction
2. TOMOYO Sourcecode Analysis

1. Introduction

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

Relevant Link:

http://lxr.free-electrons.com/source/Documentation/security/tomoyo.txt

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: 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 = 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 < 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

转载于:https://www.cnblogs.com/LittleHann/p/4149509.html

TOMOYO Linux(undone)相关推荐

  1. linux进入节点权限,一种基于索引节点的Linux访问权限控制方法与流程

    本发明涉及计算机领域,尤其涉及一种基于索引节点的Linux访问权限控制方法. 背景技术: 传统的Linux访问控制方式是DAC(Discretionary Access Control,自主访问控制) ...

  2. 鸟哥的Linux私房菜(基础篇)- 第二十六章、Linux 核心编译与管理

    第二十六章.Linux核心编译与管理 最近升级日期:2009/09/18 我们说的 Linux 其实指的就是核心 (kernel) 而已.这个核心控制你主机的所有硬件并提供系统所有的功能,所以说,他重 ...

  3. 第二十六章、Linux 核心编译与管理

    我们说的 Linux 其实指的就是核心 (kernel) 而已.这个核心控制你主机的所有硬件并提供系统所有的功能, 所以说,他重不重要啊!我们启动的时候其实就是利用启动管理程序加载这个核心文件来侦测硬 ...

  4. Linux 核心编译与管理

    摘自<鸟哥的linux私房菜基础学习篇> 我们说的 Linux 其实挃的就是核心 (kernel) 而已.这个核心控制你主机的所有硬件幵提供系统所有的功能, 所以说,他重丌重要啊!我们开机 ...

  5. linux selinux_安全Linux:第1部分。SELinux –其开发,架构和操作原理的历史

    linux selinux SELinux的历史 在美国国家安全局(NSA)内部启动了涉及开发安全增强型Linux®(SELinux)(该系统提供强制访问控制)的项目. 安全计算公司(SCC)和MIT ...

  6. 360 for Linux 与 setuid

    360 for Linux 与 setuid 前言 今日,国内著名安全类软件 360 正式进军 Linux 平台,目前已提供 Debian/Ubuntu/Deepin 以及中标麒麟的预编译二进制.而包 ...

  7. Linux内核简介、版本号、发布历史及发行版

    https://www.linuxidc.com/Linux/2011-08/40049.htm https://blog.csdn.net/love_Aym/article/details/8072 ...

  8. Gentoo 安装日记 15 (配置内核 :固件驱动..文件系统以及其他)

    Firmware Drivers  --->         //固件就是你板上的BIOS.各种显卡芯片之类的已经固化好的记录某些特定数据的东西. <*> EFI Variable ...

  9. selinux-001

    1.背景 SELinux是「Security-Enhanced Linux」的简称,是美国国家安全局「NSA=The National Security Agency」 和SCC(Secure Com ...

最新文章

  1. Zabbix安装配置(CentOS7.3)
  2. linux 下Eclipse for C/C++的不常见设置
  3. Java关键字transient和volatile小结(转)
  4. asyncio 文件io高并发_python教程:使用 async 和 await 协程进行并发编程
  5. lpc2000 filash utility 程序烧写工具_重点必看 | 取证小程序开发之第四届美亚杯硬盘信息快速解题...
  6. BP神经网络代码实现
  7. substance Pt 工业基础配色及金属配色ID材质
  8. 聊聊计算和这个世界(上)
  9. 1:500城镇地形图测绘已正式启动
  10. 【算法】硬币找钱问题(贪心算法)
  11. pointer在html作用,详解pointer-events属性的使用
  12. 什么是深度学习? 模仿人脑的算法
  13. 新视野大学英语(1)课本单词汇总
  14. 【虚幻引擎UE】UE5 UMG布局和视觉设计(自适应篇)
  15. 计算机应用研究是北大核心吗,计算机应用研究 CSCD核心期刊北大核心期刊统计源期刊...
  16. matlab motor,MATLAB在电机仿真中的应用 Application of MATLAB in motor simulation.pdf
  17. 接下来或许是一年中跳槽的最佳时间
  18. Gitlab回滚到上次提交
  19. android 菜单子菜单 的用法
  20. 刚刚,谷歌翻车了。。。

热门文章

  1. Python3 使用推导式统计字符出现次数
  2. python3数学函数
  3. ElementUI Container布局容器
  4. eclipse设置文档注释的格式
  5. springboot日志自定义路径无效及出现org.springframework.boot.context.properties.bind.BindException错误
  6. 微软自带输入法如何关闭桌面右下角「拼」图标
  7. Java资深反射玩家
  8. 数据结构与算法 / 堆结构
  9. html5 网页桌面图标,打开控制面板是网页,而且桌面上很多图标变成网页
  10. java main函数_都知道Java程序的入口方法是main,那你知道为什么是main方法吗?