Hak*_*aba 6 root firewall iptables sudo capabilities
是否有可能在iptables --list …. 没有 root 的情况下执行 命令?
以非 root 身份运行它会打印:
$ iptables --list
iptables v1.4.21: can't initialize iptables table `filter': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
Run Code Online (Sandbox Code Playgroud)
如果您必须是 root 才能列出 iptables,那背后的原因是什么?查看规则是否存在安全问题?是否有iptables --list 需要 root 访问权限的资源或服务?
显然,修改iptables防火墙规则需要特权用户。我正在询问是否查看它们。
是否有允许列出规则的功能,而不是 root?iptables 是否使用 netlink 与内核交互?因为 netlink文档提到
只有有效 UID 为 0 或 CAP_NET_ADMIN 功能的进程才能发送或侦听 netlink 多播组。
也许这不适用于 iptables。
我不确定这是否是正确的做法,但添加功能iptables也不能让我列出规则:
bash-4.1$ echo $UID
2000
bash-4.1$ getcap /sbin/iptables-multi-1.4.7
/sbin/iptables-multi-1.4.7 = cap_net_admin+ep
bash-4.1$ /sbin/iptables-multi-1.4.7 main --list
FATAL: Could not load /lib/modules/3.10.0-514.21.1.el7.x86_64/modules.dep: No such file or directory
iptables v1.4.7: can't initialize iptables table `filter': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
Run Code Online (Sandbox Code Playgroud)
似乎iptables需要 CAP_NET_RAW 和 CAP_NET_ADMIN 才能读取表。我试过
$ cp /usr/sbin/iptables ~/iptables # note, it may be a symbolic link
$ sudo setcap CAP_NET_RAW,CAP_NET_ADMIN+ep ~/iptables
$ ~/iptables -nvL
Run Code Online (Sandbox Code Playgroud)
没关系。
实际上,iptables使用 netlink 接口与内核进行通信。它打开一个到 的 netlink 套接字xtables,然后通过这个套接字发出命令。访问控制是在打开套接字时执行的,而不是针对单个命令,因此列出和修改规则需要相同的权限。允许用户列出规则但不能修改它们的唯一方法是给它们一个精心编写的 setuid(或 setcap)可执行文件。
如果/proc.
| 归档时间: |
|
| 查看次数: |
12091 次 |
| 最近记录: |