Soquete aberto icing PING: operação não permitida no vserver

14

Estou executando um ambiente vserver com várias máquinas virtuais. Uma única VM tem o seguinte 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

Observe que, na máquina host e em todas as outras máquinas virtuais da VM, o Ping funciona bem.

Alguém tem alguma idéia para me ajudar, por favor?

rexkogitans
fonte
O /bin/pingset-uid está nas outras máquinas? O TCP / IP está configurado corretamente nesta VM? Outras coisas funcionam como DNS, traceroute, HTTP?
David Schwartz
2
Você tentou reinstalar o iputils-ping?
Nabil Bourenane
Outra informação pode ser útil: Esta é uma máquina altamente produtiva executando o Apache com cerca de 5 a 7 acessos por segundo - portanto, não faço ideia de modificar a configuração da rede. Ele mudou-se para um novo hardware ontem à noite e, desde então, Munin mostra que Ping não está funcionando.
Rexkogitans

Respostas:

12

Versão TL; DR: reinstalar iputils-ping

Vi online onde foi sugerido o uso

chmod u+s $( which ping );

No entanto, isso permitirá que o usuário altere a pré-carga e a inundação. O que poderia resultar em um USUÁRIO capaz de negar o serviço em sua máquina local ou em outra máquina ou em sua rede.

Tentei o que o @ nabil-bourenane sugeriu , reinstalando o iputils-pingque resolveu o problema para mim e não tem o bit SUID definido.

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

Se o bit SUID estiver definido, será semelhante a

username@server:~$ ls -l $( which ping );
-rwsr-xr-x 1 root root 44104 Nov  8  2014 /bin/ping
Linx
fonte
Se você já é root, os binários de raiz SUID não mudarão muito.
Falcon Momot
@FalconMomot, eu anexei a solução.
Rexkogitans
1

A solução é configurar os recursos do sistema Linux para permitir soquete bruto na máquina host.

Como esse é um problema específico do servidor v, a solução é criar um arquivo de linha única chamado /etc/vservers/VMNAME/bcapabilities:

NET_RAW

e reinicie a VM.

rexkogitans
fonte
1
"E como você consegue isso?" seria útil como uma resposta completa.
ILMostro_7
Após 4 anos, mudei a resposta aceita para a minha, porque REALMENTE RESPONDE A PERGUNTA. Este é um problema do v-server e não tem nada a ver com o modo de arquivo do executável ping.
Rexkogitans 17/05/19
1

Desculpe, não posso comentar. Esse problema ocorreu após eu extrair um arquivo de um sistema em funcionamento em uma instalação mínima.

Todas as respostas acima funcionam. Mas o proposto por @Nabil Bourenane e @Linx é preferido por segurança. Para responder ao comentário de @ rexkogitans, cito aqui 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

o que basicamente diz ao configurar o iputils-ping, primeiro tente o setcap e, se isso falhar, use chmod u + s. É por isso que a reinstalação do iputils-ping funciona.

rlf
fonte
1
Portanto, isso funcionará: setcap cap_net_raw + ep / bin / ping
rlf
Não foi meu comentário, mas minha resposta para minha própria pergunta. O problema não pode ser resolvido de dentro do contêiner, portanto, o que o gancho de pós-instalação faz é inútil.
Rexkogitans 06/06/19
De fato, setcap cap_net_raw+p $(which ping)como a raiz o corrige. Há uma explicação completa sobre este post: Capacidades Linux e Ping
mivk