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.