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