iptables所有者与GIDs的drop icmp匹配,但不匹配UID

我有一个奇怪的iptables行为,我无法解释或理解。

我有一个用户test ,它有其主要的组test 。 我想阻止来自此用户的任何networking访问。

现在,如果我说

 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需要对套接字进行原始访问,而套接字又需要root访问权限。 因此,Ping运行suid,所以socket的所有者的uid是root而不是testing。