我必须编写ping函数才能在Linux上运行。语言是C++,所以C语言也不错。
在因特网上搜索并查看ping命令的源代码,结果是我应该创建一个原始套接字:
icmp_sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);如果我在没有超级用户的情况下运行我的应用程序,socket函数将返回-1,即没有成功创建套接字。如果我以超级用户的身份运行它,一切都很好。
现在,ping命令确实创建了一个原始套接字,我可以在没有超级用户权限的情况下运行它。
我的问题是:如何授予应用程序创建原始套接字所需的所有权限,而无需超级用户执行?
发布于 2015-03-04 15:21:22
ping需要在没有(其他)超级用户权限的情况下使用cap_net_raw功能,您的程序也需要这样做。跑
setcap cap_net_raw+ep your_executable_file作为root用户,那么普通用户就可以使用该程序了。
发布于 2015-03-04 15:19:47
您可以使您的程序成为SUID命令,有效地授予它根权限,而不将它们授予正在执行的用户。有关示例和说明,请参见这里。
https://stackoverflow.com/questions/28857941
复制相似问题