PING icmp open socket: operazione non consentita in vserver


14

Sto eseguendo un ambiente vserver con diverse macchine virtuali. Una singola macchina virtuale presenta il seguente problema:

$ 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

Si noti che sul computer host e su tutti gli altri hostet VM presenti, Ping funziona correttamente.

Qualcuno ha qualche idea di aiutarmi, per favore?


È /bin/pingset-uid sulle altre macchine? TCP / IP è impostato correttamente su questa VM? Altre cose funzionano come DNS, traceroute, HTTP?
— David Schwartz,

2
Hai provato a reinstallare iputils-ping?
— Nabil Bourenane,

Un'altra informazione può essere utile: questa è una macchina altamente produttiva che esegue Apache con circa 5-7 accessi al secondo, quindi non hai idea di come modificare la configurazione di rete. È passato a un nuovo hardware ieri sera e da allora Munin mostra che Ping non funziona.
— rexkogitans,

Risposte:


12

TL; versione DR: reinstallare iputils-ping

Ho visto online dove è stato suggerito di usare

chmod u+s $( which ping );

Tuttavia, ciò consentirà all'utente di modificare il precarico e il flood. Il che potrebbe comportare la negazione del servizio da parte di un UTENTE sul tuo computer locale o su un altro computer o sulla tua rete.

Ho provato ciò che ha suggerito @ nabil-bourenane , reinstallando ciò iputils-pingche ha risolto il problema per me e non ha impostato il bit SUID.

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

Se il bit SUID è impostato, sembrerà

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

Se sei già root, i binari root SUID non cambieranno molto.
— Falcon Momot,

@FalconMomot, ho aggiunto la soluzione.
— rexkogitans,

Reinstallare iputils (stessa versione prima / dopo) ha funzionato per me su centos7. Prima, getcap / bin / ping non mostrava alcuna funzionalità impostata. Dopo reinstallazione, getcap /bin/pingtornato: /bin/ping = cap_net_admin,cap_net_raw+p. Ora la domanda è: perché ha perso le capacità. rpm --verify iputilsha mostrato che ping, arping e clockdiff hanno mostrato che le impostazioni del cap erano state modificate (prima della reinstallazione).
— Juan

Nel mio caso, potrebbe aver perso le capacità dei file dopo un ripristino da un'immagine di dump. Vedi anche unix.com/unix-for-advanced-and-expert-users/… . In quel caso, hanno usato tar. Nel mio caso, speravo che il dump / restore conservasse tutti quegli attributi di file (attr, capacità, acl, ecc.). Sono sorpreso che non lo abbia fatto, quindi dovrò vedere se riesco a riprodurlo (e quindi magari registrare un bug).
— Juan

1

La soluzione consiste nell'impostare le funzionalità del sistema Linux in modo da consentire socket non elaborati sul computer host.

Poiché si tratta di un problema specifico per v-server, la soluzione è creare un file a riga singola denominato /etc/vservers/VMNAME/bcapabilities:

NET_RAW

e riavviare VM.


1
"E come ci riesci?" sarebbe utile come risposta completa.
— ILMostro_7,

Dopo 4 anni, ho cambiato la mia risposta accettata, perché RISPONDE DAVVERO ALLA DOMANDA. Questo è un problema di v-server e non ha nulla a che fare con la modalità file dell'eseguibile ping.
— rexkogitans

1

Mi dispiace non posso commentare. Questo problema mi ha colpito dopo aver estratto un archivio di un sistema funzionante su un'installazione minima.

Tutte le risposte sopra funzionano. Ma quello proposto da @Nabil Bourenane e @Linx è preferito per sicurezza. Per rispondere al commento di @ rexkogitans, qui cito da 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

che in pratica dice quando si configura iputils-ping, provare prima setcap quindi se fallisce usare chmod u + s. Ecco perché la reinstallazione di iputils-ping funziona.


1
Quindi funzionerà: setcap cap_net_raw + ep / bin / ping
— rlf

Non era il mio commento, ma la mia risposta alla mia domanda. Il problema non può essere risolto dall'interno del contenitore, quindi qualunque cosa faccia l'hook post installazione è inutile.
— rexkogitans,

In effetti, setcap cap_net_raw+p $(which ping)come root lo risolve. C'è una spiegazione approfondita su questo post del blog: Funzionalità Linux e Ping
— mivk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.