Linux capabilities
- 对于权限细节参考man 7 capabilities;
- 对于-+= eip操作符参考 man 3 cap_from_text;
- 文档中命令setcap、getcap等都可以通过man命令查看;
我需要在VS Code 调试NuttX应用,它的Sim应用需要cap_net_raw,cap_net_admin权限,否则就无法正常操作HCI设备。
当然网上有一些帖子尝试将VS Code或者GDB运行在root用户,显然这样操作是非常不优雅的。
所以这里尝试给需要调试的应用利用linux capabilities直接给可执行文件设置权限。
此时运行程序,可以通过capsh或者getcaps检查进程确认已经设置成功。
此时通过VS Code启动调试后发现其却没有了需要的文件权限。
看起来是父进程/usr/bin/gdb 启动nuttx进程的时候并没有使用其文件文件属性。
直接测试了gdb ./nuttx确认和上面现象一致,strace确认其通过ptrace创建进程。
怀疑这里是gdb进程没有cap_sys_ptrace权限,添加后再次通过VS Code启用nuttx调试发现其进程已经具有我们需要的权限。