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系统会首先加载启动机器所需要的特定模块,然后禁用模块加载功能。

  • 相关阅读:
    python的不可变对象与可变对象及其妙用与坑
    WAAPI+Python使用中的相关问题和学习记录
    开发工具使用
    面试要点5
    面试要点4
    HTTP状态码——详解
    ElasticSearch使用curl导数据报400可能原因
    elasticsearch的安装、部署
    js二级联动
    aspose.words for java操作文档doc,设置一级二级三级标题以及段落表格等详情
  • 原文地址:https://www.cnblogs.com/call-me-dasheng/p/14343705.html
Copyright © 2011-2022 走看看