我已经构建了一个C ++二进制文件并在其上调用了setcap cap_net_raw,cap_setpcap+pe
,并授予了NET_RAW
和SET_PCAP
功能。我已经通过成功创建socket(AF_PACKET, SOCK_RAW, ...)
来验证这些功能存在于二进制文件中。在不调用setcap
的情况下,socket
函数将返回权限错误。
出于安全原因,我想在获得套接字后放弃NET_RAW
功能。这就是为什么我还要设置SET_PCAP
功能,以便我可以调用prctl(PR_CAPBSET_DROP, CAP_NET_RAW, ...)
的原因。进行此呼叫后,prctl(PR_CAPBSET_READ, CAP_NET_RAW, ...)
表示我不再具有NET_RAW
权限。 但是,我仍然可以成功致电socket(..., SOCK_RAW, ...)
!即使我关闭了现有的原始套接字,以后仍然可以创建一个新的套接字。
我还需要做些其他事情来删除进程的权限来创建新的原始套接字吗?