我使用 nftables 設定了一些防火牆規則。它們包括一些我有興趣監視的某些類型流量的資料計數器。
現在,我希望能夠讓應用程式讀取這些計數器,最好使用libnftnl,以非 root 使用者身分執行。但是,初始測試nft
表明我無法以非 root 使用者身分讀取 nftables 計數器。
作為根用戶:
$ 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
成功運行。
但是,它還允許執行其他操作,例如更改防火牆規則、新增計數器或刪除現有計數器。