PING icmp open套接字:vserver中不允许进行操作


14

我正在运行具有多个虚拟机的虚拟服务器环境。单个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

请注意,在主机以及那里的所有其他VM主机上,Ping均可正常运行。

请问有人有帮助我的想法吗?


/bin/ping设置的uid上的其他机器?在此VM上是否正确设置了TCP / IP?还有其他功能,例如DNS,traceroute,HTTP吗?
David Schwartz 2015年

2
您是否尝试重新安装iputils-ping?
Nabil Bourenane 2015年

另一个信息可能会有用:这是一台运行Apache的高产机器,每秒大约有5到7次访问-因此不知道修改网络配置。昨晚它已移至新硬件,从那以后,Munin显示Ping无法正常工作。
rexkogitans

Answers:


12

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

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

chmod u+s $( which ping );

但是,这将允许用户更改预载和洪水。这可能导致用户能够拒绝本地计算机或另一台计算机或网络的服务。

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

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

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

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

如果您已经是root用户,则SUID root二进制文件不会有太大变化。
Falcon Momot 2015年

@FalconMomot,我附加了解决方案。
rexkogitans 2015年

重新安装iputils(之前/之后的相同版本)在centos7上对我有用。以前,getcap / bin / ping没有显示功能设置。重新安装后,getcap /bin/ping返回:/bin/ping = cap_net_admin,cap_net_raw+p。现在的问题是:为什么它失去了功能。 rpm --verify iputils确实表明ping,arping和clockdiff都表明上限设置已更改(在重新安装之前)。
胡安

就我而言,从转储映像还原后,它可能失去了文件功能。另请参见unix.com/unix-for-advanced-and-expert-users/…。在这种情况下,他们使用了焦油。就我而言,我希望转储/恢复保留所有这些文件属性(属性,功能,ACL等)。我很惊讶没有这样做,所以我必须看看我是否可以重现它(然后记录一个错误)。
胡安

1

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

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

NET_RAW

并重新启动VM。


1
“你怎么做到的?” 将是一个完整的答案。
ILMostro_7

4年后,我将接受的答案更改为我的答案,因为它确实回答了这个问题。这是虚拟服务器问题,与ping可执行文件的文件模式无关。
rexkogitans

1

对不起,我不能发表评论。在通过最小的安装解压缩了工作系统的存档后,这个问题使我震惊。

以上所有答案均有效。但是,出于安全考虑,@ Nabil Bourenane和@Linx提出的建议是首选。为了回答@rexkogitans的评论,这里我引用iputils-ping.postinst(/ var / lib / dpkg / info / ...)

if command -v setcap > /dev/null; then
    if setcap cap_net_raw+ep /bin/ping; then
        chmod u-s /bin/ping
    else
        echo "Setcap failed on /bin/ping, falling back to setuid" >&2
        chmod u+s /bin/ping
    fi
else
    echo "Setcap is not installed, falling back to setuid" >&2
    chmod u+s /bin/ping
fi

基本上说,在配置iputils-ping时,请先尝试使用setcap,然后使用chmod u + s失败。这就是为什么重新安装iputils-ping的原因。


1
这样就可以了:setcap cap_net_raw + ep / bin / ping
rlf

这不是我的评论,而是我对自己问题的回答。无法从容器内部解决问题,因此安装后挂钩所做的任何事情都是毫无意义的。
rexkogitans

确实,setcap cap_net_raw+p $(which ping)根修复它。这篇博客文章有一个详尽的解释:Linux Capabilities and Ping
mivk 18-10-6
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.