用户权限检查ioctl命令

时间:2015-04-27 09:25:15

标签: linux linux-kernel ioctl

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

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

2 个答案:

答案 0 :(得分:3)

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

如您所见,有许多类似管理员的功能。选择一个看起来更适合你的任务。或者只需要 CAP_SYS_ADMIN

答案 1 :(得分:2)

通过写权限限制

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

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

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

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

按功能限制

如果用户具有指定的capabilityCAP_SYS_ADMIN可能合适),您可以限制某些ioctl命令。

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