zoukankan      html  css  js  c++  java
  • 可加载内核模块(LKM,)

    概述

    可加载模块(LKM)是为了扩展操作系统基本内核功能的object代码文件,通常使用LKM为新的硬件或文件系统添加支持,或添加系统调用,当LKM所提供的功能不需要时,也可以卸载LKM以达到释放内存和资源。

    优点

    如果没有可加载内核模块,操作系统必须将可能的功能全部编译到基础内核中,大部分功能驻留在内存中但不会被使用,造成内存浪费。如果再有新的功能加入,用户就需要重建并重启基础内核。

    在Linux上的实现

    通过modprobe命令,Linux可以挂载或卸载可加载内核模块。从内核2.6版本开始,这些可加载模块就以.ko的形式放置在/lilb/modules文件夹中。lsmod命令列出所有可加载的内核模块,在紧急情况下,当启动因为损坏的模块而不能启动时,可以通过修改内核启动参数来允许/禁止某些特定模块的加载(修改GRUB内核配置菜单)

    二进制兼容性

    Linux没有为内核模块提供稳定的API或ABI,这意味着不同的内核版本中的模块内部结构和功能是有区别的,这会造成兼容性问题,为了解决这个问题,需要将符号版本控制数据放置在可加载ELF模块的.modinfo部分中。在加载一个模块前,会将版本信息与正在运行的内核进行比较,如果版本信息不兼容,这个模块就不会被加载。

    安全性

    虽然可加载模块对运行的内核来说是一个方便的方法,攻击者也可能在一个受感染的系统上阻止检查他的进程或文件,从而保持对系统的控制权。许多rookit都使用这种方式控制系统。需要注意的是,无论在任何系统上,模块都不会帮助提升特权,只是可以让攻击者的入侵隐藏的更好。
    1.对于Linux
    Linux可以通过sysctl选项/proc/sys/kernel/modules_disabled禁用模块加载,initramfs系统会首先加载启动机器所需要的特定模块,然后禁用模块加载功能。

  • 相关阅读:
    LINUX 下编译不通过解答
    线程与进程
    机房收费系统之报表总结2
    【android开发】10款实用的Android UI工具,非常有用!
    EMPTY表示元素不能包含文本,也不能包含子元素
    ResultSet是结果集对象
    如果没有指定Cookie的时效,那么默认的时效是。(选择1项)
    用于调用存储过程的对象是。(选择1项)
    Statement和PreparedStatement都是用来发送和执行SQL语句的
    DTD与XML Schema都是XML文档。(选择1项)
  • 原文地址:https://www.cnblogs.com/call-me-dasheng/p/14343705.html
Copyright © 2011-2022 走看看