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
。
答案1
生成 icmp 需要对套接字进行原始访问,而这又需要 root 访问权限。因此,Ping 运行 suid,因此套接字所有者的 uid 是 root,而不是 test。