我有一个奇怪的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。