fut*_*ere 7 file-permissions user-permissions msr
我正在尝试编写一个可以读取msr寄存器的简单应用程序,并从用户空间运行此应用程序.
我已经加载了msr模块,并为每个人提供了对/ dev/cpu/*/msr的读取权限.但是仍然用户无法访问这些文件,但root可以.
权限如下所示:
crw-r--r-- 1 root root 202, 0 sep 6 17:55 /dev/cpu/0/msr
crw-r--r-- 1 root root 202, 1 sep 6 17:55 /dev/cpu/1/msr
crw-r--r-- 1 root root 202, 2 sep 6 17:55 /dev/cpu/2/msr
crw-r--r-- 1 root root 202, 3 sep 6 17:55 /dev/cpu/3/msr
Run Code Online (Sandbox Code Playgroud)
当我尝试从用户空间读取这些文件时,我一直收到"不允许操作"错误消息,但当root尝试访问它们时工作正常.我究竟做错了什么?我在Ubuntu 13.04上使用内核版本3.11.0.
小智 7
自3.7左右以来主线Linux内核的变化现在要求可执行文件具有CAP_SYS_RAWIO能力来打开MSR设备文件[2].除了加载MSR内核模块并在msr设备文件上设置适当的文件权限之外,还必须使用以下命令将CAP_SYS_RAWIO功能授予需要访问MSR驱动程序的任何用户可执行文件:
sudo setcap cap_sys_rawio=ep <user_executable>
Run Code Online (Sandbox Code Playgroud)
对于我(在 debian 上)来说,它有助于在加载msr模块后设置设备权限。除了PaulUTK的答案之外,作为 root:
setcap cap_sys_rawio=ep <user_executable>
Run Code Online (Sandbox Code Playgroud)
设置设备权限(之前检查):
ls -l /dev/cpu/*/msr
crw------- ... /dev/cpu/0/msr
Run Code Online (Sandbox Code Playgroud)
我添加了一个组msr并分配了它。作为根用户:
chgrp msr /dev/cpu/*/msr
chmod g+rw /dev/cpu/*/msr
ls -l /dev/cpu/*/msr
crw-rw---- ... /dev/cpu/0/msr
Run Code Online (Sandbox Code Playgroud)
将组分配给用户:
usermod -aG msr hardworkinguser
Run Code Online (Sandbox Code Playgroud)
奖金提示:
将组应用为勤奋用户,无需重新登录:
newgrp msr
Run Code Online (Sandbox Code Playgroud)
我还听说必须禁用安全启动。
| 归档时间: |
|
| 查看次数: |
2954 次 |
| 最近记录: |