PING icmp open socket: Operation in vserver nicht erlaubt

14

Ich verwende eine vserver-Umgebung mit mehreren virtuellen Maschinen. Eine einzelne VM hat das folgende Problem:

$ 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

Beachten Sie, dass Ping sowohl auf dem Host-Computer als auch auf allen anderen VM-Hosts einwandfrei funktioniert.

Hat jemand eine Idee, mir zu helfen, bitte?

rexkogitans
quelle
Ist /bin/pingauf den anderen Rechnern set-uid? Ist TCP / IP auf dieser VM korrekt eingerichtet? Funktionieren andere Dinge wie DNS, Traceroute, HTTP?
David Schwartz
2
Haben Sie versucht, iputils-ping neu zu installieren?
Nabil Bourenane
Eine andere Information kann nützlich sein: Dies ist ein hochproduktiver Rechner, auf dem Apache mit etwa 5 bis 7 Zugriffen pro Sekunde ausgeführt wird - also keine Idee, die Netzwerkkonfiguration zu ändern. Es ist letzte Nacht auf eine neue Hardware umgezogen, und seitdem zeigt Munin, dass Ping nicht funktioniert.
rexkogitans

Antworten:

11

TL; DR-Version: Neuinstallation iputils-ping

Ich habe online gesehen, wo die Verwendung vorgeschlagen wurde

chmod u+s $( which ping );

Dadurch kann der Benutzer jedoch die Vorspannung und die Flut ändern. Dies könnte dazu führen, dass ein BENUTZER entweder Ihren lokalen Computer oder einen anderen Computer oder Ihr Netzwerk denialisieren kann.

Ich habe versucht, was @ nabil-bourenane vorschlug , und neu installiert, iputils-pingwodurch das Problem für mich behoben wurde und das SUID-Bit nicht gesetzt ist.

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

Wenn das SUID-Bit gesetzt ist, sieht es so aus

username@server:~$ ls -l $( which ping );
-rwsr-xr-x 1 root root 44104 Nov  8  2014 /bin/ping
Linx
quelle
Wenn Sie bereits als Root angemeldet sind, ändern sich die SUID-Root-Binärdateien nicht wesentlich.
Falcon Momot
@ FalconMomot, ich habe die Lösung angehängt.
rexkogitans
1

Die Lösung besteht darin, die Linux-Systemfähigkeiten so festzulegen, dass Raw-Sockets auf dem Host-Computer zulässig sind.

Da dies ein sehr v-serverspezifisches Problem ist, besteht die Lösung darin, eine einzeilige Datei mit dem Namen zu erstellen /etc/vservers/VMNAME/bcapabilities:

NET_RAW

und starten Sie die VM neu.

rexkogitans
quelle
1
"Und wie schaffen Sie das?" wäre als vollständige antwort sinnvoll.
ILMostro_7
Nach 4 Jahren habe ich die akzeptierte Antwort auf meine geändert, weil sie WIRKLICH DIE FRAGE BEANTWORTET. Dies ist ein V-Server-Problem und hat nichts mit dem Dateimodus der ausführbaren Ping-Datei zu tun.
rexkogitans
1

Entschuldigung, ich kann keinen Kommentar abgeben. Dieses Problem traf mich, nachdem ich ein Archiv eines funktionierenden Systems über eine minimale Installation extrahiert hatte.

Alle obigen Antworten funktionieren. Die von @Nabil Bourenane und @Linx vorgeschlagene Methode wird jedoch aus Sicherheitsgründen bevorzugt. Um den Kommentar von @ rexkogitans zu beantworten, zitiere ich hier aus 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

Das heißt, wenn Sie iputils-ping konfigurieren, versuchen Sie zuerst setcap. Wenn dies fehlschlägt, verwenden Sie chmod u + s. Deshalb funktioniert die Neuinstallation von iputils-ping.

rlf
quelle
1
Das wird also funktionieren: setcap cap_net_raw + ep / bin / ping
rlf
Es war nicht mein Kommentar, sondern meine Antwort auf meine eigene Frage. Das Problem kann nicht aus dem Container heraus gelöst werden. Daher ist es sinnlos, was auch immer der Haken nach der Installation tut.
rexkogitans
In der Tat, setcap cap_net_raw+p $(which ping)wie Root es behebt. In diesem Blog-Beitrag gibt es eine ausführliche Erklärung: Linux Capabilities and Ping
mivk