linux - Setcap 不适用于自定义发行版上的原始套接字
问题描述
我正在构建一个基于 Debian 的小型 linux 发行版,用于自动化网络测试。不过,我遇到了一个非常烦人的问题。许多应用程序,如 paris-traceroute、ping、dublin-traceroute 等都无法正常工作。它们返回无法打开原始 ICMP 套接字的错误。我尝试使用'setcap cap_net_raw+ep ./application',即使getcap指示已设置位,它也不起作用。
如果我尝试将它们用作 setuid root,我也会遇到同样的问题。它们只在 sudo 下工作。所以我想知道我是否搞砸了一些干预库的权限,或者是否还有其他问题。
有人遇到过这样的事情或有解决方案吗?
谢谢!
解决方案
如果有人遇到这个问题,我会解释为什么会失败。我没有提到的是应用程序(如 ping 等)实际上安装在 /opt 中。在这个发行版中 /opt 实际上和 encfs 文件系统仅在 livecd 已获得许可类型的服务器授权后才挂载(这是有正当理由的 - 它会自动测试网络连接并将结果发送给网络工程师。我们只想要它在与用户故障单相关联的特定时间范围内运行)。所以 /opt 不是一个真正的文件系统——它是一个通过 fuse 挂载的加密文件,看起来像一个文件系统。因此 setcap 和 setuid 实际上不起作用,并且可能无法正常工作。
推荐阅读
- python - 为什么 VSCode Code Runner 不支持 f-strings?
- flutter - 如何将导航路线添加到颤振底部导航路线
- ionic-framework - 尝试 Cordova 运行浏览器时出现错误
- javascript - .htaccess RewriteRule 用于在 javascript 中作为非斜杠添加的多个参数
- ios - 在 pushViewController 之后 ViewController 未显示在屏幕上,但它存在于 UI-Debugger 中
- vue.js - 如何在不使用特殊 Vue.js 库的情况下使用 socket.io-client allware?
- angular - 如何在角度 6 中单击面包屑时向用户显示保存通知弹出窗口
- python-3.x - 如果小数为 0,熊猫将浮点数转换为整数
- momentjs - 如何将语言环境日期转换为时间戳
- c# - 选择四舍五入的时间值