PING icmp open socket: работа на сервере невозможна

14

Я использую среду vserver с несколькими виртуальными машинами. Одна виртуальная машина имеет следующую проблему:

$ 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

Обратите внимание, что на хост-машине, а также на всех других хостах виртуальных машин Ping работает нормально.

Кто-нибудь есть идеи, чтобы помочь мне, пожалуйста?

rexkogitans
источник
/bin/pingУстановлен ли на других машинах? TCP / IP правильно настроен на этой виртуальной машине? Работают ли другие вещи, такие как DNS, traceroute, HTTP?
Дэвид Шварц
2
Вы пытались переустановить iputils-ping?
Набиль Буренан
Может пригодиться и другая информация: это высокопроизводительная машина, на которой работает Apache, с 5-7 доступами в секунду, поэтому не стоит задумываться об изменении конфигурации сети. Вчера вечером он перешел на новое оборудование, и с тех пор Мунин показывает, что Ping не работает.
rexkogitans

Ответы:

12

TL; DR версия: переустановить iputils-ping

Я видел в Интернете, где было предложено использовать

chmod u+s $( which ping );

Однако это позволит пользователю изменять предварительную нагрузку и флуд. Это может привести к тому, что ПОЛЬЗОВАТЕЛЬ сможет отказаться от обслуживания вашего локального компьютера, другого компьютера или вашей сети.

Я попробовал то, что предложил @ 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
Linx
источник
Если вы уже являетесь пользователем root, двоичные файлы SUID сильно не изменятся.
Сокол Момот
@FalconMomot, я добавил решение.
Rexkogitans
Переустановка iputils (та же версия до / после) работала у меня на centos7. Ранее getcap / bin / ping не показывал никаких установленных возможностей. После повторной установки, getcap /bin/pingвозвратится /bin/ping = cap_net_admin,cap_net_raw+p. Теперь вопрос: почему он потерял свои возможности. rpm --verify iputilsдействительно показал, что ping, arping и clockdiff все показали, что настройки шапки изменились (до переустановки).
Хуан
В моем случае он может потерять файловые возможности после восстановления из образа дампа. Смотрите также unix.com/unix-for-advanced-and-expert-users/… . В этом случае они использовали смолу. В моем случае я надеялся, что dump / restore сохранит все эти атрибуты файла (атрибуты, возможности, acls и т. Д.). Я удивлен, что это не так, поэтому мне придется посмотреть, смогу ли я воспроизвести его (а затем, возможно, зарегистрировать ошибку).
Хуан
1

Решение состоит в том, чтобы настроить Linux System Capabilites для разрешения необработанного сокета на хост-компьютере.

Так как это очень специфичная для v-сервера проблема, решение заключается в создании файла с одной линией с именем /etc/vservers/VMNAME/bcapabilities:

NET_RAW

и перезагрузите ВМ.

rexkogitans
источник
1
"И как ты этого достигнешь?" было бы полезно в качестве полного ответа.
ILMostro_7
Через 4 года я изменил принятый ответ на мой, потому что он действительно отвечает на вопрос. Это проблема v-сервера и не имеет ничего общего с файловым режимом исполняемого файла ping.
Рекскогитанс
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
Действительно, setcap cap_net_raw+p $(which ping)как root это исправляет. В этом блоге есть подробное объяснение: возможности Linux и Ping
mivk