ioctl 命令的用户权限检查
Posted
技术标签:
【中文标题】ioctl 命令的用户权限检查【英文标题】:User Permission check on ioctl command 【发布时间】:2015-04-27 09:25:15 【问题描述】:我正在实现 char 驱动程序 (Linux),并且我的驱动程序中有某些 IOCTL 命令只需要由 ADMIN 执行。
我的问题是如何在我的 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL。
【问题讨论】:
【参考方案1】:您可以使用bool capable(int cap)
函数,如果用户有能力请求,则返回true。 cap 的可能值在内核源代码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;
【讨论】:
以上是关于ioctl 命令的用户权限检查的主要内容,如果未能解决你的问题,请参考以下文章
我的 discord.py 机器人有啥方法可以检查用户是不是具有使用命令的特定权限?