PING icmp open socket : 가상 서버에서 작업이 허용되지 않습니다


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

2
iputils-ping을 다시 설치하려고 했습니까?
Nabil Bourenane 2016 년

또 다른 정보가 유용 할 수 있습니다. 이것은 초당 약 5 ~ 7 번 액세스 할 수있는 Apache를 실행하는 생산성이 높은 시스템이므로 네트워크 구성을 수정하는 방법을 모릅니다. 어젯밤에 새로운 하드웨어로 옮겨졌으며, 이후 Munin은 Ping이 작동하지 않음을 보여줍니다.
rexkogitans 2016 년

답변:


12

TL; DR 버전 : 재설치 iputils-ping

온라인에서 사용을 제안받은 곳을 보았습니다.

chmod u+s $( which ping );

그러나이를 통해 사용자는 예압과 플러드를 변경할 수 있습니다. 이로 인해 USER가 로컬 컴퓨터 나 다른 컴퓨터 또는 네트워크를 거부 할 수 있습니다.

@ nabil-bourenane이 제안한 것을 시도 iputils-ping하여 다시 설치 하여 문제를 해결하고 SUID 비트가 설정되지 않았습니다.

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

SUID 비트가 설정되면

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

이미 루트 인 경우 SUID 루트 바이너리는 크게 변경되지 않습니다.
팔콘 Momot

@ FalconMomot, 솔루션을 추가했습니다.
rexkogitans

CentOS7에서 iputils (이전 / 이후 버전) 재설치가 저에게 효과적이었습니다. 이전에는 getcap / bin / ping에 기능이 설정되지 않았습니다. 다시 설치 한 후 다음을 getcap /bin/ping반환하십시오 /bin/ping = cap_net_admin,cap_net_raw+p.. 이제 문제는 기능을 잃었 는지 입니다. rpm --verify iputilsping, arping 및 clockdiff는 모두 캡 설정이 (재설치 전에) 변경되었음을 보여줍니다.
후안

필자의 경우 덤프 이미지에서 복원 한 후 파일 기능이 손실되었을 수 있습니다. unix.com/unix-for-advanced-and-expert-users/… 도 참조하십시오 . 이 경우 그들은 tar를 사용했습니다. 필자의 경우 덤프 / 복원에서 모든 파일 속성 (공격자, 기능, acls 등)이 유지되기를 바랐습니다. 나는 그것이 놀랍지 않다는 것에 놀랐다. 그래서 나는 그것을 재현 할 수 있는지 (그리고 아마도 버그를 기록 할 수 있는지) 알아야한다.
Juan

1

해결 방법은 호스트 시스템에서 원시 소켓을 허용하도록 Linux 시스템 기능을 설정하는 것입니다.

이것은 매우 v- 서버에 특정한 문제이므로, 해결책은 다음과 같은 단일 행 파일을 작성하는 것입니다 /etc/vservers/VMNAME/bcapabilities.

NET_RAW

VM을 재부팅합니다.


1
"그리고 어떻게 이것을 달성합니까?" 완전한 답변으로 유용합니다.
ILMostro_7 1

4 년 후, 나는 대답을 정말로 바 꾸었습니다. 왜냐하면 질문에 실제로 답하기 때문입니다. 이것은 v-server 문제이며 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 2016

사실, setcap cap_net_raw+p $(which ping)루트로 수정합니다. 이 블로그 게시물에 대한 자세한 설명이 있습니다 : Linux Capabilities and Ping
mivk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.