加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

权限 – 什么阻止设备文件被执行?

发布时间:2020-12-14 00:43:54 所属栏目:Linux 来源:网络整理
导读:我正在编写一个内核字符设备驱动程序,我已经实现了fops.read和FIONREAD(0x541B)ioctl. read返回的数据是ELF可执行文件. ls -l确认设备具有r-x权限,并且以下两个命令都允许我执行包含的ELF二进制文件: # cp /dev/foo0 /tmp/bar /tmp/bar-or-# cat /dev/foo0
我正在编写一个内核字符设备驱动程序,我已经实现了fops.read和FIONREAD(0x541B)ioctl. read返回的数据是ELF可执行文件. ls -l确认设备具有r-x权限,并且以下两个命令都允许我执行包含的ELF二进制文件:

# cp /dev/foo0 /tmp/bar && /tmp/bar
-or-
# cat /dev/foo0 > /tmp/bar && /tmp/bar
foo_open
foo_ioctl 0x0000541B
foo_read size=131072 off=0
foo_ioctl 0x0000541B
foo_read size=131072 off=13096
foo_release
Hello from /tmp/bar!
...

请注意,内核消息指示调用的各种驱动程序消息.但是,当我尝试直接运行设备时,出现错误:

# /dev/foo0
foo_open
foo_release
/bin/sh: 6: /dev/foo0: Permission denied

什么检查可能导致权限错误,是否可以覆盖它而不从根本上破坏Linux?我正在使用带有最小sysroot映像的4.18.3内核.

解决方法

man 2 execve开始:

EACCES The file or a script interpreter is not a regular file.

Linux内核只允许执行常规文件,而不是字符设备或任何其他特殊文件.内核检查in the do_open_execat function in fs/exec.c:

if (!S_ISREG(file_inode(file)->i_mode))
    goto exit;

如果你真的想要的话,你可以重新构建没有那个检查的内核,但它可能是有充分理由的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读