是否有将文件描述符传递给另一个进程的技巧?

时间:2014-12-09 01:02:46

标签: linux kernel device

这是我的麻烦。

事实:

1. There is a device placed in /dev/xxx. 
   All files under /dev/ should have permission of 700 
   (root permission only accessible. No ownership change and group setting)

2. Not-root user application 'A' needs to open /dev/xxx and 
   perform ioctl on the FD.

我开始考虑几种选择:

option 1) Write a stub application 'X' that can run with root. 
          Open /dev/xxx in 'X' and perform IPC between A and X.

由于IPC开销,这个选项实际上并不是一个好选项,因为A需要经常进行ioctl。

option 2) Change the location of /dev/xxx into some other place like
          /data/xxx where /data/ is accessible by 'A'

出于某种原因,如果我尝试使用有效的持久性打开此/ data / xxx,则open函数将返回权限被拒绝错误。我不明白为什么会这样。内核是否有一些额外的保护用于在/ dev?

中的某个地方打开设备文件
option 3) Write a stub application 'X' that can run with root.
          Open /dev/xxx in 'X' and pass the FD to 'A'.

我不确定这是一个合理的选择。我希望你能对这个选项发表任何意见。

1 个答案:

答案 0 :(得分:0)

既然你说你可以以root身份运行一个进程,那么要做的就是打开文件,然后调用setuid来更改为unpriv用户,并做你需要做的一切。我已经在BSD下完成了这项工作,但无法保证您所处理的任何设备驱动程序都不会查看您的流程'用户ID并因为它不再是root而吓坏了。