代码之家  ›  专栏  ›  技术社区  ›  Jeremy Powell

Linux中的ioctl命令可以完全枚举吗?

  •  2
  • Jeremy Powell  · 技术社区  · 14 年前

    出于面向安全性的源代码审查的目的,我有兴趣(全面地)查找在Linux内核中注册的所有ioctl命令。另外,我想将它们分类为管理员(例如root)可以访问的和非特权用户可以访问的。

    我不确定是否更容易阅读内核源代码,或者是否有某种方法可以在用户空间中查询列表。如果我需要查看内核,我需要查找哪些函数来注册ioctl?

    3 回复  |  直到 14 年前
        1
  •  5
  •   MarkR    14 年前

    ioctl实际上并没有在内核中注册,每种类型的类文件对象都有一组不同的ioctl可用。

    大多数情况下,它们是使用switch语句实现的。

    所以你真正需要做的是:

    • 找出哪些设备/文件类型与安全相关-那些只能由root用户打开的设备可能不需要检查是否存在root漏洞。

    在实践中,找出哪些ioctl是可用的是非常重要的。许多设备都有一个手册页,其中列出了他们,但其他人没有,名单可能是不完整的。

    通常有一个函数的某个地方有一个大的switch语句。然而,有一种“继承”,许多设备在不同的级别上实现了几种不同类型的ioctl。

    例如,串行端口在中定义了自己的ioctl http://lxr.linux.no/#linux+v2.6.35/drivers/serial/serial_core.c#L1107

    但是,串行端口也有可能在每个驱动程序的基础上定义ioctl,但是由于它们是tty,它们也会响应tty ioctl。

    每个子系统的结构不同,因为它们有不同的行为。

        2
  •  2
  •   Midson    14 年前

        3
  •  1
  •   Dr. Snoopy    14 年前

    file_operations structure

    所以做你想做的事情会很困难,因为每个设备都有自己的ioctl命令。