我已经使用 nftables 设置了一些防火墙规则。它们包括一些我想要监控的流量类型的数据计数器。
现在,我希望能够让应用程序读取这些计数器,最好使用库,以非 root 用户身份运行。但是,初步测试nft
表明我无法以非 root 用户身份读取 nftables 计数器。
以 root 身份:
$ nft list counter my_table my_counter
table ip my_table {
counter my_counter {
packets 123 bytes 12345
}
}
作为非root用户:
$ nft list counter my_table my_counter
Error: No such file or directory
list counter my_table my_counter
^^^^^^^^
有没有办法以非 root 用户身份读取 nftables 计数器?也许如果一些Linux 功能是否已设置?
答案1
如果您想要更受限制的配置。也许可以使用 sudo。您可以设置仅允许单个命令的规则。
craig_mcqueen ALL = NOPASSWD:/usr/sbin/nft 列表计数器 my_table my_counter
答案2
看起来好像 Linux 功能CAP_NET_ADMIN
可以读取计数器。
例如,使用以下命令为非 root 用户启动 shell CAP_NET_ADMIN
:
capsh --caps="cap_net_admin+eip cap_setpcap,cap_setuid,cap_setgid+ep" --keep=1 --user=myuser --addamb=cap_net_admin -- -c "sh"
从该 shell 中,/usr/sbin/nft list counter my_table my_counter
运行成功。
但是,它还允许执行其他操作,例如更改防火墙规则、添加新计数器或删除现有计数器。