Соответствие владельца iptables сбрасывает icmp для GID, но не для UID
У меня странное поведение iptables что я не могу объяснить или понять.
У меня есть пользователь test которая имеет свою основную группу test, Я хочу заблокировать любой доступ к сети от этого пользователя.
Теперь, если я скажу
iptables -A OUTPUT -o eth0 -m owner --uid-owner test -j DROP
и я su test и тогда я получаю следующее:
ping faultserver.ru # WORKS
nmap -sP faultserver.ru # fails
wget faultserver.ru # fails
Однако, если я снова сброслю iptables и скажу:
iptables -A OUTPUT -o eth0 -m owner --gid-owner test -j DROP
(обратите внимание на разницу: gid вместо uid) то получаю следующее
ping faultserver.ru # fails
nmap -sP faultserver.ru # fails
wget faultserver.ru # fails
Итак, как вы можете видеть, правило кажется совпадающим оба раза, но только когда я блокирую основную группу, также блокируется ICMP. Это ошибка или есть какой-то смысл, о котором я не знаю?
Я имею в виду, я мог бы просто заблокировать оба и быть счастливым, но я хочу понять, почему они ведут себя по-разному.
мой iptables версия v1.4.4,
1 ответ
Генерация icmp требует прямого доступа к сокету, который, в свою очередь, требует корневого доступа. Поэтому Ping запускает suid, поэтому для владельца сокета используется uid root, а не test.