这是我的麻烦。
事实:
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'.
我不确定这是一个合理的选择。我希望你能对这个选项发表任何意见。
答案 0 :(得分:0)
既然你说你可以以root身份运行一个进程,那么要做的就是打开文件,然后调用setuid来更改为unpriv用户,并做你需要做的一切。我已经在BSD下完成了这项工作,但无法保证您所处理的任何设备驱动程序都不会查看您的流程'用户ID并因为它不再是root而吓坏了。