Как я могу использовать команду ping в среде chroot?
$ ping 8.8.8.8
ping: icmp open socket: Operation not permitted
В настоящее время я использую CentO, но в идеале должно быть решение, которое работает во всех средах chroot.
В Linux ping
должен работать от имени пользователя root (потому что он должен связывать сокет необработанного IP-адреса; обычные пользователи могут использовать только UDP и TCP). Он предназначен для установки root. Похоже, ваша копия в chroot не установлена как root. Исправьте разрешения:
chown root:root /bin/ping; chmod u+srwx,go=rx /bin/ping
Обратите внимание, что в chroot могут быть другие команды, которые должны быть установлены (или setgid), в частности su
и sudo
.
Обратите внимание, что в этом ответе подразумевается chroot, а не что-то с большими ограничениями, например тюрьма.
Как уже указывалось, ping
требуется разрешение для привязки необработанного IP-сокета. Традиционно setuid
используется, чтобы позволить обычным пользователям использовать его. Однако, используя возможности (POSIX 1003.1e, возможности (7)), можно выборочно включать минимальный набор возможностей, ограничивая последствия для безопасности потенциальных уязвимостей.
ping
нуждается в возможности CAP_NET_RAW
. Предположим, что путь к двоичному файлу - /usr/bin/ping
, возможность может быть установлена с помощью инструмента setcap
:
setcap cap_net_raw+ep /usr/bin/ping
Используйте getcap
чтобы проверить результат:
getcap /usr/bin/ping
На выходе должно быть что-то вроде
/usr/bin/ping = cap_net_raw+ep
и ping
должен работать сейчас.
Не должно быть проблем с использованием ping или любой другой части цепочки инструментов gnu внутри chroot, если эти двоичные файлы присутствуют на вашем пути. Если эти команды недоступны, возможно, вам следует проверить переменные среды.