【问题标题】:User Permission check on ioctl commandioctl 命令的用户权限检查
【发布时间】:2015-04-27 09:25:15
【问题描述】:

我正在实现 char 驱动程序 (Linux),并且我的驱动程序中有某些 IOCTL 命令只需要由 ADMIN 执行。

我的问题是如何在我的 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL。

【问题讨论】:

    标签: linux linux-kernel ioctl


    【解决方案1】:

    您可以使用bool capable(int cap) 函数,如果用户有能力请求,则返回truecap 的可能值在内核源代码include/uapi/linux/capability.h 中列出(宏以 CAP_ 开头)。

    如您所见,有许多类似管理员的功能。选择一个似乎更适合您的任务。或者只是采取CAP_SYS_ADMIN

    【讨论】:

      【解决方案2】:

      写权限限制

      如果设备以只读方式打开,您可以限制某些 ioctl 命令。为了实现这一点,给定ioctl 函数的第一个参数struct file *file,测试file->f_mode 是否设置了FMODE_WRITE 位。

      if (!(file->f_mode & FMODE_WRITE))
              return -EACCES;
      

      设置权限,以便只有特定用户或组具有设备的写入权限。这在某些用户应该能够通过以读写模式打开设备来控制设备而其他用户只能通过以只读模式打开设备来读取设备和获取状态的情况下很有用。

      如果用户只想在确保不修改设备的情况下读取设备,用户也可以选择open() 模式为O_RDONLY 的设备。

      能力限制

      您可以将某些 ioctl 命令限制为仅在用户具有指定的 capability 时才被允许(CAP_SYS_ADMIN 可能合适)。

      if (!capable(CAP_SYS_ADMIN))
              return -EACCES;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-11
        • 2018-06-20
        • 2014-04-27
        相关资源
        最近更新 更多