在一个512M vps上安装 Debian Trixie后,发现无法使用 ping命令。尝试执行时,收到错误信息:

ping: socket: Operation not permitted

并且附加提示可能缺少 cap_net_raw+p 权限或 setuid 设置。

不过,使用root用户时ping正常工作,因此问题出在权限上。

搜索后,发现两种方法可以启用ping。

更改 sysctl 权限

如果要对一组用户启用 ping,可以运行以下命令:

sudo sysctl net.ipv4.ping_group_range='0 4294967295'

如果只想对当前用户启用 ping,可以将范围设为自己的用户 ID,例如 1001 1001。

要使该更改永久生效,可以在 /etc/sysctl.d/99-allow-ping.conf 文件中添加相应配置。但请不要这样做,继续往下看有更优的方案。

为 ping 可执行文件设置setcap(capabilities)

首先,检查 ping 是否已经具有某些 capabilities:

getcap /usr/bin/ping

如果没有,则手动设置所需权限:

setcap cap_net_raw+p /usr/bin/ping

最佳方案

实际上,正确的解决方案是安装软件包:linux-sysctl-defaults, 该包默认推荐安装,但这台vps内存只有512M ,实际上没有安装。

安装后,它会在/usr/lib/sysctl.d/50-default.conf 中添加以下配置:

-net.ipv4.ping_group_range = 0 2147483647

该配置与前面提到的 sysctl 方案类似,重启生效后即可正常使用ping。