PING icmp 打开套接字:在 vserver 中不允许操作

rex*_*ans 15 permissions virtual-machines ping

我正在运行具有多个虚拟机的 vserver 环境。单个VM存在以下问题:

$ ping 8.8.8.8
ping: icmp open socket: Operation not permitted

$ ls -l $(which ping)
-rwsr-xr-x 1 root root 30736 2007-01-31 00:10 /bin/ping

$ whoami
root

$ mount
/dev/hdv1 on / type ufs (defaults)
none on /proc type proc (0)
none on /tmp type tmpfs (size=16m,mode=1777)
none on /dev/pts type devpts (gid=5,mode=620)

$ uname -a
Linux v-web1 2.6.27.55-vs2.3.0.36.9 #1 SMP Tue Apr 28 11:35:00 CEST 2015 i686 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

请注意,在主机以及所有其他 VM 主机上,Ping 工作正常。

有没有人有任何想法可以帮助我?

Lin*_*inx 17

TL;DR 版本:重新安装 iputils-ping

我在网上看到有人建议使用

chmod u+s $( which ping );
Run Code Online (Sandbox Code Playgroud)

然而,这将允许用户改变预加载和洪水。这可能导致 USER 能够拒绝您的本地机器或另一台机器或您的网络的服务。

我尝试了@nabil-bourenane 的建议,重新安装iputils-ping为我解决了问题并且没有设置 SUID 位。

username@server:~$ ls -l $( which ping );
-rwxr-xr-x 1 root root 44104 Nov  8  2014 /bin/ping
Run Code Online (Sandbox Code Playgroud)

如果设置了 SUID 位,它将看起来像

username@server:~$ ls -l $( which ping );
-rwsr-xr-x 1 root root 44104 Nov  8  2014 /bin/ping
Run Code Online (Sandbox Code Playgroud)


rex*_*ans 3

解决方案是将 Linux 系统功能设置为允许主机上的原始套接字。

由于这是一个非常特定于虚拟服务器的问题,解决方案是创建一个名为的单行文件/etc/vservers/VMNAME/bcapabilities

NET_RAW
Run Code Online (Sandbox Code Playgroud)

并重新启动虚拟机。