【发布时间】:2011-02-03 11:58:32
【问题描述】:
pcap_lookupdev()以非root用户运行时填充errbuf变量,同样的函数以root用户运行时返回第一个可用网络接口的值。
操作系统或库是否禁用了此访问权限。我认为是操作系统。什么是正确答案?
这不是作业题
【问题讨论】:
pcap_lookupdev()以非root用户运行时填充errbuf变量,同样的函数以root用户运行时返回第一个可用网络接口的值。
操作系统或库是否禁用了此访问权限。我认为是操作系统。什么是正确答案?
这不是作业题
【问题讨论】:
一般来说,当涉及到访问操作系统提供的文件、设备和其他服务时,Unix(以及 Linux)中的访问模型是在 操作系统中实现的。
用户空间程序应该只是尝试他们想做的任何事情并优雅地处理任何错误情况,例如用消息通知用户。
这有几个优点:
可维护性:访问策略实施保留在操作系统中,并且可以统一配置。想要限制对资源的访问的管理员这样做一次,而不是必须在这里配置这个库,而不是那里配置那个库,然后......
可配置性:管理员可以根据需要配置简单或复杂的访问策略,而不受每个用户空间实现的限制。
安全性:通常不应信任用户空间程序来强制执行访问策略。就像狼看羊一样。
编辑:
在您的情况下,pcap 需要对网络接口进行低级访问。由于安全隐患(捕获网络流量、生成任意网络数据包等),此类访问仅限于特权用户。例如,在 Linux 上,pcap 需要 CAP_NET_RAW capability 可供用户使用。
【讨论】:
许多 pcap 函数需要 root 权限才能正常工作。这可能是问题吗?
【讨论】:
这主要取决于操作系统。并非所有pcap 函数在所有操作系统上都需要root 权限。
参考Reference Manual Pages,分别列出所有特殊权限要求。
【讨论】: