如何在Arch Linux中为用户授予读取原始数据包的权限?
普通用户运行原始套接字程序的解决方案
针对你在Arch Linux上的需求,无需以root身份运行创建PF_PACKET原始套接字的程序,有两种可行方法:
方法一:使用Linux Capabilities(推荐)
这是最安全的方式,给程序单独授予所需权限,不会全局放开:
- 先编译好你的C程序,假设生成的可执行文件名为
packet_reader - 执行以下命令给程序添加权限:
sudo setcap cap_net_raw,cap_net_admin+eip /path/to/packet_readercap_net_raw:允许创建原始套接字(包括PF_PACKET类型)cap_net_admin:处理部分网络接口操作(比如绑定特定网卡)时需要+eip:让程序继承这些权限并生效
- 现在普通用户直接运行
./packet_reader即可,无需前缀sudo
注意:如果之后移动了程序的位置,需要重新执行上述setcap命令,因为权限是绑定到文件路径的。
方法二:全局开放原始套接字权限(不推荐)
这种方式会让所有普通用户都能创建原始套接字,存在安全风险,仅用于测试场景:
- 临时生效(重启后失效):
sudo sysctl -w net.ipv4.ping_group_range="0 2147483647" - 永久生效:编辑
/etc/sysctl.d/99-sysctl.conf文件,添加一行:
然后执行net.ipv4.ping_group_range = 0 2147483647sudo sysctl --system加载配置
内容的提问来源于stack exchange,提问作者Alex Flint
相关产品推荐
相关产品推荐

